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();
        }
    };
}