7

我正在尝试完成一项任务(因此指向大方向会有很大帮助),我必须(按顺序):

  1. 声明一个二维字符串数组,
  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]);
            }
        }
    }   
}

我收到此错误消息

Tom,线程“main”中的 CokenullException java.lang.ArrayIndexOutOfBoundsException: 2 at doublearray.main(doublearray.java:15)

现在,我知道 ",Tom,Coke" 仅分配给ONE [0] 这就是为什么出现 null 的原因,但我不知道如何补救或使其成功打印。

任何帮助将不胜感激,我已经坚持了大约一个小时。谢谢你们。

4

10 回答 10

11

试试这个,这是遍历任意大小的二维数组的正确方法:

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

您已将二维数组定义为:

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 回答
1

在第二个循环中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所以== 2它是out 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 回答
0

看看你的第二个 for 循环。考虑到每个最终维度只有 2 个值的空间

于 2013-08-01T14:51:32.057 回答
0

你怎么能把你的 j 从 0 到 2,因为你的数组长度是 2 并且你从 0 开始你的循环。

for (int j =0; j<3; j++) 更改 为 for (int j =0; j<2; j++)

于 2013-08-01T14:54:15.580 回答
0
    for (String[] row : Preferences) {
        System.out.println (Arrays.toString(row) );
    }

输出:

[汤姆,可乐,空]

[null,约翰,百事可乐]

于 2019-06-06T09:58:33.473 回答