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()方法中的数组列表时,我没有用任何东西填充它。简直忘了。谢谢