2016-04-04 6 views
-1

Я пытаюсь решить полупростую проблему, в которой я пытаюсь создать массив и вернуть 3-мерный массив на основе параметра, который оказывается равным 2 мерный массив int. Массив, который я пытаюсь вернуть, представляет собой массив String из трех измерений. Так вот код:Создание многомерного массива String из параметра массива метода

public class Displaydata { 

    static String[][][] makeArray(int[][] dimensions) { 
     String myArray[][][]; 
      for (int i = 0; i < dimensions.length; i++) { 

       for (int j = 0; j < dimensions[i].length; j++) { 
        myArray[][][] = new String[i][j][]; //getting error here. 

       } 

      } 
      return myArray; 

    } 

    static void printArray(String[][][] a) { 
    for (int i = 0; i < a.length; i++) { 
     System.out.println("\nrow_" + i); 
     for (int j = 0; j < a[i].length; j++) { 
        System.out.print("\t"); 
      for (int k = 0; k < a[i][j].length; k++) 
          System.out.print(a[i][j][k] + " "); 
          System.out.println(); 
     } 
    } 
    } 

    public static void main(String[] args) { 
     int [][] dim = new int[5][]; 
     dim[0] = new int[2]; 
     dim[1] = new int[4]; 
     dim[2] = new int[1]; 
     dim[3] = new int[7]; 
     dim[4] = new int[13]; 
     dim[0][0] = 4; 
     dim[0][1] = 8; 
     dim[1][0] = 5; 
     dim[1][1] = 6; 
     dim[1][2] = 2; 
     dim[1][3] = 7; 
     dim[2][0] = 11; 
     for (int i = 0; i < dim[3].length;i++) 
      dim[3][i] = 2*i+1; 
     for (int i = 0; i < dim[4].length;i++) 
      dim[4][i] = 26- 2*i; 
     String[][][] threeDee = makeArray(dim); 
     printArray(threeDee); 
    } 


} 

Как вы можете видеть из исходного кода, я получаю сообщение об ошибке при попытке создать экземпляр моего 3-мерного массива, который я пытаюсь вернуться. Я должен создать трехмерный массив с числом строк верхнего уровня, определяемым длиной измерений, и для каждой строки i верхнего уровня число строк второго уровня определяется длиной измерений [i ]. Количество столбцов в строке второго уровня j строки i верхнего уровня определяется значением измерений [i] [j]. Значение каждого элемента массива представляет собой конкатенацию индекса строки верхнего уровня с индексом строки второго уровня с индексом столбца, где индексы представлены буквами: «A» для 0, «B» для 1 и т. Д. (Из Конечно, это будет справедливо только в том случае, если индексы не превышают 25.) Я не обязательно знаю, где я ошибаюсь. Благодаря!

+3

«Я получаю сообщение об ошибке, когда ...» «Какая ошибка? Можете ли вы опубликовать стек? – csmckelvey

+0

Приветствия takendarkk, нет трассировки стека, потому что программа не компилируется. Я не знаю, что я делаю неправильно, чтобы предотвратить компиляцию. Если у вас есть какие-либо положительные идеи поделиться, пожалуйста, сделайте. Благодаря! – Linuxn00b

+0

Что такое ошибка компиляции? – csmckelvey

ответ

1

Вы не должны инициализировать массив на каждой итерации петля. Инициализируйте его один раз за пределами цикла и затем заселите его внутри цикла.

static String[][][] makeArray(int[][] dimensions) { 
    String[][][] myArray = new String[25][25][1]; 
     for (int i = 0; i < dimensions.length; i++) { 
      for (int j = 0; j < dimensions[i].length; j++) { 
       myArray[i][j][0] = i + "," + j; 
      } 

     } 
     return myArray; 
} 

Я просто подключить значений для размера первых двух размеров, вам нужно будет рассчитать их на основе того, что вы положили туда. Значение «i» всегда будет dimensions.length, но значение «j» будет наибольшим значением, возвращаемым из Размеры [0] .length -> размеры [n-1] .length где 'n' - это количество элементов во втором измерении.

Также вам нужно будет настроить способ преобразования чисел в «i» и «j» в буквы, возможно, используйте карту.

+0

Большое спасибо – Linuxn00b

0

Я думаю, вы должны просто изменить эту линию:

myArray = new String[i][j][]; //look ma! no compiler error 

Кроме того, вы должны инициализировать myArray что-то дельное

1

Я думаю, вы должны инициализировать массив в (возможно null?) myArray = new String[i][j][]; //getting error here.

1

Я думаю

myArray[][][] = new String[i][j][]; //getting error here. 

должно быть:

myArray[i][j] = new String[5]; // I have no idea how big you want to go. 

И тогда вы можете заполнить в каждом элементе вам внутрипартийной наиболее массив, как, например:

myArray[i][j][0] = "first item"; 
    myArray[i][j][1] = "second string"; 
    ... 
Смежные вопросы