我一直试图将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;
}
}
答案 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)
Collections.sort(List<T> list, Comparator<? super T> c)
轻松对其进行排序,并根据需要定义您自己的Comparator
。