2013-07-24 3 views
1

Я пытался решить это упражнение в течение трех дней, но я не получу его. Идея заключается в создании матрицы, которая увеличивается с одной. Программа запрашивает размер строк и столбцов, а затем создает матрицу.Проблемы с приращением 2-мерного массива java

Даю пример ожидаемого результата:

1 2 3 4 
5 6 7 8 

Вот что я получаю:

1 1 1 1 
1 1 1 1 

И вот мой код:

 public static void main (String[] args) throws IOException { 
     BufferedReader in = new BufferedReader(new InputStreamReader 
         (System.in)); 

     // User enters row and column size of the 2D array. 
     System.out.print ("Input row size: "); 
     int ro = Integer.parseInt(in.readLine()); 

     System.out.print ("Input column size: "); 
     int co = Integer.parseInt(in.readLine()); 
     System.out.println (" Array is " + ro + "x" + co); 

     // Creating a 2D array. 
     int[][] a = new int[ro][co]; 

     // User enters values, which are put into the array. 
     // This is the part where the code fails. 
     System.out.print ("The matrix has " + ro*co + " integer values"); 
     System.out.println (" (one per line): "); 
     for (int r = 0; r < a.length; r++) 
      for (int c = 0; c < a[0].length; c++) { 
       a [r][c] +=1; 
      } 

     // Printing the matrix 
     System.out.println ("Matrix:"); 
     for (int r = 0; r < a.length; r++) { 
      for (int c = 0; c < a[0].length; c++) 
       System.out.print (a[r][c] + " "); 
      System.out.println(); 
     } 

     } 

ответ

5

Вам нужна переменная вне цикла для увеличения, например

int incr = 0; 

В цикле сделать это

a [r][c] = ++incr; 

В настоящем время, вы приращение каждого элемента массива, который Initally 0, так 0+1 всегда заканчивается как 1.

+0

спасибо чувак за очень быструю реакцию! – Developous

0

Вашего цикл просто увеличивает массив на единицу. Поскольку все элементы массива начинаются с нуля, все его увеличивается на 1, таким образом, ваш результат. Попробуйте в том числе переменной вне цикла как:

int i = 0; 

затем измените строку внутри цикла, чтобы что-то вроде

i++; 
a[r][c] = i; 
0

Вы должны увеличивать вне цикла, потому что Array является членом объекта и данных любой объект получает значение по умолчанию, поэтому он назначает 0 каждому элементу массива.

int inc = 0; 

и внутри цикла

a[r][c]=inc++; 
+0

Примечание: при использовании 'inC++' (в отличие от '++ inc') первым элементом в матрице будет' 0'. ('++ inc' увеличивается до назначения,' inC++ 'впоследствии) – peterp

+1

это зависит от вас, что вы хотите как первого элемента, если вы хотите 1, то используйте pre-increment и, если хотите, используйте post-increment .. :) –

+0

Конечно :) просто добавил этот комментарий в качестве дополнительной информации, потому что пример в вопросе начинается с 1. Он был довольно нацелен на начинающих Java, потенциально читающих это, а не на вас :) – peterp

0

государственной статической силы основных (String [] арг) броски IOException {

BufferedReader in = new BufferedReader(new InputStreamReader(System.in)); 

    // User enters row and column size of the 2D array. 
    System.out.print("Input row size: "); 
    int ro = Integer.parseInt(in.readLine()); 

    System.out.print("Input column size: "); 
    int co = Integer.parseInt(in.readLine()); 
    System.out.println(" Array is " + ro + "x" + co); 

    // Creating a 2D array. 
    int[][] a = new int[ro][co]; 

    // User enters values, which are put into the array. 
    // This is the part where the code fails. 
    System.out.print("The matrix has " + ro * co + " integer values"); 
    System.out.println(" (one per line): "); 
    //For incremental purpose 
    int counter = 0; 
    for (int r = 0; r < a.length; r++) 
     for (int c = 0; c < a[0].length; c++) { 
      a[r][c] = ++counter; 
     } 

    // Printing the matrix 
    System.out.println("Matrix:"); 
    for (int r = 0; r < a.length; r++) { 
     for (int c = 0; c < a[0].length; c++) 
      System.out.print(a[r][c] + " "); 
     System.out.println(); 
    } 

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