2017-08-26 2 views
0

次のような行を持つファイルが2つあります。ProductName(String); ProductCode(String); SellData(Int) 2つのファイルに表示されるProductCodeがいくつかあります。私は重複を取り除き、ProductCodeで項目をソートする必要があります。最後に、出力はコードでソートされた名前でなければなりません。私はこの問題を解決するためにCompareTo()とTreeSet()を使用したいが、私のプログラムに何か問題がある。ここでは、次のとおりです。CompareTo()とTreeSet()の使用方法

class Gyumi implements Comparable<Gyumi> { 
    String termek = ""; 
    String termekkod = ""; 
    int[] evek = new int[3]; 

    @Override 
    public String toString() { 
     return termek + ", " + termekkod + ", " + Arrays.toString(evek); 
    } 

    @Override 
    public int compareTo(Gyumi t) { 
     if(termekkod >((Gyumi)t.termekkod){ 
      return 1; 
     } 
     if(termekkod <((Gyumi)t.termekkod){ 
     return -1; 
     } 
     return 0; 
    } 
} 
} 

public class Gyumolcs { 

static ArrayList<Gyumi> lista = new ArrayList<Gyumi>(); 
static ArrayList<Gyumi> lista2 = new ArrayList<Gyumi>(); 
static TreeSet<Gyumi> halmaz = new TreeSet<Gyumi>(); 

public static void Feltolt() { 
    File r = new File("termekkod_uzlet2.csv"); 
    File f = new File("termekkod_uzlet1.csv"); 
    try { 
     Scanner scan = new Scanner(f, "iso-8859-2"); 
     while (scan.hasNextLine()) { 
      String sor = scan.nextLine(); 
      String[] tomb = sor.split(";"); 
      Gyumi gy = new Gyumi(); 
      gy.termek = tomb[0]; 
      gy.termekkod = tomb[1]; 
      gy.evek[0] = Integer.parseInt(tomb[2]); 
      gy.evek[1] = Integer.parseInt(tomb[3]); 
      gy.evek[2] = Integer.parseInt(tomb[4]); 
      lista.add(gy); 
      halmaz.add(gy); 
     } 
    } catch (Exception e) { 
     System.out.println("Hiba " + e.getMessage()); 
    } 
    try { 
     Scanner scan2 = new Scanner(r, "iso-8859-2"); 
     while (scan2.hasNextLine()) { 
      String sor = scan2.nextLine(); 
      String[] tomb = sor.split(";"); 
      Gyumi gy = new Gyumi(); 
      gy.termek = tomb[0]; 
      gy.termekkod = tomb[1]; 
      gy.evek[0] = Integer.parseInt(tomb[2]); 
      gy.evek[1] = Integer.parseInt(tomb[3]); 
      gy.evek[2] = Integer.parseInt(tomb[4]); 
      lista2.add(gy); 
      halmaz.add(gy); 
     } 
    } catch (Exception e) { 
     System.out.println("valami" + e.getMessage()); 
    } 
} 

public static void main(String[] args) { 
    Feltolt(); 
    System.out.println(halmaz); 
    } 
} 

答えて

0

あなたのcompareTo方法は、以下のように変更し、間違っている:

@Override 
    public int compareTo(Gyumi t) { 
    if(termekkod.compareTo(t.termekkod)>0){ 
     return 1; 
    } 
    if(termekkod.compareTo(t.termekkod)<0){ 
     return -1; 
    } 
     return 0; 
    } 

また、あなたのコード内で一般的なOOPS設計に従ってください。メンバー変数のプライベートスコープを与え、getters/setterを使用してメンバー変数を取得/設定します。

これは、オブジェクト指向設計によりきちんとして正確になります。

@Override 
public int compareTo(Gyumi t) { 
    if(termekkod.compareTo(t.gettermekkod())>0){ 
     return 1; 
    } 
    if(termekkod.compareTo(t.gettermekkod())<0){ 
     return -1; 
    } 
     return 0; 
} 
関連する問題