2015-05-03 42 views
1

,我有一個nooby問題。Java在這裏找到兩個新的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); 
     } 
    } 
} 

這是我到目前爲止。有人可以幫助我,並告訴我我錯過了什麼?

+0

'm'不是數組 – silentprogrammer

+0

我應該怎麼做才能將m轉換爲數組?或者我應該如何處理m來理清中位數? – duhNooby

+0

你必須在你的'for'循環之前創建一個數組,然後在每次傳遞時在數組中添加'm'。 – moarCoffee

回答

1

只是拼出來給你,這是你需要改變什麼:

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

+0

謝謝你這幫了我很多:) – duhNooby

+0

@duhNooby沒問題:)順便說一句,如果這個或任何答案已經解決了你的問題,請考慮通過點擊複選標記來接受它。這向更廣泛的社區表明,您已經找到了解決方案,併爲答覆者和您自己提供了一些聲譽。沒有義務這樣做。 – moarCoffee

0

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

如果你需要創建一個double陣列來計算位數, check this question

0
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); 
    }