2011-12-23 7 views
0

私はJavaで寄付プラグインを設計しています。そこからユーザーはカスタム金額を寄付することができます。寄付から、特定のパッケージから受け取るメリットがあります。int配列から最も近い整数に切り上げるにはどうすればよいですか?

私がしたいことは、最も近い寄付パッケージに整数nを切り捨てます。

たとえば、3つの寄付パッケージがすべて整数で表されている場合があります。 $ 5、$ 10、$ 20の寄付パッケージがあります。ユーザーが13ドルを寄付した場合、プラグインを最も近い寄付パッケージである$ 10に丸めるようにします。

+0

あなたが本当に小さい最大の寄付金額を選択する」という意味でください'n'よりも大きいか等しいか? –

+0

はい私はそれをしたいと思います – liamzebedee

答えて

5

を使用まあ、私は今日、いくつかの自由な時間を持っています。 (:他に寄付配列が注文を増加しているため ケア...ちょうどソートそれ最初

public class Donation { 
    private static int[] donArray = {10, 5, 30, 20}; 
    static{ 
     Arrays.sort(donArray); 
    } 

    public static void main(String[] args){ 
     int paid = 13; 
     System.out.println("Applied Donation: " + applyDonation(paid)); 
    } 

    private static int applyDonation(int paid) { 
     int applied = 0; 
     for(int range: donArray){ 
      if(range <= paid) 
       applied = range; 
      else 
       break; 
     } 
     return applied; 
    } 
} 

またはさらに簡単には、この:

TreeSet<Integer> donSet = new TreeSet<Integer>(Arrays.asList(new Integer[]{10, 5, 30, 20})); 
    int paid = 13; 
    System.out.println("Applied Donation: " + donSet.floor(paid)); 
+0

+1は労働者階級を書く時間を取ってくれました! – Efthymis

+0

+1 - 私は答えを書いたときにfloor()について知りませんでした。また、NoSuchElementExceptionをチェックする必要がありません。あなたの2番目の答えは、遠く離れた最良の答えです。 –

0

なぜこのようにはわからないのですか?

if(donation >10 && <=15) {   //say you want to round 15 or less to 10 
    donation=10; 
} 
0

は、最も近い整数に丸め、10で割ること試してみて、それから10

などによって再びそれを掛けます。もちろん

13/10=1.3 -> 1.3~1 -> 1*10 = 10$ 

または

16/10=1.6 -> 1.6~2 -> 2*10=20$ 

これが唯一の10秒の寄付パッケージで動作します。

0

寄付の配列にバイナリ検索を使用して、新しい寄付の価値があるインデックスを見つけて、if-elseを使って簡単に2つの値から決定することができます。
編集:あなたはそれの前に並べ替えられた配列を持っている必要があります。

1

TreeSet<Integer>のすべての値を入れ、その後、

myTreeSet.headSet(donatedValue).last();