array
は次のようになります:{{1,3,5,7},{2,4,6,8,10,12},{2,3,5,7,11,13,17}}
と言います。ギザギザの配列から行と列を削除しますか?
1行と1列が削除されていることを除いて、この配列とまったく同じJavaで新しい配列を作成するにはどうすればよいですか?
この作業は偶数サイズのアレイでも実行できますが、ギザギザのアレイでは問題が発生します。私は最初に不特定の列数を持つ新しい配列を作成することを考えましたが、どこから行くのですか?
/**
* Creates a new array that is a copy of the input matrix, except that one
* row and one column have been altered.
* Precondition: the row index is between 0 (inclusive) and the number of
* rows of matrix (not inclusive)
* @param matrix the input two dimensional array
* @param row the index of the row to remove
* @param col the index of the column to remove
*/
public static int[][] removeRowAndCol(int[][] matrix, int row, int col) {
int[][] altered = new int[(matrix.length - 1)][];
int x = 0;
for(int i = 0; i < matrix.length; i++){
if(matrix[i].length < col + 1 && i != row){
altered[x] = new int[matrix[i].length];
for(int j = 0; j < altered[x].length; j++){
altered[x][j] = matrix[i][j];
}
if(x < matrix.length - 1){
x++;
}
}
else if(matrix[i].length > col && i != row){
altered[x] = new int[matrix[i].length - 1];
int y = 0;
for(int z = 0; z < matrix[i].length - 1; z++){
if(z != col){
altered[x][y] = matrix[i][z];
y++;
}
else{
z--;
}
}
if(x < matrix.length - 1){
x++;
}
}
}
return altered;
}
}
ようなテストケースを実行している: removeRowAndCol(新しいINT [] [] {{1,2}、{3,4}}、1、1)、メソッド戻り{{1} } どちらが正しい。
int [] [] array = {{1,2,3,4}、{11,12,13,14,15,16}、{21,22,23} 、24}、{31,32,33}}; removeRowAndCol(array、0、0) removeRowAndCol(array、2,3) メソッドがフリーズします。
誰かがコードを見て、私が間違ったことを教えてもらえますか?
は、行または列が最小のサブアレイ未満であることが保証されて?つまり、行1に列5がないので列5を削除しないでください – Tyler
削除する列と行はどれですか? –
ギザギザであるという事実はそれほど難しくはありません。あなたは通常の場合のコードを含めることができますか? –