2015-10-19 142 views
0
import java.util.Scanner; 
import java.util.ArrayList; 
import java.io.File; 

class Ordliste { 

    ArrayList<String> list = new ArrayList<String>(); 

    public void lesBok(String filnavn) throws Exception { 
    File fil = new File(filnavn); 
    Scanner s = new Scanner(fil); 

    while(s.hasNextLine()){ 
     leggTilOrd(s.nextLine()); 
    } 
    } 

    private void leggTilOrd(String ord){ 

    Ord w = new Ord(ord); 
     if (list.contains(w)) { 
      w.oekAntall(); 
     } 
     else { 
      list.add(w); 
     } 
    } 

    } 

    class Ord { 

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

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

     public String toString(){ 
     return tekst; 
     } 

    public int hentAntall(){ 
    return verdi; 
    } 

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

我基本上试图做的是从txt.file中读取单词。该代码应该只保存每个单词一次,并且每次重复时添加“verdi”1。将字对象添加到ArrayList中

我做错了什么? “ordliste”和“ord”是两个不同的java文件。我希望你明白我一直在努力做什么,即使是在挪威。

+0

你是怎么开始执行?你的main()中有什么? – ergonaut

+0

public class test public static void main(String [] args)throws Exception { Ordliste liste = new Ordliste(); liste.lesBok(“scarlet.text”); } } –

+0

无法编译我现在有的代码。 –

回答

1

方法leggTilOrd中的代码“list.contains(w)”不合适;

你不是在重复单词,而是重复Ord对象。

所以,如果你想重复一句话充电,你的对象奥德应该覆盖equals方法:

class Ord{ 

@Override 
public boolean equals(Object obj) { 
    Ord o = (Ord)obj; 
    return tekst.equals(o.tekst); 
} 

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

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

public String toString() { 
    return tekst; 
} 

public int hentAntall() { 
    return verdi; 
} 

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

在leggTilOrd方法中可以这样做吗?因为我不是真的应该改变Ord类。 –

+0

对不起,我只是没有看清代码,你的'list'被声明为'ArrayList '而不是'ArrayList '。所以如果你只是想在'list'中保存不重复的单词:在leggTilOrd方法中使用'list.contains(ord)'而不是'list.contains(w)'是可以的。但我很困惑,你如何处理Ord对象? –