запись статических методов для копирования двумерных массивов

#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];
 }
  

НО

  1. Ваша функция возвращает int , а не int[][] .
  2. У вас есть исключение из массива в инструкции return.
  3. Вам нужно инициализировать массив до правильного размера (в данный момент int[0][0] ).
  4. Вы копируете не каждую ячейку в массиве, а массивы неправильным образом.

Правильным подходом было бы:
(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][];