一直在寻找答案,但似乎我的问题比其他问题更具体。
所以我有两个类和一个接口。该接口称为“可比较”,我知道该接口确实有其自己的方法,但是我们很快就会知道。
我所拥有的是称为“ cityMain”,“ City2”和“可比较”接口的类
我的程序当前正在执行的操作是从txt文件中读取内容,例如:
75242;乌普萨拉 90325;于默奥 96133;博登 23642;霍尔维肯 35243;韦克舍 51000;延雪平 72211;韦斯特罗斯 等等
分号消失,整数和字符串分成两部分。 数字是邮政编码,旁边的东西仅仅是瑞典一些州的名称。从“ mainCity”中读取它之后,我实际上是对其进行排序,以便其名称的顶部拉链位于顶部,从最小到最大。
然后,当要读取它时,它将转到“ City2”类,并从那里开始使用每种方法,一次压缩和一种状态。
但是:Atm我实际上是从主设备而不是从界面调用所有东西。
它应该像这样“ mainCity”->“ Comparable”->“ City2”。 该程序按原样工作,但我希望它是正确的!
我试图从“可比较”中删除,然后这样称呼它,但是它没有用,也没有给我一个错误。 再次注意:Comparable确实有其自己的方法,但是由于我现在不知道如何应用它,因此我没有使用它。
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Collections;
public class cityMain {
private static BufferedReader r;
public static void main(String[] args) {
int Z = 0;
String C = null;
try {
ArrayList<City2> City = new ArrayList<City2>();
FileReader file = new FileReader("C:\\Users\\me\\Desktop\\BB.dat");
r = new BufferedReader(file);
String currLine;
while ((currLine = r.readLine()) != null) {
if (currLine.trim().length() > 0) {
String[] split = currLine.split(";");
Z = (Integer.parseInt(split[0]));
C = (split[1]);
City.add(new City2(Z, C));
}
}
Collections.sort(City, (c1, c2) -> c1.getZipCode() - c2.getZipCode());
for (int i = 0; i < City.size(); i++) {
System.out.println(City.get(i).getZipCode() + " " + City.get(i).getCityName());
}
} catch (IOException e) {
System.out.println("Erorr : " + e);
}
}
}
HERE IS A DIFFERENT CLASS:
public class City2 implements Comparable {
private int zipCode;
private String cityName;
public City2(int zipCode, String cityName) {
this.zipCode = zipCode;
this.cityName = cityName;
}
public int getZipCode() {
return zipCode;
}
public String getCityName() {
return cityName;
}
public void addAndPrint() {
}
}
HERE IS THE INTERFACE:
public interface Comparable {
public int getZipCode();
public String getCityName();
public void addAndPrint();
}
我应该得到的东西,我已经得到了,但没有达到我应该做的方式!
23642霍尔维肯 35243韦克舍 51000延雪平 72211韦斯特罗斯 75242乌普萨拉 90325于默奥 96133博登
任何事情现在都将不胜感激!
答案 0 :(得分:1)
如果计划使用Java标准库排序,则需要使用标准接口。您需要集合元素来实现java.lang.Comparable
或单独的java.lang.Comparator
对象。
最好删除或重命名自己的Comparator
版本,因为java.lang
类是自动导入的,所以在查看代码时不清楚会使用哪个版本。
您已经创建了java.lang.Comparator
以下为(c1, c2)
的lambda:
Collections.sort(City, (c1, c2) -> c1.getZipCode() - c2.getZipCode());
尽管您也可以这样写:
Collections.sort(City, Comparator.comparingInt(City2::getZipCode));
或使用List.sort
:
City.sort(Comparator.comparingInt(City2::getZipCode));
答案 1 :(得分:1)
如果您明确要求使用Comparable
界面,则将City2
类更改为:
public class City2 implements Comparable<City2> {
private int zipCode;
private String cityName;
public City2(int zipCode, String cityName) {
this.zipCode = zipCode;
this.cityName = cityName;
}
public int getZipCode() {
return zipCode;
}
public String getCityName() {
return cityName;
}
public void addAndPrint() {
}
@Override
public int compareTo(City2 city) {
return this.getZipCode() - city.getZipCode();
}
}
注意:
Comparable<City2>
而不是原始的
输入Comparable
compareTo()
以根据需要比较邮政编码。Comparable
,而只是实现Java提供的一个。答案 2 :(得分:0)
好吧...
现在几乎完成了100%!
但是我一次又一次得到相同的答案...
想法? 就像打印重复一样,但最后一行实际上是正确的。...
主类: 公共类cityMain
private static BufferedReader r;
public static ArrayList<City2> City = new ArrayList<City2>();
public static void main(String[] args) {
int Z = 0;
String C = null;
try {
FileReader file = new FileReader("C:\\Users\\karwa\\Desktop\\BB.dat");
r = new BufferedReader(file);
String currLine;
while ((currLine = r.readLine()) != null) {
City.sort(Comparator.comparing(City2::getZipCode));
if (currLine.trim().length() > 0) {
String[] split = currLine.split(";");
Z = (Integer.parseInt(split[0]));
C = (split[1]);
City2 d = new City2(Z, C);
City.add(d);
d.print();
}
}
} catch (IOException e) {
System.out.println("Erorr : " + e);
}
}
第二堂课
class City2 implements Comparable<City2> {
private int zipCode;
private String cityName;
public City2(int zipCode, String cityName) {
this.zipCode = zipCode;
this.cityName = cityName;
}
public int getZipCode() {
return zipCode;
}
public String getCityName() {
return cityName;
}
@Override
public int compareTo(City2 city) {
return this.getZipCode() - city.getZipCode();
}
public void print() {
for (int i = 0; i < cityMain.City.size(); i++) {
System.out.println(cityMain.City.get(i).getZipCode() + " " + cityMain.City.get(i).getCityName());
}
}
}