首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >bounds>外阵列

bounds>外阵列
EN

Stack Overflow用户
提问于 2020-01-23 21:46:29
回答 3查看 161关注 0票数 1

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

线程"main"java.lang.ArrayIndexOutOfBoundsException:索引9中的异常长度5超出Main.main(Main.java:34)的界限

我在Java中使用数组很新,所以任何指针都会有帮助

代码语言:javascript
复制
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]);
    }
}
EN

回答 3

Stack Overflow用户

发布于 2020-01-23 22:27:49

为了添加以前的答案,我建议使用数组长度的引用,而不是硬连接值。在这种情况下,使用for循环来迭代数组是一种不错的做法,从那时起,如果数组将来因任何原因而发生变化,您也不必跟踪硬编码值来调整它。例如,类似于for(int i = currencyArray.length - 1; i >= 0; i--)

票数 2
EN

Stack Overflow用户

发布于 2020-01-23 22:23:58

代码语言:javascript
复制
int[] currencyArray = {penny, nickel, dime, quarter, dollarBill};

这将在数组中分配5个元素,现在数组的大小为5,这意味着您可以访问索引0到4。

代码语言:javascript
复制
for(int i = 9; i >= 0; i--) {
          int remainder = (changeTotal % currencyArray[i]);

在这一行中,您正在尝试索引9,它没有分配给数组。因此,它是数组的界限外的索引。

票数 0
EN

Stack Overflow用户

发布于 2020-01-23 22:32:24

currencyArray的长度为5,在您的代码中,您尝试访问不存在的索引9的元素,这就是为什么您会得到这个异常。

从最后一个索引开始编辑您的循环

代码语言:javascript
复制
for(int i = currencyArray.length-1; i >= 0; i--) {
  int remainder = (changeTotal % currencyArray[i]);
  if(remainder < changeTotal) { 
      changeCount[i] = (changeTotal - remainder) / currencyArray[i]; 
      changeTotal = remainder;
  }
}

currencyArray.length返回数组的长度,因为字符串索引为0,因此需要从长度中减去一个,才能从最后一个索引开始

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59887529

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档