将整数添加到arraylist"得分"

时间:2017-04-26 15:50:42

标签: java

我有一个大约5000个名字的文本文件,每个名称都用行分隔。

我已经完成了将所有名称添加到ArrayList"名称",但是 我无法在我的arrayList分数中添加任何内容。

我不知道我哪里出错了,特别是在addScores方法中,根本没有输出任何东西。

如果需要更多信息,请询问。

感谢您的帮助..

import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Collections;

public class ScoringNames {
    BufferedReader x = null;
    String location = "xxxxx\\names.txt";

    ArrayList<String> names = new ArrayList<String>();
    ArrayList<Integer> scores = new ArrayList<Integer>();

    public void readFile(){ //Opens file, and prints every line.
        try{
            x = new BufferedReader(new FileReader(location));
        } catch(FileNotFoundException e) {
            e.printStackTrace();
        }

        try{
            String name = x.readLine();
            while(name != null){
                //System.out.println(name);
                names.add(name);
                name = x.readLine();
            }
        } catch(IOException e) {
            e.printStackTrace();
        }
    }


    public int nameScore(String name){
        this.readFile();  //Open file and read, so that values are added to <names>
        this.sortNames();
        int score = 0;
        char[] tempName = name.toCharArray();
        for (char i : tempName){
                score += alphValue(i);
            }

        return score;
    }

    public void addScores(){
        for(String x : names){
            scores.add(nameScore(x));
        }
    }

    public void printScores(){
        for(int counter: scores)
            System.out.println(counter);
    }

    public static void main(String[] args) {
        ScoringNames abc = new ScoringNames();
        abc.readFile();

        abc.addScores();
        abc.printScores();




    }

}

我得到的错误是:

Exception in thread "main" java.util.ConcurrentModificationException
    at java.util.ArrayList$Itr.checkForComodification(ArrayList.java:901)
    at java.util.ArrayList$Itr.next(ArrayList.java:851)
    at ScoringNames.addScores(ScoringNames.java:148)
    at ScoringNames.main(ScoringNames.java:163)

2 个答案:

答案 0 :(得分:3)

您正在修改List names,同时通过For方法的addScores()循环访问它。

当您调用nameScore(String str)方法时,您不需要再次读取该文件,因为所有数据都已被读取并存储在names列表中。您只需要评估String并返回分数。

public int nameScore(String name){
    int score = 0;
    char[] tempName = name.toCharArray();
    for (char i : tempName){
            score += alphValue(i);
        }

    return score;
}

答案 1 :(得分:2)

更改方法nameScore - 删除两个顶行。

    this.readFile(); // Open file and read, so that values are added to
                        // <names>
    this.sortNames();

没有必要,readFile()是错误的原因 出错的原因是您尝试更改每个循环(this.names)中的for (String x : names)值,这在Java中是禁止的。

public int nameScore(String name) {
    int score = 0;
    char[] tempName = name.toCharArray();
    for (char i : tempName) {
        score += alphValue(i);
    }

    return score;
}