使用for循环在Java中打印二维数组

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,Coke在主线程中的CokenullException java.lang.ArrayIndexOutOfBoundsException:2 在doublearray.java:第15行中的doublearray.main()

现在我明白了“Tom,Coke”只被分配给[0],这就是为什么出现null的原因,但我不知道如何解决这个问题或使其成功打印。如果有任何帮助,将不胜感激,我已经卡了大约一个小时,谢谢。

内部循环将允许j为2,超出了内部数组的边界。换句话说,Preferences [0] [2]超出了数组的边界,因为长度为2。内部循环应该是j < 2,而不是3。或者更可靠的是Preference [i] .length。 - Logan Murphy
答案开始了...... - Sachin Verma
为什么 i < 2j < 3 - Stobor
非常感谢大家,我之前已经将 >2 改成了 >3,希望能够摆脱“nullnull”被打印出来的问题。干杯!:) - Dan Wyer
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]);
    }
}

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.

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]);}
    }
     }  

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

需要成为
for (int j =0; j<2; j++){

你没有将数组扩大到足够大,使得 j 等于 2,因此它是 越界的


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

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

非常感谢,这已经解决了我的错误,但现在返回的是Tom,Coke null null,John Pepsi。 - Dan Wyer

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++)

和尝试。


1
在第二个循环中,j 应该是 j<2 而不是 j<3。保留HTML标签,不进行解释。

0
    for (String[] row : Preferences) {
        System.out.println (Arrays.toString(row) );
    }

输出:

[汤姆,可乐,空]

[空,约翰,百事可乐]


欢迎来到SO!在您的答案代码中提供一些解释总是一个好主意。寻找解决方案的人更有可能理解您的答案。 - bkis

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

0

如果你的数组长度为2并且循环从0开始,如何将j从0增加到2?

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接