比较Array中的对象以进行排序

时间:2014-03-05 15:37:49

标签: java

我一直试图将Array中的对象与其属性进行比较,以便我可以按照降序对Array中的对象进行排序。以下是示例代码:数组为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;
            }
        }

其中(投票)封装在另一个类中:

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

4 个答案:

答案 0 :(得分:1)

数组有预制的排序方法。 Javadoc for Arrays.sort(Object[] a)提到了“自然顺序”。 Comparable接口用于提供自然顺序。

第1步

将界面应用于您的班级。

  • public class Candidate implements Comparable<Candidate> {

第2步

在班级中实施compareTo(Candidate c) {}方法。

阅读Javadoc for compareTo()合同。通常,如果this.property分别大于,等于或小于c.property,则必须返回正数,零或负数。 property是您要比较的字段。

  • 提示:如果property是一个字符串,您只需重复使用字符串compareTo()
    • return this.property.compareto(c.property);
  • 提示:如果property是一个整数(如投票),您可以通过获取差异巧妙地创建正数,零数或负数。
    • return this.votes - c.votes;

第3步

对数组进行排序。

既然您的对象具有可比性,如果您有一个集合,或者Collections.sort(list)您有一个对象数组,请调用Arrays.sort(list)

答案 1 :(得分:0)

我建议您使用ArrayList存储要排序的元素,然后您将有2个选项:使您的项目可比(界面)或创建比较器(界面):

public class Candidate implements Comparable<Candidate> {
    ...

public int compareTo(Candidate c) {
    ... //compare here the attributes of this and c
}

}

答案 2 :(得分:0)

快速提问,简答:java.util.Arrays.sort()

答案 3 :(得分:0)

  1. 为什么你的变量从大写字母开始?它应该像所有变量一样小。
  2. 您应该使用集合来存储自定义数据类型,然后您可以使用Collections.sort(List<T> list, Comparator<? super T> c)轻松对其进行排序,并根据需要定义您自己的Comparator