在循环期间将变量正确存储在ArrayList中

时间:2015-07-13 21:23:06

标签: java loops arraylist store

我在arrayList中存储变量时遇到了一些问题。该程序的建议是从一个文件(A)读取,读取另一个文本文件(B),然后比较B中A的有效百分比覆盖率。为此,我将每个出现的单词存储在 NEUS 即可。这就是问题所在。如果我尝试获取输出,它似乎将值随机存储在里面!所以例如我输出如下:

elektrotechnik und
die bedeutendste
die bedeutendste
und simulation
erleben die
eine form
eine form

所以有一些单词(正确地说Ngramms,因为我总是存储两个单词),这只有一次在 neuS 内,但其他只有一次。我也看到过三次相同的输出。我希望所有单词仅在neuS中存储一次。我做错了什么?代码不完整,有些代码我认为与此问题无关。

谢谢!

BufferedReader in = new BufferedReader(new FileReader("informatik_test.txt"));
String str;

// 
while ((sCurrentLine = in.readLine()) != null) {
    // System.out.println(sCurrentLine);
    arr = sCurrentLine.split(" ");
    for (int i = 0; i < arr.length - 1; i = i + 2) {
        String s = (arr[i].toString() + " " + arr[i + 1].toString())
                .toLowerCase();
        if (null == (hash.get(s))) {
            hash.put(s, 1);
        } else {
            int x = hash.get(s) + 1;
            hash.put(s, x);
        }
    }
    //

    ArrayList< String> words = new ArrayList< String>();
    ArrayList< String> neuS = new ArrayList< String>();
    ArrayList< Long> neuZ = new ArrayList< Long>();

    // Read all Lines from a file
    for (String line = br.readLine(); line != null; line = br.readLine()) {
        String h[] = line.split("   ");

        words.add(h[0].toLowerCase());

    }
    //
    for (String x : hash.keySet()) {
        summe = summe + hash.get(x);
        long neu = hash.get(x);
        for (String s : words) {

            if (x.equals(s)) {
                neuS.add(x);
                neuZ.add(neu);
                disc = disc + 1;
            }

        }
    }
    // Testing which word for output -->! THE PROBLEM!!
    for (String m : neuS) {
        System.out.println(m);
    }

}

3 个答案:

答案 0 :(得分:1)

如果你想让neuS中的单词只存储一次,那么neuS应该是一个HashSet。实际上,因为wordsneuS都是数组,如果单词包含重复项,neuS也会包含重复项。

旁注:对于String h[] = line.split(" ");,分割中有2个空格。这是故意的吗?

答案 1 :(得分:1)

您可以将neuS变为HashSet。它会修复你的输出。

答案 2 :(得分:1)

for (String s : words) { 
    if (x.equals(s)) {
        neuS.add(x);
        neuZ.add(neu);
        disc = disc + 1;
    }
}

您应该在break;之后添加disc = disc + 1;,然后在添加之前检查x是否在neuS中。