2015-10-19 134 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對象? –