#java
#java
Вопрос:
я пытаюсь написать статический метод, который создает и возвращает копию двумерного массива int, переданного в качестве параметра. это код, который я написал, но не уверен, что он правильный
public class Array {
private static int[][] arraycopy;
public Array(){
arraycopy =new int[0][0];
}
public static int makecopy(int[][]original){
for(int i=0;i<original.length;i ) {
arraycopy[i]=original[i];
for(int j=0;i<original[i].length; j ){
arraycopy[j]=original[j];
}
}
return arraycopy[i][j];
}
мой возврат также выдает ошибки, говорящие о том, что i и j не объявлены
Ответ №1:
return arraycopy[i][j]
не имеет никакого смысла вне рамок этих for
циклов: i
и j
определяются только в пределах их соответствующих циклов. Вот почему вы получаете ошибку, которую получаете. К счастью для вас, они вам все равно не понадобятся на этом этапе.
Вы хотите изменить свой возвращаемый тип на int[][]
, а оператор return — просто return arraycopy;
Ответ №2:
Прямой ответ:
i и j существуют только в той области, в которой они были объявлены, что означает цикл:
for(int i=0;i<original.length;i ) {
arraycopy[i]=original[i];
for(int j=0;i<original[i].length; j ){
arraycopy[j]=original[j];
}
}
Исправьте это, объявив их вне циклов:
public static int makecopy(int[][]original){
int i, j;
for( i=0;i<original.length;i ) {
arraycopy[i]=original[i];
for( j=0;i<original[i].length; j ){
arraycopy[j]=original[j];
}
}
return arraycopy[i][j];
}
НО
- Ваша функция возвращает
int
, а неint[][]
. - У вас есть исключение из массива в инструкции return.
- Вам нужно инициализировать массив до правильного размера (в данный момент
int[0][0]
). - Вы копируете не каждую ячейку в массиве, а массивы неправильным образом.
Правильным подходом было бы:
(1) удалить объявление массива вне метода, а также конструктор (вы используете статический метод, зачем создавать объекты?)
(2) создайте метод, подобный этому:
public static int[][] makecopy(int[][]original){
int i, j;
int arraycopy[][] = new int[original.length][original[0].length];
for( i=0;i<original.length;i )
{
for( j=0;j<original[i].length; j )
{
arraycopy[i][j] = original[i][j];
}
}
return arraycopy;
}
Сделайте это в качестве первых шагов.
Комментарии:
1. в mbyd, как мне инициализировать массив копирования до его правильного размера, у меня в настоящее время есть public static int [][]makeCopy(int[][]original){ arraycopy=new int[original.length][];