java - 比较数组内的对象以进行排序

标签 java

我一直在尝试将数组中的对象的属性进行一比较,以便可以将数组中的对象按降序排序。以下是示例代码:数组为 Candidate[][]

    System.out.println("How many positions for this election? > ");
    numberOfPositions = sc.nextInt();
    Candidate Candidate[][] = new Candidate[numberOfPositions][];
    PoliticalParty Parties[][] = new PoliticalParty[numberOfPositions][];
    for(int i=0;i<numberOfPositions;i++){
        String name;
        String politicalParty;
        System.out.println("Enter position name > ");
        position = sc.next();
        System.out.println("How many seats? > ");
        numberOfSeats = sc.nextInt();
        System.out.println("How many candidates? > ");
        numberOfCandidates = sc.nextInt();
        Candidate[i] = new Candidate[numberOfCandidates+1];
        Candidate[i].sort(votes); //<--------------------------This is what im trying//

其中 (votes) 是使用以下代码从文本文件派生的 int:

System.out.println("Enter file name > ");
    filename = sc.next();
    try {
        filescan = new Scanner(new File(filename));
    } catch (FileNotFoundException ex) {
        //Logger.getLogger(Election.class.getName()).log(Level.SEVERE, null, ex);
    }
    String L = System.lineSeparator();
    filescan.useDelimiter(L);
    while (filescan.hasNext()) {
        numberOfVoters++;
        line = filescan.next();
        for(int x=0,j=0;j<line.length();j++){
            switch(line.charAt(j)){
                case ',':
                    x++;
                    break;
                case ' ':
                    break;
                default:
                    int y = line.charAt(j)-48;
                    //Integer.parseInt(line.charAt(j).toString());
                    Candidate[x][y].addVote();
                    break;
            }
        }

其中(vote)被封装在另一个Class中:

public class Candidate{
int votes = 0;
String politicalParty;

public Candidate(String name, String politicalParty) {
    super(name);
    this.politicalParty = politicalParty;
}

public void addVote() {
    this.votes++;
    //return votes;
}

public int getVotes() {
    return votes;
}

@Override
public String getName() {
    return getName();
}

public void displayFields(){
    System.out.println(this.getName() + " (" + getPoliticalParty() + ") - " + votes);
}

public String getPoliticalParty() {
    return politicalParty;
}

public void setPoliticalParty(String politicalParty) {
    this.politicalParty = politicalParty;
}
}

最佳答案

数组有一个预制的排序方法。 Javadoc for Arrays.sort(Object[] a)提到“自然排序”。 Comparable 接口(interface)的存在是为了提供自然顺序。

第 1 步

将接口(interface)应用到您的类中。

  • public class Candidate implements Comparable<Candidate> {

第 2 步

实现compareTo(Candidate c) {}你的类中的方法。

阅读Javadoc for compareTo()契约(Contract)。一般来说,如果this.property,它必须返回正数、零或负数。大于、等于或小于c.property , 分别。 property是您要比较的领域。

  • 提示:如果property是一个 String,你可以简单地重用 String 的 compareTo()
    • return this.property.compareto(c.property);
  • 提示:如果property是一个整数(如票数),你可以通过求差巧妙地创建正数、零数或负数。
    • return this.votes - c.votes;

第3步

对数组进行排序。

现在您的对象具有可比性,请调用 Collections.sort(list)如果您有 Collection 或 Arrays.sort(list)你有一个对象数组。

关于java - 比较数组内的对象以进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22202224/

相关文章:

java - Eclipse JAR 创建与 cmd 行 JAR 创建

java - java随机字符

java - 我正在尝试用java制作一个半高效的哈希表,但最终陷入了无限循环

java - 如何在JavaFX中按元素运行循环

java - 如何覆盖 Log4J 行号

Java - 创建一个空目录

java - 如何将java文件编译为使用其他.class的.class。 (如果它是可能的)

java - 如何将数据从一个 JTextField 传递到另一个 JTextField

java - 对 Xodus 的非独占读取权限

java - 管理 Spring MVC 中的映射