Я пытался решить проблему, которая требует несколько методов:Попутный Ссылки на методы Java
IT выглядит как много, но вы действительно не нужно читать методы. Просто знайте, что я прохожу int[][]
к методу, изменяя int[][]
внутри метода, а затем проверяя на равенство int[][]
вне метода.
public static boolean One(int[][] matrix){
matrix = transpose(matrix);
matrix = reverseRow(matrix);
return Arrays.deepEquals(matrix, changed);
}
public static boolean Two(int[][] matrix){
//180 degree clockwise
matrix = transpose(matrix);
matrix = reverseRow(matrix);
matrix = transpose(matrix);
matrix = reverseRow(matrix);
return Arrays.deepEquals(matrix,changed);
}
public static int[][] transpose(int[][] matrix){
for(int i = 0; i < N; i++) {
for(int j = i+1; j < N; j++) {
int temp = matrix[i][j];
matrix[i][j] = matrix[j][i];
matrix[j][i] = temp;
}
}
return matrix;
}
public static int[][] reverseRow(int[][] matrix){
for(int j = 0; j < N; j++){
for(int i = 0; i < N/2; i++) {
int temp = matrix[j][i];
matrix[j][i] = matrix[j][N - i - 1];
matrix[j][N - i - 1] = temp;
}
}
return matrix;
}
public static int[][] reverseCol(int[][] matrix){
for(int col = 0;col < matrix[0].length; col++){
for(int row = 0; row < matrix.length/2; row++) {
int temp = matrix[row][col];
matrix[row][col] = matrix[matrix.length - row - 1][col];
matrix[matrix.length - row - 1][col] = temp;
}
}
return matrix;
}
Структура задача выглядит следующим образом: У меня есть Int [] [] оригинальных числа У меня есть Int [] [] числа, что является результатом преобразования оригинала номера. В частности, поворот на 90 градусов по часовой стрелке и поворот на 180 градусов по часовой стрелке.
Фактическая проблема намного больше, но я думаю, что существует правило против правильного ответа на проблемы, поэтому я сократил это до необходимого.
Проблема заключается в следующем: После запуска метода один исходный массив изменяется, поэтому он поврежден, прежде чем запускать метод два.
Например, Оригинал перед тем один метод:
1111
0000
0000
0000
Оригинал после метода One;
0001
0001
0001
0001
Эти изменения происходят сразу после запуска транспонирования (матрицы) и reverseRow (матрицы). Обратите внимание, что в режиме отладки java я могу видеть, что оригинал изменяется, когда я перехожу к этим методам. Я НЕ ДОЛЖЕН ПРИНИМАТЬ ОРИГИНАЛ. Я изменил переданную версию оригинала.
Так, 3 вопроса:
Я думал, что объекты, передаваемые методы не изменятся, если не вернуть измененный объект и затем установите оригинал измененные в основном() или оригинальном методе ? Я не говорю о транспозиции или reverseRow, потому что они должны были менять матрицу внутри метода One.
Я проверил это с помощью метода, использующего строки. Моя вера выше верна. Различаются ли int [] []?
Как исправить это, чтобы исходный текст не изменился? Или я пропустил что-то действительно простое?
@ MLProgrammer-CiM Вы имеете в виду пропускную стоимость. – Pshemo
@ MLProgrammer-CiM Это Java, наши переменные содержат значения, которые являются ссылками на объекты. Когда мы передаем их методу, создаются новые ссылки, которые являются копиями исходных ссылок. – Pshemo
@ MLProgrammer-CiM и из-за этого люди все еще смущены, когда мы пытаемся объяснить, что [Java - это пропускная способность (всегда)] (http://www.javaranch.com/campfire/StoryPassBy.jsp). – Pshemo