java - 数组越界>
问题描述
我需要创建一个程序来计算您将收到的更改,但它说:
线程“main”java.lang.ArrayIndexOutOfBoundsException 中的异常:索引 9 超出 Main.main(Main.java:34)处长度 5 的范围
我对在 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--)
。
推荐阅读
- apache-spark - 是否可以通过 Spark 中的值的总和来过滤列?
- powerbi - 由于星型架构关系,Power BI DAX 函数无法正常工作
- javascript - mongoose:如何在查询时访问多个 select:false 属性?
- java - Whitelabel Error Page This application has no configured error view, so you are seeing this as a fallback
- angular - Angular Karma Jasmine 测试“无法绑定到 'ngIf',因为它不是已知属性”
- angular - 使用 p-dropdown NgPrime 过滤 p-dataView
- javascript - 使用js将按钮附加到输入
- python - 如何确定我的 GPU 上的 Tensorflow 的速度?
- jmeter - 了解线程组属性之间的差异
- r - paste() 中的错误 <- 赋值的函数目标扩展到非语言对象