2017-08-26 47 views
0

我有兩行文件,如下所示:ProductName(String); ProductCode(String); SellData(Int)。 有兩個文件中出現了一些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/setters檢索/設置它們。

這看起來更加整潔精確到OO設計:

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