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