存储和排序混合数据类型

时间:2015-04-08 03:48:53

标签: java arrays

我正在阅读一个包含运动员距离的文本文件,每个距离都在一条新线上。每个运动员有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'(距离为零)

3 个答案:

答案 0 :(得分:0)

  

我的问题是,是否有更好的方法来存储这些值,以及对它们进行排序的最佳方法。

这是OOP(面向对象编程)可以帮助澄清有效数据和行为类型的典型案例。

有一个基类,例如Entry,其中包含派生类,例如NonAttemptPerformance。仅将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;
    }
}