Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 存储和排序混合数据类型_Java_Arrays - Fatal编程技术网

Java 存储和排序混合数据类型

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”分配

我正在阅读一个包含运动员距离的文本文件,每个距离都在一条新行上。每个运动员有6次尝试,每次尝试记录一段距离。尚未进行的尝试必须用字符串“U”表示,距离0将存储为字符串“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;
    }
}