7

私は割り当てを完了しようとしています(そのため、一般的な方向を指すと非常に役立ちます)。その中で(順番に):

  1. 2次元文字列配列を宣言し、
  2. 値を 2 人の配列とそのお気に入りの飲み物に割り当てます
  3. for ループを使用した出力

public class doublearray {
    public static void main(String[] args){
        String Preferences [] [] = new String [2][2];
        Preferences [0][0]= "Tom, Coke";
        Preferences [1][1]= "John, Pepsi";

        for (int i=0; i<2; i++){
            for (int j =0; j<3; j++){
                System.out.print(Preferences[i][j]);
            }
        }
    }   
}

このエラー メッセージが表示されます

トム、スレッド「メイン」での CokenullException java.lang.ArrayIndexOutOfBoundsException: 2 at doublearray.main(doublearray.java:15)

これで、「、Tom、Coke」がONE [0] にのみ割り当てられていることがわかりました。これが null が表示される理由ですが、それを修正する方法や正常に印刷する方法がわかりません。

どんな助けでも大歓迎です。私はこれに約1時間立ち往生しています。ありがとうございます。

4

10 に答える 10

11

これを試してみてください。これは、任意のサイズの 2 次元配列をトラバースする正しい方法です。

for (int i = 0; i < Preferences.length; i++) {
    for (int j = 0; j < Preferences[i].length; j++) {
        System.out.print(Preferences[i][j]);
    }
}
于 2013-08-01T14:52:13.017 に答える
4

あなたはそのようなものが欲しいかもしれません:

Preferences [0][0]="Tom";
Preferences [0][1]="Coke";
Preferences [1][0]="John";
Preferences [1][1]="Pepsi";

Preferences[0] が Tom に関するもの
であることがわかるでしょう Preferences[1] が John に関するものであることがわかるでしょう

取得すると、列は [0]=>"name" [1] =>"drink" になります。

[0][1] will give you Tom[0] s drink[1] [Coke] for example.  
[0][0] will give you Tom[0] s name[0] [Tom] for example.
[1][1] will give you John[1] s drink[1] [Pepsi] for example.  
[1][0] will give you John[1] s name[0] [John] for example.
于 2013-08-01T14:55:25.600 に答える
2
for (int i=0; i<2; i++){
  //size for inner loop was 3 but should be 2      
  for (int j =0; j<2; j++){

    System.out.print(Preferences[i][j]);}
}
 }  

任意のサイズの場合

for (int i=0; i<Preferences.length; i++){
      for (int j =0; j<Preferences[i].length; j++){

        System.out.print(Preferences[i][j]);}
    }
     }  
于 2013-08-01T14:51:32.257 に答える
1

2番目のループjでは、j<2代わりにj<3

于 2013-08-01T14:51:39.420 に答える
1
for (int j =0; j<3; j++){

する必要があります

for (int j =0; j<2; j++){

配列を十分に大きくしなかったjので== 2out of bounds

于 2013-08-01T14:51:45.903 に答える
1

単純

 for (int i=0; i<2; i++){
        for (int j =0; j<2; j++){

    System.out.print(Preferences[i][j]);}
}
于 2013-08-01T14:52:01.983 に答える
1

2D 配列を次のように定義しました。

new String [2][2];

あなたのループは、次のような要素を取得しようとしているようです

new String [0][3];などなど、内部の for ループが原因です。

    for (int j =0; j<3; j++)

範囲外の配列インデックスにつながります。内側の for ループを次のように変更する必要がある場合があります。

    for (int j =0; j<2; j++)

試してみてください。

于 2013-08-01T14:52:10.850 に答える
0

配列の長さが 2 で、ループを 0 から開始するため、j を 0 から 2 にするにはどうすればよいでしょうか。

for (int j =0; j<3; j++)for (int j =0; j<2; j++)に変更

于 2013-08-01T14:54:15.580 に答える
0

2 番目の for ループを見てください。最終次元ごとに 2 つの値のスペースしかないことを考慮してください

于 2013-08-01T14:51:32.057 に答える