2012-05-08 12 views
0

私は、メーターユニットの量を計算する関数に取り組んでいます。メーターcalcualtionsのルールは以下のとおりです。ユニット変換の実装

    1.6キロAMTの
  • 最低運賃 - 12/-
  • その後1キロのAMT - 7/- 真夜中のための旅のための
  • 25%の追加料金

私が書かれている機能は次のとおりです。

public static void CalculateAutoFare(int kmIndex) { 
    double fare = 12.00; 
    double night = 15.00; 
    double subseIncre = 1.50; 
    double nightIncre = 0.25; 
    int j=0; 

    for (int i=1; i <= kmIndex; i++) { 

     if (i == 3 || j == 4) { 
      fare += 1.00f; 
      j =0; 
     } 
     else { 
      fare += subseIncre; 
      j++; 
     } 
     fare = Math.round(fare*2f)/2f; 
     double extra = ((double) fare * nightIncre); 
     night = fare + extra; 
     night = Math.round(night*2f)/2f; 

     System.out.println("I = " + i + " Fare = " + fare + " Night = " + night + " 25%Extra = " + extra); 
    } 

    System.out.println("Day = " + fare + " Night = " + night); 
} 

kmIndexキロの指標です。メートルの読み取り値は、1.00,1.10,1.20,1.30,1.90,2.00 ...となります。したがってkmIndexは1.00 = 0,1.10 = 1,1.20,3となります。

enter image description here

は私が4.00まで働いているとの結果が右の宣言されていないところundetは、昼夜を問わずに、関連である必要があります:私は、コードごとに取得して、以下のように説明することがされなければならない

結果。

私はこれについて多くのことをしましたが、期待どおりの結果が得られませんでした。私が1つのものを訂正しようとすると、他の人が間違ってしまったり、期待した結果が得られない。誰もがこれで私を助けることができますか?これを解決しようと一日中過ごした。

+1

「あなたは」と説明してください。事件では、なぜ18.5の代わりに19でなければならないのですか?この結果を達成するための手順を示してください。 – Juliano

+0

「これからすべき」の結果は、ここにあります:http://www.trafficpolicemumbai.org/new_auto_tariff_card.pdf – Tvd

答えて

1

私はワークシートを分析しましたが、そこに示されている結果を与える数式は見つかりませんでした。一部の値には丸めの違いがあるようです。私は、25セントか75セントの値だけが違っていたことに気づいた。たとえば、18,5を計算し、19でなければなりません(結果は18,75で、18,5に切り捨てられますが、19に切り上げる必要があります)。 したがって、テーブルを作成するために使用された元の数式がない場合、結果がワークシートと一致するかどうかを確認する唯一の方法は、ハードコードすることです。これは洗練されたソリューションではありませんが、正しい結果が保証されています。

0

コードの小さな微調整がそのトリックでした。あなたは.75ラウンドを.5ラウンドにすることを欲しました。

{ 
      double fare = 12.00; 
      double night = 15.00; 
      double subseIncre = 1.50; 
      double nightIncre = 0.25; 
      int j=0; 

      for (int i=1; i <= 22; i++) { 

       if (i == 3 || j == 4) { 
        fare += 1.00f; 
        j =0; 
       } 
       else { 
        fare += subseIncre; 
        j++; 
       } 

       double extra = ((double) fare * nightIncre); 
       night = fare + extra; 
       ; 

       System.out.println("I = " + i + " Fare = " + fare + " Night = " + night + " 25%Extra = " + extra); 
      } 
      System.out.println("actual Day = " + fare + " Night = " + night); 

      fare = Math.round(fare*1.99f)/2f; 
      night = Math.round(night*1.99f)/2f; 
      System.out.println("rounded Day = " + fare + " Night = " + night); 
    } 
+0

上記のコードで私は正しく来ていた多くの数字が間違っています。彼らは運賃= Mathを変更する必要はありません。 if(i> = 11 && i <= 22)、つまり2.0から3.0のすべてを追加し、夜間* 2f/2fを使用する場合は1.99fを使用します。その変更で、私は3.xで3つの数字しか間違っています。私はこれをxx.xxでも使う必要があります。私は何を追加する必要がありますか? – Tvd

+0

ええ、私は他の入力で妥当性を確認するのを忘れていました...あなたはおそらくこの場合にifを必要とします... – tsatiz

関連する問題