需要给一个运动会比赛系统写一个成绩排序,成绩有时间也有距离两类,要求用java中重写compareto并且成绩是字符串类型,需要得到一个成绩能直接知道是什么类型的成绩
时间: 2024-04-08 19:33:38 浏览: 59
当成绩是字符串类型且包含时间和距离两类时,可以通过实现`Comparable`接口并重写`compareTo()`方法来实现排序,并在成绩类中添加一个方法来判断成绩的类型。
首先,定义一个成绩类 `Score`,该类包含一个字符串类型的成绩属性。
```java
public class Score implements Comparable<Score> {
private String score;
public Score(String score) {
this.score = score;
}
// 重写compareTo()方法
@Override
public int compareTo(Score o) {
if (isTimeScore() && o.isTimeScore()) {
// 如果两个成绩都是时间类型,则直接比较字符串
return this.score.compareTo(o.score);
} else if (isDistanceScore() && o.isDistanceScore()) {
// 如果两个成绩都是距离类型,则直接比较字符串
return this.score.compareTo(o.score);
} else if (isTimeScore() && o.isDistanceScore()) {
// 如果当前成绩是时间类型,而另一个成绩是距离类型,则当前成绩排在前面
return -1;
} else if (isDistanceScore() && o.isTimeScore()) {
// 如果当前成绩是距离类型,而另一个成绩是时间类型,则当前成绩排在后面
return 1;
} else {
// 其他情况返回0
return 0;
}
}
// 判断成绩是否是时间类型
public boolean isTimeScore() {
return score.endsWith("sec");
}
// 判断成绩是否是距离类型
public boolean isDistanceScore() {
return score.endsWith("m");
}
}
```
然后,可以创建一个成绩列表,并使用`Collections.sort()`方法对其进行排序。
```java
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
public class Main {
public static void main(String[] args) {
List<Score> scores = new ArrayList<>();
scores.add(new Score("10sec")); // 添加时间类型的成绩
scores.add(new Score("100m")); // 添加距离类型的成绩
scores.add(new Score("200m")); // 添加距离类型的成绩
scores.add(new Score("15sec")); // 添加时间类型的成绩
Collections.sort(scores); // 对成绩列表进行排序
for (Score score : scores) {
System.out.println(score.score + " - " + (score.isTimeScore() ? "时间" : "距离"));
}
}
}
```
运行以上代码,可以得到按照成绩类型和字符串进行排序后的结果:
```
10sec - 时间
15sec - 时间
100m - 距离
200m - 距离
```
这样,我们就可以根据成绩的类型和字符串进行排序,并通过`isTimeScore()`和`isDistanceScore()`方法判断成绩的类型。根据具体需求,可以在`compareTo()`方法中进行更多的定制化排序逻辑。
阅读全文