为什么我得到java.lang.ArrayIndexOutOfBoundsException异常?

时间:2018-01-13 14:12:02

标签: java arrays break

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

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

  

"线程中的异常" main" java.lang.ArrayIndexOutOfBoundsException:5       at 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]);
    }
    }
}   

3 个答案:

答案 0 :(得分:0)

这是你的问题......

        zahlArray[i] = hochzähl;

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

您的支票必须先发生:

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

请注意> = not>

答案 1 :(得分:0)

错误:

  

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

例如。

答案 2 :(得分:0)

因为,您试图访问超出其大小的数组索引。请注意,数组索引从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 > eingabeB)值后移动i。它应该像

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