Arrary链接错误java.lang.ArrayIndexOutOfBoundsException:4

时间:2018-10-16 22:23:24

标签: java arrays

我正在尝试制作一个程序,要求用户输入4个月的数据使用情况。然后确定它们是否超出了限制,以及是否需要额外的费用。

但是,当我尝试计算该错误时,我得到了一个错误。错误是:

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 4
at Simonly.main(Simonly.java:33)

将反转为

if (verbruik[i] > MB) {

我该如何解决?欢迎任何建议!

我的完整代码:

import java.util.Scanner;

public class Simonly {


    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        System.out.println("Dit programma is gemaakt door Zakaria El-Bouchahati, IC201, 500785448\n");

        double PRIJS_PRIJS = 9.95;
        double MEEPRIJS = 0.025;
        int MB = 3000;
        double prijs = 0.0;
        double totaalPrijs = 0.0;
        String[] MAANDEN ={"juli", "augustus", "september", "oktober"};
        int[] verbruik = new int[MAANDEN.length];
        System.out.println("Geef je verbruik in MB per maand");

        int i;
        for(i = 0; i < MAANDEN.length; ++i) {
            do {
                System.out.print("\t" + MAANDEN[i] + ": ");
                verbruik[i] = input.nextInt();
                if (verbruik[i] < 0) {
                    System.out.println("Verkeerde input hoger dan nul!");
                }
            } while(verbruik[i] <= 0);
        }

        System.out.println("MAAND \t \t MB KOSTEN");

        for(i = 0; i <= verbruik.length; ++i) {
            if (verbruik[i] > MB) {
                prijs -= MB;
                totaalPrijs += prijs * MEEPRIJS;
            } else {
                totaalPrijs += MEEPRIJS;
            }
        }

        for(i = 0; i <= verbruik.length; ++i) {
            System.out.printf("-%20s " + MAANDEN[i]);
            System.out.println(MAANDEN[i] + "\t" + verbruik + "\t" + prijs);
        }

    }
}

2 个答案:

答案 0 :(得分:0)

问题是您在for循环中使用的是小于或等于。长度为4,因此变量i的值不应超过3,因为数组从位置0开始。

带等号,它将不再越界。

for(i = 0; i < verbruik.length; ++i) {...

答案 1 :(得分:0)

MAANDEN.length为4,verbruik长度为4,循环将从0变为4,即:0、1、2、3、4,如果算它们是5个数字。唯一的例外是告诉您4是超出范围的值。 为避免此类问题,而不必考虑索引,请使用“ for循环的增强形式”:

for (int verbruikValue : verbruik) {
    if (verbruikValue > MB) ...
}
相关问题