如何使用 CompareTo() 和 TreeSet()
How to use CompareTo() and TreeSet()
我有两个包含如下行的文件:ProductName(String);ProductCode(String);SellData(Int)。
这两个文件中出现了一些 ProductCode。我需要删除重复项并按 ProductCode 对项目进行排序。最后,输出应该是按代码排序的名称。我想使用 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);
}
}
你的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.
retrieve/set 它们
这对于 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;
}
我有两个包含如下行的文件:ProductName(String);ProductCode(String);SellData(Int)。 这两个文件中出现了一些 ProductCode。我需要删除重复项并按 ProductCode 对项目进行排序。最后,输出应该是按代码排序的名称。我想使用 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);
}
}
你的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.
retrieve/set 它们这对于 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;
}