2011-12-23 30 views
0

我正在設計一個Java捐贈插件,用戶可以從中捐贈一個自定義金額。從捐贈中,您從特定包裝中收到了好處。我怎樣才能到一個int數組最接近的整數?

我想要做的是將整數n舍入到最近的捐贈包中。

例如,可能有3個捐贈包,所有表示爲整數。有5美元,10美元和20美元的捐贈包。如果用戶捐贈13美元,我希望該插件將其降至10美元,因爲這是最近的捐贈包。

+0

你真的意味着「選擇少最大的捐贈金額是否等於'n'「? – 2011-12-23 06:36:45

+0

是的,我確實想這樣做 – liamzebedee 2011-12-23 07:02:40

回答

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 2011-12-23 06:47:58

+0

+1 - 我在寫回答時不知道floor()。也節省了檢查NoSuchElementException的必要。你的第二個答案是最好的答案。 – 2011-12-23 06:59:57

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。
編輯:你需要先手動排序數組。

1

把所有的值在TreeSet<Integer>,然後用

myTreeSet.headSet(donatedValue).last(); 
相關問題