【问题标题】:Why am I getting java.lang.ArrayIndexOutOfBoundsException exception ?为什么我得到 java.lang.ArrayIndexOutOfBoundsException 异常?
【发布时间】:2018-06-22 18:25:22
【问题描述】:

为什么我的代码不起作用?我想要以下内容:一个人输入一个数字,程序会打印出所有数字,直到输入的数字。这是我更大的代码问题的一部分。这就是为什么使用 while(true)-loopbreak 以及稍后将打印出来的数组对我来说很重要。

让它运行,输入一个数字后它只会说:

“线程“主”中的异常 java.lang.ArrayIndexOutOfBoundsException: 5 在 yt_brotcr_15ff.yt_brotcr_19_Schmierzettel5.main(yt_brotcr_19_Schmierzettel5.java:14)"

有什么问题?

代码如下:

package yt_brotcr_15ff;

import java.util.Scanner;

public class yt_brotcr_19_Schmierzettel5 {
    public static void main (String[] args) {
        int i = 0;
        int hochzähl = 1;
        int eingabeB;
        Scanner s = new Scanner(System.in);
        eingabeB = s.nextInt();
        int[] zahlArray = new int[eingabeB];
        while (true) {
            zahlArray[i] = hochzähl;
            if (i > eingabeB) {
                break;
            }
            i++;
            hochzähl++;
        }
        for (int j = 0; j > eingabeB; j++) {
            System.out.println(zahlArray[j]);
    }
    }
}   

【问题讨论】:

  • 使用arraylist代替array,了解静态和动态数组初始化,....在你的最后一个for循环中使用j

标签: java arrays break


【解决方案1】:

因为,您试图访问超出其大小的数组索引。请注意,数组索引从0 开始,一直到length -1。所以,如果zahlArray的大小是4,那么最大数组索引可以是3

现在,想象一下i=3,它大于 4。所以,(i > eingabeB) 将是 false。因此,循环继续并将 i 的值增加到 4。现在,如您所知,您无法访问数组大小为 4 的索引 4,访问此索引会出现上述异常。

zahlArray[i] = hochzähl;
if (i > eingabeB) 
{
   break;
}
i++;
hochzähl++;

要更正此问题,您应该在增加 i 值后移动 (i > eingabeB)。应该是这样的

zahlArray[i] = hochzähl;
i++;
if (i > eingabeB) 
{
   break;
}
hochzähl++;

【讨论】:

    【解决方案2】:

    这是你的问题....

            zahlArray[i] = hochzähl;
    

    如果i 大于或等于eingabeB,此行将出错。

    您必须先进行检查:

            if (i >= eingabeB) {
                break;
           }
            zahlArray[i] = hochzähl
    

    注意 >= 不是 >

    【讨论】:

      【解决方案3】:

      错误:

      java.lang.ArrayIndexOutOfBoundsException

      被这个抛出:

      int[] zahlArray = new int[eingabeB];
          while (true) {
              zahlArray[i] = hochzähl;
              if (i > eingabeB) {
                  break;
              }
              i++;
              hochzähl++;
          }
      

      第一行创建了一个包含eingabeB 条目的数组,从0 开始。因此最后一个条目的索引为eingabeB-1,而不是您的代码所期望的eingabeB

      有几种方法可以解决这个问题,你可以试试:

      if (hochzähl > eingabeB) { // code
      

      例如。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2020-07-31
        • 2012-03-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多