ArrayList、Java有问题
**现在就让它工作吧。我忘了填充数组列表。真尴尬 我得到了这个错误:ArrayList、Java有问题,java,arraylist,runtime-error,Java,Arraylist,Runtime Error,**现在就让它工作吧。我忘了填充数组列表。真尴尬 我得到了这个错误: 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(
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;
}
public List topTen()引发IOException{
书籍=新书;
List bookList=books.readBooks();
List topList=新阵列列表(10);
List aveList=new ArrayList();
对于(int i=0;i<10;i++){
双最大额定值=0.0;
int-maxBook=0;
对于(int j=0;j
以下是最初生成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;
}
public List aveRatings()引发IOException{
书籍=新书;
评级=新评级();
PureRatings PureRatings=新的PureRatings();
int numBooks=books.readBooks().size();
int numCust=ratings.readCustomers().size();
List pureRatingsList=pureRatings.parseRatingsFile();
列表平均值=新的ArrayList();
对于(int j=0;j
我已经做了一段时间了,似乎无法找出问题所在。任何帮助都将不胜感激。给方法起与变量相同的名字都没有帮助,但基本上你的
topTen
方法没有调用aveRatings()
-它只是创建了一个空列表:
List<Double> aveList = new ArrayList<Double>();
maxBook
将为0,即使aveList
完全为空
你的意思是写:
List<Double> aveList = aveRatings();
List aveList=aveRatings();
??请注意,我没有查看代码其余部分的详细信息-我只查找了为什么会立即出现异常。将方法命名为变量并没有帮助,但基本上您的
topTen
方法没有调用aveRatings()
-它只是创建了一个空列表:
List<Double> aveList = new ArrayList<Double>();
maxBook
将为0,即使aveList
完全为空
你的意思是写:
List<Double> aveList = aveRatings();
List aveList=aveRatings();
??请注意,我没有查看代码其余部分的详细信息-我只查找了为什么会立即出现异常。来自for列表。set()
用指定的元素替换此列表中指定位置的元素(可选操作)
列表中没有任何内容,因此没有可替换的有效索引。来自for列表。set()
用指定的元素替换此列表中指定位置的元素(可选操作)
列表中没有任何内容,因此没有可替换的有效索引。是!多么简单的一个错误…我现在已经开始工作了。非常感谢。你能详细解释一下“你给方法起的名字和变量一样没用。”我是新来的,所以我很难遵循语言的惯例…@Marcos你有一个
列表平均值
和一个平均值()方法
@Marcos:Hmm。。。我想我之前已经对此做出了回应,但很明显,这条评论已经丢失了。如果可能的话,我会尽量避免使用缩写,如果你能帮忙的话,方法和变量也不要使用相同的名称。所以我有一个getAverageRatings
方法,它可能会在内部使用averages
变量。好的,再次感谢。我只记得教授告诉我们,方法通常应该以动作或类似的名称命名。是的!多么简单的一个错误…我现在已经开始工作了。非常感谢。你能详细解释一下“你给方法起的名字和变量一样没用。”我是新来的,所以我很难遵循语言的惯例…@Marcos你有一个列表平均值
和一个平均值()方法
@Marcos:Hmm。。。我想我之前已经对此做出了回应,但很明显,这条评论已经丢失了。如果可能的话,我会尽量避免使用缩写,如果你能帮忙的话,方法和变量也不要使用相同的名称。所以我有一个getAverageRatings
方法,它可能会在内部使用averages
变量。好的,再次感谢。我只记得教授告诉我们方法通常应该采用动作的名称或类似的名称。是的,我没有用任何东西填充它,当我应该使它等于aveRatings()方法中的数组列表时。简直忘了。谢谢。是的,当我应该使它等于aveRatings()方法中的数组列表时,我没有用任何东西填充它。简直忘了。谢谢