[英]Java array index out of bounds?
有人可以帮我解决下面发布的错误吗? 该程序运行,但在调用显示捐赠时,我收到关于我的主要的错误。 我怎么能解决这个问题呢? 是否与语法错误有关? 这是我第一次使用数组,所以我欢迎有关良好习惯的反馈。 谢谢!
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 6
at donations.processDonations(donations.java:78)
at donations.main(donations.java:33)
import java.util.Scanner; //needed for input
public class donations {
static double[] cashDonations = new double[6]; // stores the cash donations
// from 6 sites
static double[] lbsFood = new double[6]; // stores the pounds of food
// donated from 6 sites
static String[] siteName = new String[6]; // stores the names of the 6 sites
static String bestSiteCash = " "; // stores the site name with the highest
// cash donation
static String bestSiteFood = " "; // stores the site name with the highest
// food donation
static double totalCash = 0; // stores the total cash collected for all
// sites
static double totalFood = 0; // stores the total food pounds collected for
// all sites
static double maxFood = 0; // store the highest food collection
static double maxCash = 0; // stores the highest cash collection
public static void main(String[] args) {
Scanner input = new Scanner(System.in); // needed for input
String anotherCourse = "yes"; // variable to control running program
// again
do {
getDonations();
processDonations();
displayDonations();
// This code ends the do while to run again
System.out.print("Enter yes if you want to run again: ");
anotherCourse = input.next();
input.nextLine(); // causes skipping issue to fix
System.out.print("\n\n\n");
} while (anotherCourse.equalsIgnoreCase("yes"));
} // end of main
public static void getDonations() {
Scanner input = new Scanner(System.in); // needed for input
// Prompt user for site info
for (int i = 0; i < 6; i++) {
System.out.println("Enter site " + (i + 1) + " name: ");
siteName[i] = input.next();
System.out.println("Enter cash donation(USD) for " + siteName[i]
+ ": ");
cashDonations[i] = input.nextDouble();
// double [] cashDonations = new double [6]; You have this already
// at the top
// int i;
// for (i = 0 ; i < 6 ; i++)
// cashDonations[i] = input.nextDouble();
// double [] lbsFood = new double [6];
System.out.println("Enter food donation(lbs.) for " + siteName[i]
+ ": ");
lbsFood[i] = input.nextDouble();
}
}
public static void processDonations() {
totalCash = 0;
totalFood = 0;
maxCash = cashDonations[0];
maxFood = lbsFood[0];
totalCash = cashDonations[1] + cashDonations[2] + cashDonations[3]
+ cashDonations[4] + cashDonations[5] + cashDonations[6];
totalFood = lbsFood[1] + lbsFood[1] + lbsFood[2] + lbsFood[3]
+ lbsFood[4] + lbsFood[5] + lbsFood[6];
}
public static void displayDonations() {
System.out.print("Total Cash Donations are " + totalCash);
System.out.print("Total Food Donations are " + totalFood);
System.out.print("Donation totals for " + siteName[1]);
System.out.print("Total cash: " + cashDonations[1]);
System.out.print("Food donations " +lbsFood[1]);
System.out.println();
System.out.print("Donation totals for " + siteName[2]);
System.out.print("Total cash: " + cashDonations[2]);
System.out.print("Food donations " +lbsFood[2]);
System.out.println();
System.out.print("Donation totals for " + siteName[3]);
System.out.print("Total cash: " + cashDonations[3]);
System.out.print("Food donations " +lbsFood[3]);
System.out.println();
System.out.print("Donation totals for " + siteName[4]);
System.out.print("Total cash: " + cashDonations[4]);
System.out.print("Food donations " +lbsFood[4]);
System.out.println();
System.out.print("Donation totals for " + siteName[5]);
System.out.print("Total cash: " + cashDonations[5]);
System.out.print("Food donations " +lbsFood[5]);
System.out.println();
System.out.print("Donation totals for " + siteName[6]);
System.out.print("Total cash: " + cashDonations[6]);
System.out.print("Food donations " +lbsFood[6]);
System.out.println();
}// end of displayDonations()
}// end of class
static double[] cashDonations = new double[6];
这是一个有6个空格的数组,正确。 然而:
maxCash = cashDonations[0];
totalCash = cashDonations[1] + cashDonations[2] + cashDonations[3] + cashDonations[4] + cashDonations[5] + cashDonations[6];
在这里,您正在访问7个空格。 0,1,2,3,4,5和6。
您的代码中有几个位置,您可以直接在代码中引用索引6
。 以下是一些:
System.out.print("Donation totals for " + siteName[6]);
System.out.print("Total cash: " + cashDonations[6]);
System.out.print("Food donations " +lbsFood[6]);
但是所有的数组都被声明为长度为6
。
static double[] cashDonations = new double[6]; // stores the cash donations
// from 6 sites
static double[] lbsFood = new double[6]; // stores the pounds of food
// donated from 6 sites
static String[] siteName = new String[6];
Java中的数组是从0开始的 ,因此长度为n
的数组在这里只有索引0
到n - 1
或0
到5
。 如果需要索引6
,请使数组长度为7
。
我注意到你已经做了一个共同的“一个一个”的错误¯\\ _(ツ)_ /¯
在这里你已经正确地声明了3个大小为6的数组:
static double[] cashDonations = new double[6];
static double[] lbsFood = new double[6];
static String[] siteName = new String[6];
虽然每个数组确实有6个元素,但第一个元素被称为0
[0],[1],[2],[3],[4],[5]
在你的代码中,你调用了不存在的第7个元素“[6]”:
totalCash = cashDonations[1] + cashDonations[2] + cashDonations[3]
+ cashDonations[4] + cashDonations[5] + cashDonations[6];
totalFood = lbsFood[1] + lbsFood[1] + lbsFood[2] + lbsFood[3]
+ lbsFood[4] + lbsFood[5] + lbsFood[6];
要修复它,您只需要将元素从0到5:
totalCash = cashDonations[0] + cashDonations[1] + cashDonations[2]
+ cashDonations[3] + cashDonations[4] + cashDonations[5];
totalFood = lbsFood[0] + lbsFood[1] + lbsFood[2]
+ lbsFood[3] + lbsFood[4] + lbsFood[5];
这是一个容易犯的错误,因为我们被教导说0在我们的整个生命中都没有价值。
继续编程,不要放弃!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.