2016-03-26 61 views
0

夥計們!程序生成由用戶在java中定義的矩陣

首先,我來自巴西,很抱歉,如果我犯了一些語法錯誤。

我有問題來解決一個練習,我必須要一個程序,用java生成一個用戶通知維度的matix。然後,它必須填寫由用戶輸入的值。我的代碼停止運行在我的第二個,通過列。我得到一個ArrayIndexOutOfBoundException。你能幫我看看我做錯了什麼嗎?

import java.util.Scanner; 

public class DiagonalsSum { 

public static void main(String[] args) { 
Scanner s = new Scanner(System.in); 
int[][] matrix; 
int[] sizes = new int[2]; 
int diagonalsSum = 0, i, j, n, m; 
for(i = 0; i < 2; i++){ 
    n = i + 1; 
    System.out.println("Inform the " + n + " dimension of the matrix"); 
    sizes[i] = s.nextInt(); 
} 
matrix = new int[sizes[0]][sizes[1]]; 

for(i = 0; i < matriz.length; i++){ 
    n = i + 1; 
    System.out.println(n); 
    for(j = 0; j < matrix[sizes[0]].length; j++){ 
     m = j = 1; 
     System.out.println("Inform the value of " + n + "." + m + 
       " in the matrix:"); 
     matrix[i][j] = s.nextInt(); 
    } 
} 
s.close(); 
i = 0; 
j = 0; 
while(i < matrix.length && j < matrix[sizes[1]].length){ 
    diagonalsSum += matrix[i][j]; 
    i++; 
    j++; 
} 
i = 0; 
j = (matrix[sizes[i]].length - 1); 
while(i < matrix.length && j > 0){ 
    diagonalsSum += matrix[i][j]; 
    i++; 
    j--; 
} 
System.out.println("The sum of the primary and secondary diagonals is " + diagonalsSum); 
} 

在此先感謝,夥計們!

回答

0

夥計!

我改變了一些東西,它的工作!

感謝您的幫助!

import java.util.Scanner; 

public class DiagonalsSum { 

public static void main(String[] args) { 
Scanner s = new Scanner(System.in); 
int[][] matrix; 
int[] sizes = new int[2]; 
int diagonalsSum = 0, i, j, n, m; 
for(i = 0; i < 2; i++){ 
    n = i + 1; 
    System.out.println("Inform the " + n + " dimension of the matrix"); 
    sizes[i] = s.nextInt(); 
} 
matrix = new int[sizes[0]][sizes[1]]; 

for(i = 0; i < sizes[0]; i++){ 
    n = i + 1; 
    System.out.println(n); 
    for(j = 0; j < sizes[1]; j++){ 
     m = j = 1; 
     System.out.println("Inform the value of " + n + "." + m + 
       " in the matrix:"); 
     matrix[i][j] = s.nextInt(); 
    } 
} 
s.close(); 
i = 0; 
j = 0; 
while(i < sizes[0] && j sizes[1]){ 
    diagonalsSum += matrix[i][j]; 
    i++; 
    j++; 
} 
i = 0; 
j = (sizes[1] - 1); 
while(i < sizes[0] && j > -1){ 
    diagonalsSum += matrix[i][j]; 
    i++; 
    j--; 
} 
System.out.println("The sum of the primary and secondary diagonals is " + diagonalsSum); 

}

0

試試這個:

for(i = 0; i < matrix.length; i++){ 
    matrix[i] = new int[sizes[1]]; 
    n = i + 1; 
    System.out.println(n); 
    for(j = 0; j < matrix[sizes[0]].length; j++){ 
     m = j = 1; 
     System.out.println("Inform the value of " + n + "." + m + 
       " in the matrix:"); 
     matrix[i][j] = s.nextInt(); 
    } 
} 

Java的面向對象的語言。如果您將需要的行爲封裝在適當的Matrix課程中,您會做得更好。

0

我認爲這裏有幾個錯誤,但我會解決你問過的一個錯誤。

我相信

for(j = 0; j < matrix[sizes[0]].length; j++) 

總是會導致要出界了,因爲你已經聲明:

matrix = new int[sizes[0]][sizes[1]]; 

注意,Java有0基於索引,這意味着對於任何數組,array[array.length]會超出界限。這種類型的訪問實際上就是你的for循環所做的。

for(j = 0; j < matrix[sizes[0]-1].length; j++) 

應該修復列循環問題。