2016-03-26 15 views
0

人!Javaでユーザが定義した行列を生成するプログラム

まずはブラジル出身です。文法上の誤りがあれば申し訳ありません。

私は問題に悩まされています。私は、ユーザーに情報を与えられた次元でjavaでmatixを生成するプログラムが必要です。次に、ユーザーが入力した値で行列を埋める必要があります。私のコードは、私の2番目の列で実行して停止します。私は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++) 

は常に範囲外に行くことになると考えています。Javaは、任意の配列のためにということを意味し、0ベースのインデックスを持っていることを

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

注意、array[array.length]意志を限界を超えている。このタイプのアクセスは、あなたのforループが効果的に行っているものです。

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

は、列ループの問題を修正する必要があります。