2010-11-24 4 views
1

私は時間が06:00から23:59までの地図をキーとして作成しようとしており、毎回値として番号を追跡しています。フォーマットとしてHH.mmを保存する時間と私はループを使用してループを使用してマップを構築する予定ですループ内の次のコードを実行します。私は厳密に私はHH.MMとしてフォーマットを設定する必要があるので、入力をStringとして取得し、それをフォーマットし、次にそれをperfomanceに影響を与えるdoubleとして解析します。この特定のクラスで選択する任意の倍数が##。##の形式になるように、グローバル設定が変更されます。ここで注意すべきことは、それが60分で終わる時であるからです。したがって、.6の助けを借りて現在の反復を破る必要があります。小数点のフォーマットを### ## javaに設定する

Map map = new LinkedHashMap(); 
    //Edit:Moved DecimalFormat Outside the loop 
    DecimalFormat df = new DecimalFormat("##.##"); 
    for (double time= 06.00; time<= 22.00; time= time+ 01.00) 
    { 

     String timeString = df.format(appointmentTime); 
     time = Double.parseDouble(timeString); 

     if (timeString.indexOf(".6") != -1) 
     { 
      time= time+ 00.40; 

     } 
     map.put(time,"<number>"); 
    } 
+0

私はあなたが間違ったアプローチを取っていると思います。あなたが解決しようとしていることは何ですか? – Emil

+0

私は、特定のJavaクラスのすべての二重値に対して共通の書式## ##を維持しようとしています。個々の要素を書式設定するとパフォーマンスに影響を与えます。ハードコードは読書性とその流体マップに影響し、1分〜30私はそれをハードコードすることはできません。 – Harish

+0

サンプルプログラムを編集して意味のある値やメッセージをコンパイル、実行、プリントアウトすることができれば、私たちが理解しやすくなり、助けてくれるはずです。 –

答えて

2

私はあなたが最も複雑なアプローチを選ぶと信じています。時間変数を反復するのではなく、0時からの分を示す簡単な数値を繰り返して、マップの2倍の時間だけを生成することができます。

for(int totalMinutes = 6 * 60; totalMinutes <= 22 * 60; totalMinutes ++) { 
    map.put(buildTimeDouble(totalMinutes),”<number>”); 
} 

しかし、私は、それは代わりにあなたがあなた自身の時間のクラスを使用することができ、マップキーのダブルを使用しない方が良いでしょう(私はその時点であなたの質問を理解していない)と信じて、何かのように:

Time{ 
    private int hour; 
    private int minutes; 

    public Time(int hour; int minutes) { 
    this.hour = hour; 
     this.minutes = minutes; 
    } 

    public toString(){ 
     return hour + “:” + minutes 
    } 

    public static Time fromTotalMinutes(int totalMinutesSinceZeroOclock){ 
     return new Time(totalMinutesSinceZeroOclock/60; totalMinutesSinceZeroOclock/60); 
    } 
} 
0

それはLRU cache .Thisが簡単にLinkedHashMap .Iを使用して実装することができますが、使用することができ、これらすべてのvalues.Perhapsはまた、あなたが時間を表現するために、二重を使用してはならないことだと思うのための計算を事前に良い方法はありませんこのarticleに移動すると、新しいアイデアが得られるかもしれません。

0

パフォーマンスが心配な場合は、ループの外側でDecimalFormatを1回だけ作成することをコードに加える必要があります。ループ内で同じインスタンスを繰り返し再利用することができます。

+0

実際にはこれはサンプルコードであり、実際のコードではループの外側ですが、私の必要条件はすべてではありません。入力はフォーマットされていない10進数で、これを文字列に変換して解析小数点に戻します – Harish

0

オフラインでエラーが発生すると丸め誤差が発生するため、ダブルスはカウンタとして使用しないでください。

代わりに必要な時間を計算する整数カウンタがあります。

関連する問題