2015-10-19 59 views
0

我有一个文本文件格式化是这样的:尽量不相同的值存储在一个ArrayList

David 
David 
David 
Vo 
Vo 

,这里是类OrdOrdliste(意思是“字”和“词表”),这是两个分开的文件。

字:(Verdi的意思是 “价值”,hentAntall的意思是 “获得价值”,并oekAntall表示 “加薪值”)

class Ord { 

    private String tekst; 
    private int verdi = hentAntall(); 

    public Ord(String tekst) { 
    this.tekst = tekst; 
    this.verdi = verdi; 
    } 

    public String toString(){ 
    return tekst; 
    } 

    public int hentAntall() { 
    return verdi; 
    } 

    public void oekAntall() { 
    verdi++; 
    } 
} 

单词表:

import java.util.Scanner; 
import java.util.ArrayList; 
import java.io.File; 

class Ordliste { 

    private ArrayList<Ord> list = new ArrayList<>(); 

    public void readFile(String filnavn) throws Exception { 

    File fil = new File(filnavn); 
    Scanner s = new Scanner(fil); 
    Ord empty = new Ord(""); 
    list.add(empty); 

    while(s.hasNextLine()) { 
     String linjeTekst = s.nextLine(); 
     addOrd(linjeTekst); 
    } 

    System.out.println(list.get(1)); 
    System.out.println(list.get(1).hentAntall()); 
    System.out.println(list.get(2)); 
    //I use this part to check the arraylist 
    } 

    private void addOrd(String ord) { 
    for (int i = 0; i < list.size(); i++){ 
     if (list.get(i).toString().equalsIgnoreCase(ord)) { 
     list.get(i).oekAntall(); 
     } 
     else { 
     Ord nyOrd = new Ord(ord); 
     list.add(nyOrd); 
     } 
    } 
    } 

我认为有我的addWord方法有问题,因为存储在我的数组列表中的值是David David David Vo Vo,而不仅仅是我认为的David Vo。我也不应该添加任何东西到我的Ord类。

+0

的'''ArrayList'''门店重复。你想使用''''Set''的一些变体,它省略了重复。 – Siddhartha

+0

为什么不使用Set集合? – Klever

+0

但是,如果您看一下我的addWord方法,则只应将其值增加1,如果它是相同的单词,并且如果它是新单词,则将新单词添加到列表中。 @Siddhartha。 –

回答

0

试试这个:

private void addOrd(String ord){ 
    boolean found = false; 
    for (int i = 0; i < list.size(); i++){ 
     //You need to comapre te tekst field not the object 
     if (list.get(i).tekst.toString().equalsIgnoreCase(ord)) { 
     found = true; 
     break; 
     } 
    } 
if(!found){ 
    Ord nyOrd = new Ord(ord); 
    list.add(nyOrd); 
} 

}

+0

您需要搜索所有的数组列表,然后如果您没有找到相同的数值,则可以插入数组列表。在你的代码中,你只验证了列表中的第一个值...... – bugs2919

+0

谢谢你!这对我帮助很大。 –

+0

我真的很想知道为什么你在评论中添加了解释而不是答案本身? – Tom

0

执行你的代码一步一步,你应该明白。调试器是你的朋友。用它。

您首先在列表中添加一个空白词。

然后你读了第一个词:大卫。你循环列表中的每一个元素:

  • 是大卫等于“”?不,所以你把大卫添加到列表中
  • 大卫是否等于大卫?是的,所以你增加大卫的数量。

然后你读第二个词:大卫。你循环列表中的每一个元素:

  • 是大卫等于“”?不,所以你把大卫添加到列表中
  • 大卫是否等于大卫?是的,所以你增加大卫的数量。
  • 大卫是否等于大卫?是的,所以你增加大卫的数量。

等等,等等

而应该测试,如果列表包含大卫。如果没有,则添加它。否则,增加它的计数。

最简单(也是更快)的方法是使用Map<String, Ord>而不是列表。

+0

谢谢,我也可以做到这一点。但我应该使用arraylist –

相关问题