2017-11-20 27 views
-1

私はCSクラスのJava割り当てを行っています。 ユーザー定義の配列から別の配列に値を転送する際に問題が発生しています。 配列を別のメソッドに転送できますが、配列の値を2番目の配列のパラメータに一致させることができません。 ありがとうございます。配列値をある配列から別の配列に変更する

import java.util.*; 
    import java.io.IOException; 
    public class HW5_1{ 
    public static void transpose(int mn[][]) throws IOException 
    { 
    Scanner keyboard = new Scanner(System.in); 
    int i, j; 
    int nm[][] = new int [5][3]; 
    for(i = 0; i < 5; i++){ 
    for(j = 0; j < 3; j++){ 
    nm[i][j]= mn[j][i]; 
    } 
    System.out.println(nm[i][j]+ " " + "/n");} 
    } 
    public static void main(String[] args) throws IOException{ 

    Scanner keyboard = new Scanner(System.in); 

    System.out.println("How many rows?"); 
    int row = keyboard.nextInt(); 

    System.out.println("How many columns?"); 
    int column = keyboard.nextInt(); 

    //Create array 
    int [][] mn = new int[row][column]; 

    //Create variables 
    int i,j = 0; 

    //For loops to receive input 
    for(i = 0; i < row; i++) 
    { 
    for (j = 0; j < column; j++) 
    { 
     System.out.println("Enter the numbers: "); 
     mn[i][j] = keyboard.nextInt(); 
    } 
    } 
    transpose(mn); 
    //Moves array to transpose method 
    } 
} 

私はこの答えになるだろう:

java.lang.ArrayIndexOutOfBoundsException: 3 
    at HW5_1.transpose(HW5_1.java:19) 
    at HW5_1.main(HW5_1.java:47) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) 
    at java.lang.reflect.Method.invoke(Unknown Source) 
    at edu.rice.cs.drjava.model.compiler.JavacCompiler.runCommand(JavacCompiler.java:267) 
+0

:エラーが発生しますか? – Lino

+0

値を入力するときにエラーが発生しました。 java.lang.ArrayIndexOutOfBoundsException:3 HW5_1.transpose(HW5_1.java:19)HW5_1.mainで \t(HW5_1.java:47)sun.reflect.NativeMethodAccessorImpl.invoke0で \t(ネイティブメソッド)で \t \tでedu.rice.cs.でsun.reflect.NativeMethodAccessorImpl.invoke(不明なソース)sun.reflect.DelegatingMethodAccessorImpl.invokeで \t(不明なソース)java.lang.reflect.Method.invokeで \t(不明なソース) \t drjava.model.compiler.JavacCompiler.runCommand(JavacCompiler.java:267) > –

+0

あなたは答えにそれをも提供できますか? – Lino

答えて

0

を私はあなたがのためにループ内であなたのSystem.out.println(nm[i][j]+ " " + "/n");をしたい-methodあなたtransposeで考えます。また、あなたの方法では不要なものがたくさんあります。例えば。 throws宣言だけでなく、keyboard変数も含まれます。

次に、それぞれ行として53のような静的宣言があります。これは、入力配列から値を動的に読み取ることによってスキップすることができます。

最後に、ijという変数をループ外に置く必要はなく、内部でスコープを設定することができます。

だから、クリーンアップの方法は次のようになります。

public static void transpose(int mn[][]){ 
    int nm[][] = new int[mn[0].length][mn.length]; // use the values from mn 
    for(int i = 0; i < 5; i++){ 
     for(int j = 0; j < 3; j++){ 
      nm[i][j] = mn[j][i]; 
      System.out.println(nm[i][j] + " " + "/n"); 
     } 
    } 
} 
+0

しかし、私は今別の問題があります。私は自分の出力を得ると、すべての整数を1行に並べて表示します。どのように各列がそれ自身の出力行を得られるように修正できますか? 1 6 11 2 7 12 3 8 13 4 9 14 5 10 15.私の出力は1 6 11/n 2 7 12/n 3 8 13/n 4 9 14/n 5 10 15でなければなりません。/n、/ nは改行を表します。 –

+0

@NateTulchinskyいつ* *を出力しますか? – Lino

+0

配列を3行5列に設定し、入力として1から15までの数字を入力すると、前のコメントに出力が表示されます。 –

0

をあなたの新しい配列の固定サイズがあります。

int nm[][] = new int [5][3]; 

は、元の配列の次元を使用して変数にそれを行います。

public static void transpose(int mn[][]) throws IOException { 
    Scanner keyboard = new Scanner(System.in); 
    int i, j; 
    int nm[][] = new int [mn.length][mn[0].length]; 
    for(i = 0; i < mn.length; i++){ 
     for(j = 0; j < mn[0].length; j++){ 
      nm[i][j]= mn[j][i]; 
     } 
     System.out.println(nm[i][j]+ " " + "/n"); 
    } 
} 
関連する問題