将单词对象添加到ArrayList

时间:2015-10-19 00:58:19

标签: java arrays arraylist

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。

我做错了什么? “ordliste”和“ord”是两个不同的java文件。我希望你能理解我一直想做的事情,即使是挪威语。

1 个答案:

答案 0 :(得分:1)

代码&#34; list.contains(w)&#34;方法leggTilOrd不合适;

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

所以如果你想对重复单词收费,你的对象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++;
}
}