Java排序文本文件,具有可比性
我需要一个程序,读取数据和排序的文件降序使用快速排序的基础上提供的索引,例如,这是数据使用可比的Java排序文本文件,具有可比性,java,file,sorting,Java,File,Sorting,我需要一个程序,读取数据和排序的文件降序使用快速排序的基础上提供的索引,例如,这是数据使用可比的 adviser,32/60,125,256,6000,256,16,128,198,199 amdahl,470v/7,29,8000,32000,32,8,32,269,253 amdahl,470v/7a,29,8000,32000,32,8,32,220,253 amdahl,470v/7b,29,8000,32000,32,8,32,172,253 amdahl,470v/7c,29,800
adviser,32/60,125,256,6000,256,16,128,198,199
amdahl,470v/7,29,8000,32000,32,8,32,269,253
amdahl,470v/7a,29,8000,32000,32,8,32,220,253
amdahl,470v/7b,29,8000,32000,32,8,32,172,253
amdahl,470v/7c,29,8000,16000,32,8,16,132,132
我需要按第5个indexmax case 2、第6个cache case 3和第9个indexxphp case 4降序排序&打印第一个索引,它已经在case 1中排序
我的代码存在以下问题:
它不会根据索引进行排序
它在运行时给了我一个错误代码:Arrays.sortc;
请帮忙提建议
谢谢
比较级:
import java.util.Comparator;
class Computer implements Comparable<Computer> {
private String vendor;
private int mmax;
private int cach;
private int php;
public Computer(int value) {
this.mmax = value;
}
public String getVendor() {
return vendor;
}
public void setVendor(String vendor) {
this.vendor = vendor;
}
public int getMmax() {
return mmax;
}
public void setMmax(int mmax) {
this.mmax = mmax;
}
public int getCach() {
return cach;
}
public void setCach(int cach) {
this.cach = cach;
}
public int getPhp() {
return php;
}
public void setPhp(int php){
this.php = php;
}
@Override
public int compareTo(Computer m) {
if (mmax < m.mmax) {
return -1;
}
if (mmax > m.mmax) {
return 1;
}
// only sort by height if age is equal
if (cach > m.cach) {
return -1;
}
if (cach < m.cach) {
return 1;
}
if (php > m.php) {
return -1;
}
if (php < m.php) {
return 1;
}
return 0;
}
public static Comparator<Computer> ComparemMax = new Comparator<Computer>() {
@Override
public int compare(Computer p1, Computer p2) {
return p2.getMmax() - p1.getMmax();
}
};
}
最大的问题是,计算机类没有为每一行读取的数据实例化
由于您希望根据用户输入拥有不同的排序选项,因此不能让计算机类确定比较方法,而是需要为每个排序选项创建单独的比较器实现。接下来,将文件读取操作设为泛型操作,并将其抽象为来自每个选定案例的单独方法调用。我会把它做成一个列表或集合,而不是一个计算机阵列,因为你不想预先知道长度 我想详细地列出这些步骤,这样您就可以自己找出每个步骤。你说得很对。。但也存在差距 创建一个计算机类。它应该有一个构造函数,它接受单个字符串,并使用分隔符“,”将其拆分,并根据需要将每个部分解析为String/int。您最好解析并存储整个字符串。。这意味着您的类中可以有10个字段 创建一个空白的ArrayList来存储计算机对象。 迭代文件和读线 使用表示while循环中文件中每一行的字符串调用计算机构造函数 将新的计算机对象添加到computers ArrayList 写5个不同的比较器。 根据用户输入,实例化正确的比较器并将其传递给sort方法 打印已排序的数组
如果您仍然面临问题,请提及您希望更清晰的特定点。它是否打印空10次?否它打印一个包含10个索引但有几行的数组worthList c=new ArrayList;我试着这样做,然后用这句话给它打电话,但它没有打印出任何集合;whileinput.hasNextLine{forString s:c System.out.printlns;}正是因为代码中没有新的计算机,数组/列表中也没有添加任何内容;filename=new Filemachine.txt;尝试{input=new Scannerfilename;}捕获文件NotFoundException e{e.printStackTrace;}计算机e1=new Computerinput;c、 增编1;whileinput.hastLine{forComputer:c System.out.printlncomputer.getMmax;}
import java.util.Comparator;
class Computer implements Comparable<Computer> {
private String vendor;
private int mmax;
private int cach;
private int php;
public Computer(int value) {
this.mmax = value;
}
public String getVendor() {
return vendor;
}
public void setVendor(String vendor) {
this.vendor = vendor;
}
public int getMmax() {
return mmax;
}
public void setMmax(int mmax) {
this.mmax = mmax;
}
public int getCach() {
return cach;
}
public void setCach(int cach) {
this.cach = cach;
}
public int getPhp() {
return php;
}
public void setPhp(int php){
this.php = php;
}
@Override
public int compareTo(Computer m) {
if (mmax < m.mmax) {
return -1;
}
if (mmax > m.mmax) {
return 1;
}
// only sort by height if age is equal
if (cach > m.cach) {
return -1;
}
if (cach < m.cach) {
return 1;
}
if (php > m.php) {
return -1;
}
if (php < m.php) {
return 1;
}
return 0;
}
public static Comparator<Computer> ComparemMax = new Comparator<Computer>() {
@Override
public int compare(Computer p1, Computer p2) {
return p2.getMmax() - p1.getMmax();
}
};
}