2015-11-10 2 views
1

У меня есть код, где в, массив должен быть определен, в котором размер основан на пользовательском вводе. Как мне это сделать?2-мерный размер массива на основе ввода

Мой код выглядит следующим образом:

public static void main(String args[]) throws Exception { 

    Scanner in = new Scanner(System.in); 
    System.out.println("Enter the number of layers in the network:"); 
    int Nb_Layers = in.nextInt(); 
    int[] Hidden_layer_len = new int[Nb_Layers]; 


    for (int i = 0; i < Nb_Layers-1; i++) 
    { 
     System.out.println("Enter the length of layer" +(i+1)+":"); 
     Hidden_layer_len[i] = in.nextInt(); 

     if(i == 0) 
     { 
      double [][] E = new double[Hidden_layer_len[i]][1];//This is the array I need based on the size mentioned. 

     } 
    } 

    System.out.println(E); 
} 

Я хочу, чтобы это было 2D массив. Мы ценим любые предложения. Спасибо!

+0

Вы хотите 2D массив иметь 'Nb_Layers' строки и' Hidden_layer_len [I] 'столбцы? –

+0

Нет, на данный момент это строки Hidden_layer_len [i] и один столбец. но количество столбцов изменится в соответствии с моими требованиями. –

+0

Вы можете использовать ArrayList - это сработает для вас! В противном случае вы можете выделить определенный размер для своего массива. Если он больше не подходит, вы можете скопировать его на большую ссылку –

ответ

1

Вы можете определить массив вне цикла for и назначить внутри. Например.

double[][] E = null; 
for (int i = 0; i < Nb_Layers - 1; i++) { 
    System.out.println("Enter the length of layer" + (i + 1) + ":"); 
    Hidden_layer_len[i] = in.nextInt(); 

    if (i == 0) { 
     E = new double[Hidden_layer_len[i]][1]; 
    } 
} 

Таким образом, он будет доступен, когда вы напечатаете его в конце.
Кстати, вы, вероятно, хотите, чтобы напечатать как этот

System.out.println(Arrays.deepToString(E)); 
+0

Но целесообразно ли инициализировать E как null? Я читаю в нескольких документах, чтобы избежать как можно большего числа ошибок. –

+0

То, что вы читаете, является правильным. Но в этом случае компилятор/IDE будет жаловаться на то, что 'E', возможно, не был инициализирован, когда он используется для печати. 'Arrays.deepToString (E)' будет печатать «null», если «E» имеет нулевой так мало вреда в этом случае. –

+0

Большое спасибо за разъяснение. Большая помощь :) –

Смежные вопросы