【问题标题】:Java find two median in a substringJava在子字符串中找到两个中位数
【发布时间】:2015-07-13 02:09:42
【问题描述】:

这里是java新手,我有一个小问题。

我最近收到了这个 txt 文件:

新墨西哥州阿尔伯克基,5352 英尺,202.3°
科罗拉多州丹佛市,5280 英尺,202.4°
明尼苏达州明尼阿波利斯,841 英尺,210.5°
阿拉巴马州伯明翰,644 英尺,210.8°
密歇根州底特律,639 英尺,210.8°
佛罗里达州迈阿密,11 英尺,211.9°
迪拜哈利法塔,2717 英尺,207.1°
加拿大国家电视塔,多伦多,1815 英尺,208.7°

并被要求查找并打印出两个中位数。问题是我在尝试使用Arrays.sort() 时不断出错。

public static void main(String[] args) {
    File mf = new File("C:\\file.txt");
    ArrayList<String> inData = new ArrayList<String>();
    String strline;

    try {
        FileInputStream fstream = new FileInputStream(mf);
        BufferedReader br = new BufferedReader(new InputStreamReader(fstream));
        while ((strline = br.readLine()) != null) {
            strline = strline.trim();
            if ((strline.length() != 0)) {
                inData.add(strline);
            }
        }
        br.close();
    } catch (Exception e) {
        System.err.println("Error CANNOT FIND FILE!");
    }

    //Calc median start
    double median;
    for (int i = 0; i < inData.size(); i++) {
        String[] word = inData.get(i).split(", ");
        double m = Double.parseDouble(word[3].substring(0, 5));
        Arrays.sort(m);
        if (m.length % 2 == 0) {
            double middleNumOne = m[m.length / 2 - 0.5]
            double middleNumTwo = m[m.length / 2 + 0.5]
            System.out.println("Median:" + middleNumOne + "and" + middleNumTwo);
        }
    }
}

这是我到目前为止所拥有的。有人可以帮助我,告诉我我错过了什么吗?

【问题讨论】:

  • 如何将 m 转换为数组?或者我应该如何处理 m 来整理出中位数?
  • 您必须在 for 循环之前创建一个数组,然后在每次传递时将 m 添加到数组中。

标签: java arrays median


【解决方案1】:
    List<Double> altitudes = new ArrayList<Double>();
    for (int i = 0; i < inData.size(); i++) {
        String[] word = inData.get(i).split(", ");
        double m = Double.parseDouble(word[3].substring(0, 5));
        altitudes.add(m);
    }
    Double[] array = altitudes.toArray(new Double[] {});
    Arrays.sort(array);
    for (Double double1 : array) {
        System.out.println(" " + double1);
    }
    if (array.length % 2 == 0) {

        double middleNumOne = array[(int) (array.length / 2 - 0.5)];
        double middleNumTwo = array[(int) (array.length / 2 + 0.5)];

        System.out.println("Median: " + middleNumOne + " and " + middleNumTwo);
    }

【讨论】:

    【解决方案2】:

    只是为了给你拼出来,这是你需要改变的:

    double[] median = new double[inData.size()];
    
    for (int i=0; i < inData.size(); i++) {
        String[] word = inData.get(i).split(", "); 
        double m = Double.parseDouble(word[3].substring (0,5));
        median[i] = m;
    }
    
    Arrays.sort(median);
    

    然后在代码中此点之后对m 的所有引用都应更改为median

    【讨论】:

    • @duhNooby 没问题 :) 顺便说一句,如果这个或任何答案解决了您的问题,请考虑通过单击复选标记接受它。这向更广泛的社区表明您已经找到了解决方案,并为回答者和您自己提供了一些声誉。没有义务这样做。
    【解决方案3】:

    你不能使用 Arrays.sort(m); m var 是 double 我猜你的意思是 Array.sort(word) 等等在代码的其余部分......

    如果需要创建double数组来计算中位数,check this question

    【讨论】:

      猜你喜欢
      • 2015-02-04
      • 1970-01-01
      • 2012-02-02
      • 1970-01-01
      • 2018-08-05
      • 1970-01-01
      • 2021-07-30
      • 2014-02-11
      • 2018-06-26
      相关资源
      最近更新 更多