2015-04-08 52 views
0

我正在閱讀包含運動員距離的文本文件,每個距離換行。每個運動員都有6次嘗試,每次嘗試都記錄一段距離。尚未做出的嘗試必須由字符串'U'表示,並且距離0將被存儲爲字符串'X'。 我目前初始化數組的如下:存儲和排序混合數據類型

Object[] distances = new Object[String 'U', String 'U', String 'U', String 'U', String 'U', String 'U',]; 

我然後通過陣列迭代和分配類型浮體的距離到陣列,或字符串「X」到所述陣列。 我的問題是,是否有更好的方法來存儲這些值,以及將它們分類的最佳方法是什麼。數字先降序,然後是非「U」然後是「X」(距離爲零)

回答

0

我的問題是,有沒有更好的方法來存儲這些值,以及什麼是最好的排序方法他們。

這是一個典型的案例,其中OOP(面向對象編程)可以幫助闡明有效數據和行爲的類型。

調用基類,例如,帶有派生類的Entry,例如NonAttemptPerformance。將float distance字段僅放在Performance類中。創建一個單身人士Comparator<Entry>對象並將其用於排序,例如,ArrayList<Entry>

0

你怎麼樣使用雙陣列,而不是與 實際值,不嘗試(0.0)和0(-1.0)距離

Double[] d = {6.5, 1.3, 4.7, 0.0, -1.0, 9.2 }; 

要以降序排序使用方法:第一號,其次爲非嘗試( 0.0)中,然後0 distances'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

+0

謝謝,其實我原來這樣做,但我現在必須出示其中非嘗試顯示爲U和犯規(0)顯示爲X.輸出也許我可以做這種方式,只是改變它當我打電話顯示,即如果(d [i] == 0){system.out.println('U');} – user3636636

+0

是的,這樣你維護數據結構與適當的值,並顯示任何需要。還要保持排序邏輯簡單。 – Neo

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