【问题标题】:Using a for loop to Print and Two-Dimensional Array in Java在 Java 中使用 for 循环打印和二维数组
【发布时间】:2013-08-02 13:42:29
【问题描述】:

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

  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 在 doublearray.main(doublearray.java:15)

现在,我知道 ",Tom,Coke" 只分配给 ONE [0] 这就是为什么会出现 null 的原因,但我不知道如何解决这个问题或让它打印出来成功。

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

【问题讨论】:

  • 内部循环将允许 j 为 2,这超出了内部数组的范围。换句话说,Preferences[0][2] 超出了数组的范围,因为长度为 2。内循环应该是 j
  • 答案开始了......
  • 为什么是i &lt; 2j &lt; 3
  • 非常感谢你们,我之前已将其从 >2 更改为 >3,以试图摆脱打印的“nullnull”。干杯! :)

标签: java arrays matrix


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

    你可能想要这样的东西:

    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.
    

    【讨论】:

      【解决方案3】:
      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]);}
          }
           }  
      

      【讨论】:

        【解决方案4】:

        在第二个循环中j 也应该是j&lt;2 而不是j&lt;3

        【讨论】:

          【解决方案5】:
          for (int j =0; j<3; j++){
          

          需要

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

          您没有使数组足够大以使j 成为== 2,所以它是out of bounds

          【讨论】:

            【解决方案6】:

            简单

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

            【讨论】:

            • 非常感谢,这让我摆脱了错误,但现在返回的是 Tom,Cokenullnull,John Pepsi,
            【解决方案7】:

            您已将二维数组定义为:

            new String [2][2];
            

            并且您的循环似乎正在尝试获取诸如

            之类的元素

            new String [0][3]; 等等,因为你的内部 for 循环:

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

            导致数组索引越界。您可能需要将内部 for 循环更改为

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

            然后尝试。

            【讨论】:

              【解决方案8】:

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

              【讨论】:

                【解决方案9】:

                由于数组长度为 2,并且您从 0 开始循环,如何将 j 从 0 变为 2。

                for (int j =0; j 更改为 for (int j =0; j

                【讨论】:

                  【解决方案10】:
                      for (String[] row : Preferences) {
                          System.out.println (Arrays.toString(row) );
                      }
                  

                  输出:

                  [汤姆,可乐,空]

                  [null,约翰,百事可乐]

                  【讨论】:

                  • 欢迎来到 SO!提供一些解释以及您的答案代码总是一个好主意。寻找解决方案的人更有可能理解您的答案。
                  猜你喜欢
                  • 1970-01-01
                  • 2015-06-12
                  • 1970-01-01
                  • 1970-01-01
                  • 2012-11-26
                  • 2018-07-19
                  • 1970-01-01
                  • 2020-12-03
                  • 1970-01-01
                  相关资源
                  最近更新 更多