Java 存储和排序混合数据类型
我正在阅读一个包含运动员距离的文本文件,每个距离都在一条新行上。每个运动员有6次尝试,每次尝试记录一段距离。尚未进行的尝试必须用字符串“U”表示,距离0将存储为字符串“X”。 我当前正在初始化一个数组,如下所示:Java 存储和排序混合数据类型,java,arrays,Java,Arrays,我正在阅读一个包含运动员距离的文本文件,每个距离都在一条新行上。每个运动员有6次尝试,每次尝试记录一段距离。尚未进行的尝试必须用字符串“U”表示,距离0将存储为字符串“X”。 我当前正在初始化一个数组,如下所示: Object[] distances = new Object[String 'U', String 'U', String 'U', String 'U', String 'U', String 'U',]; 然后我遍历数组,并将float类型的距离分配给数组,或将字符串“X”分配
Object[] distances = new Object[String 'U', String 'U', String 'U', String 'U', String 'U', String 'U',];
然后我遍历数组,并将float类型的距离分配给数组,或将字符串“X”分配给数组。
我的问题是,是否有更好的方法来存储这些值,以及什么是对它们进行排序的最佳方法。先按降序排列数字,然后依次为“U”和“X”(距离为零)
我的问题是,是否有更好的方法来存储这些值,以及什么是对它们进行排序的最佳方法
这是一个典型的案例,OOP(面向对象编程)可以帮助澄清有效数据和行为的类型
有一个名为的基类,例如带有派生类的
Entry
,例如NonAttempt
和Performance
。将浮动距离
字段仅放在性能
类中。创建一个单例比较器
对象并使用它进行排序,例如,一个数组列表
使用双数组代替
实际值、非尝试(0.0)和距离为0(-1.0)
用于降序排序:首先是数字,然后是非尝试(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
。下面是一个示例代码,以满足您的需求
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;
}
}
公共类LineData实现了可比较的{
私有尝试[]次尝试=新尝试[6];
公共浮点数getDistance(){
for(尝试:尝试){
if(尝试.getInfo().equals(“U”)){
继续;
}
if(尝试.getInfo().equals(“X”)){
返回0f;
}
返回Float.parseFloat(trust.getInfo());
}
返回-1f;
}
@凌驾
公共整数比较(LineData o){
if(this.getDistance()>o.getDistance())
返回1;
如果(this.getDistance(),谢谢,我本来是这样做的,但是现在需要生成输出,其中非尝试显示为U,犯规(0)显示为X。也许我可以这样做,在调用display时更改它,即如果(d[i]==0){system.out.println('U');}是的,通过这种方式,您可以使用适当的值维护数据结构,并显示所需的内容。此外,还可以保持排序逻辑的简单性。
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;
}
}