我正在設計一個Java捐贈插件,用戶可以從中捐贈一個自定義金額。從捐贈中,您從特定包裝中收到了好處。我怎樣才能到一個int數組最接近的整數?
我想要做的是將整數n舍入到最近的捐贈包中。
例如,可能有3個捐贈包,所有表示爲整數。有5美元,10美元和20美元的捐贈包。如果用戶捐贈13美元,我希望該插件將其降至10美元,因爲這是最近的捐贈包。
我正在設計一個Java捐贈插件,用戶可以從中捐贈一個自定義金額。從捐贈中,您從特定包裝中收到了好處。我怎樣才能到一個int數組最接近的整數?
我想要做的是將整數n舍入到最近的捐贈包中。
例如,可能有3個捐贈包,所有表示爲整數。有5美元,10美元和20美元的捐贈包。如果用戶捐贈13美元,我希望該插件將其降至10美元,因爲這是最近的捐贈包。
好了,今天我有一些空閒時間。 (:
關愛捐贈陣列爲了增加其他..只是有點它首先
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));
+1抽出時間去寫一個工作班! – Efthymis 2011-12-23 06:47:58
+1 - 我在寫回答時不知道floor()。也節省了檢查NoSuchElementException的必要。你的第二個答案是最好的答案。 – 2011-12-23 06:59:57
我不知道,爲什麼不呢?
if(donation >10 && <=15) { //say you want to round 15 or less to 10
donation=10;
}
嘗試通過10分,它四捨五入到最接近的整數,然後通過10
例如再乘以它。
13/10=1.3 -> 1.3~1 -> 1*10 = 10$
或
16/10=1.6 -> 1.6~2 -> 2*10=20$
當然,這僅在10秒的捐贈包工作。
您可以使用捐款陣列二進制搜索和查找索引之間新的捐贈價值所在,然後決定從兩個值很容易使用的if-else。
編輯:你需要先手動排序數組。
把所有的值在TreeSet<Integer>
,然後用
myTreeSet.headSet(donatedValue).last();
你真的意味着「選擇少最大的捐贈金額是否等於'n'「? – 2011-12-23 06:36:45
是的,我確實想這樣做 – liamzebedee 2011-12-23 07:02:40