我正在阅读一个包含运动员距离的文本文件,每个距离都在一条新线上。每个运动员有6次尝试,每次尝试记录距离。尚未进行的尝试必须用字符串'U'表示,距离0将存储为字符串'X'。 我目前正在按如下方式初始化数组:
Object[] distances = new Object[String 'U', String 'U', String 'U', String 'U', String 'U', String 'U',];
然后我遍历数组并将float类型的距离分配给数组,或者将String'X'分配给数组。 我的问题是,是否有更好的方法来存储这些值,以及对它们进行排序的最佳方法。数字首先按降序排列,然后是非尝试'U'然后'X'(距离为零)
答案 0 :(得分:0)
我的问题是,是否有更好的方法来存储这些值,以及对它们进行排序的最佳方法。
这是OOP(面向对象编程)可以帮助澄清有效数据和行为类型的典型案例。
有一个基类,例如Entry
,其中包含派生类,例如NonAttempt
和Performance
。仅将float distance
字段放在Performance
类中。创建单个Comparator<Entry>
对象并使用它来排序,例如ArrayList<Entry>
。
答案 1 :(得分:0)
如何使用Double数组代替 实际值,非尝试(0.0)和距离0(-1.0)
Double[] d = {6.5, 1.3, 4.7, 0.0, -1.0, 9.2 };
使用降序排序:数字首先,然后是非尝试(0.0),然后是0距离'X'
Double[] d = {6.5, 1.3, 4.7, 0.0, -1.0, 9.2 };
Arrays.sort(d, Collections.reverseOrder());
System.out.println(Arrays.toString(d));
结果
[9.2, 6.5, 4.7, 1.3, 0.0, -1.0]
您也可以使用Float
代替Double
。
答案 2 :(得分:0)
以下是您需求的示例代码。
public class LineData implements Comparable<LineData> {
private Attempt[] attempts = new Attempt[6];
public float getDistance() {
for (Attempt attempt : attempts) {
if (attempt.getInfo().equals("U")) {
continue;
}
if (attempt.getInfo().equals("X")) {
return 0f;
}
return Float.parseFloat(attempt.getInfo());
}
return -1f;
}
@Override
public int compareTo(LineData o) {
if( this.getDistance()>o.getDistance())
return 1;
if( this.getDistance()<o.getDistance())
return -1;
return 0;
}
}
public class Attempt {
String info;
public String getInfo() {
return info;
}
public void setInfo(String info) {
this.info = info;
}
}