**现在开始运作。我忘了填充数组列表。多么尴尬。
我收到此错误:
Exception in thread "main" java.lang.IndexOutOfBoundsException: Index: 0, Size: 0
at java.util.ArrayList.rangeCheck(ArrayList.java:604)
at java.util.ArrayList.set(ArrayList.java:397)
at Netbooks.Calculations.topTen(Calculations.java:93)
at Netbooks.Test.main(Test.java:33)
Java Result: 1
错误涉及以下特定行:
aveList.set(maxBook,0.0);
在我看来,这是正确的,但我又是新手,可能是错误的...
我将添加更多代码,以便你们可以检查数组的大小以及其他内容,希望可以捕获我没有的内容。
这是有错误的方法:
public List<String> topTen() throws IOException {
Books books = new Books();
List<String> bookList = books.readBooks();
List<String> topList = new ArrayList<String>(10);
List<Double> aveList = new ArrayList<Double>();
for (int i = 0; i < 10; i++) {
double maxRating = 0.0;
int maxBook = 0;
for (int j = 0; j < aveList.size(); j++) {
if (maxRating < aveList.get(j)) {
maxRating = aveList.get(j);
maxBook = j;
}
}
topList.add(bookList.get(maxBook));
aveList.set(maxBook, 0.0);
}
return topList;
}
这是最初生成ArrayList“ aveList”的位置:
public List<Double> aveRatings() throws IOException {
Books books = new Books();
Ratings ratings = new Ratings();
PureRatings pureRatings = new PureRatings();
int numBooks = books.readBooks().size();
int numCust = ratings.readCustomers().size();
List<List<Integer>> pureRatingsList = pureRatings.parseRatingsFile();
List<Double> aveRatings = new ArrayList<Double>();
for (int j = 0; j < numBooks; j++) {
double sum = 0;
double counter = 0;
for (int i = 0; i < numCust; i++) {
if (pureRatingsList.get(i).get(j) != 0) {
sum = sum + pureRatingsList.get(i).get(j);
} else {
counter++;//Increase counter.
}
}
if (counter == numCust) {
aveRatings.add(0.0);
} else {
aveRatings.add((sum) / (numCust - counter));
}
}
return aveRatings;
}
我已经花了一段时间了,似乎无法找出问题所在。任何帮助,将不胜感激。
最佳答案
给方法赋予与变量相同的名称并没有帮助,但是基本上您的topTen
方法没有调用aveRatings()
-它只是创建一个空列表:
List<Double> aveList = new ArrayList<Double>();
然后尝试在该列表中设置值:
aveList.set(maxBook, 0.0);
即使
maxBook
完全为空,aveList
也将为0。你的意思是写:
List<Double> aveList = aveRatings();
?请注意,我没有查看其余代码的详细信息-我只是在寻找您为什么立即遇到异常的原因。