2017-08-26 4 views
0

J'ai deux fichiers avec des lignes comme ceci: ProductName (String); ProductCode (String); SellData (Int). Certains ProductCode apparaissent dans les deux fichiers. Je dois me débarrasser des doublons et trier les éléments par ProductCode. Enfin, la sortie devrait être les noms triés par les codes. Je veux utiliser CompareTo() et TreeSet() pour résoudre ce problème, mais quelque chose ne va pas avec mon programme. Ici, il est:Comment utiliser CompareTo() et 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); 
    } 
} 

Répondre

0

Votre méthode compareTo ne va pas, changer ci-après:

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

également s'il vous plaît suivre OOPS conception générale dans votre code. Donnez une portée privée à vos variables membres et récupérez/définissez-les en utilisant les getters/setters.

Cela ressemble plus soigné et précis pour la conception 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; 
}