我需要创建一个程序来计算您将收到的更改,但是它说:

线程“主”中的异常java.lang.ArrayIndexOutOfBoundsException:索引
9超出长度5
    在Main.main(Main.java:34)

我是在Java中使用数组的新手,所以任何指针都将对您有所帮助

import java.math.*;

public class Main {

    static int changeTotal, penny, nickel, dime, quarter, dollarBill,  fiveBill, tenBill, twentyBill, fiftyBill, hundredBill;
    static double payed, price;

    public static void main(String args[]) {

        Scanner myScan = new Scanner(System.in);

        System.out.println("Enter cost of item");
        price = myScan.nextDouble();
        System.out.println("Enter money given");
        payed = myScan.nextDouble();

        int priceInt = (int) (price * 100);
        int payedInt = (int) (payed * 100);

        penny = 1;
        nickel = 5;
        dime = 10;
        quarter = 25;
        dollarBill = 100;

        int[] currencyArray = {penny, nickel, dime, quarter, dollarBill};
        int[] changeCount = {0, 0, 0, 0, 0};
        if(payed > price) {
        changeTotal = payedInt - priceInt;
        }

        for(int i = 9; i >= 0; i--) {
          int remainder = (changeTotal % currencyArray[i]);
            if(remainder < changeTotal) {
                changeCount[i] = (changeTotal - remainder) / currencyArray[i];
            changeTotal = remainder;
            }
        }

        System.out.println(payed - price);
        System.out.println("Ones: " + changeCount[4]);
        System.out.println("Quarters: " + changeCount[3]);
        System.out.println("Dimes: " + changeCount[2]);
        System.out.println("Nickels: " + changeCount[1]);
        System.out.println("Pennies: " + changeCount[0]);
    }
}

最佳答案

为了补充以前的答案,我建议使用对数组长度的引用,而不是硬接线该值。可能遇到这样的情况,在这种情况下,您将使用for循环遍历数组,这是一种不错的做法,因为如果以后数组由于某种原因而将来发生变化,则不必跟踪硬编码值进行调整。例如for(int i = currencyArray.length - 1; i >= 0; i--)之类的东西。

关于java - 数组越界>,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/59887529/

10-14 14:35
查看更多