我有一個應用程式,它根據用戶輸入的數量進行獎勵。
- 10個條目=1個銅牌,
- 20個條目=1個銅牌,1個銀牌,
- 30個條目=1個銅牌,1個銀牌和1個銅牌。
- 30個作品=1個銅牌、1個銀牌和1個金牌 。
然后永遠重復這個回圈,總是以10的倍數進行。
1-9應該顯示每一級的進展情況,每第十個條目開始下一級。1是10%,9是90%,與其顯示100%,不如直接進入下一級。
我顯示了當前級別的進度條,當前級別的完成百分比,以及用戶正在進行的級別的圖示。所有這些目前都顯示正確。
我所面臨的問題是,我還顯示了每個級別的計數,這只在包括44個條目在內的情況下是正確的。第45條是事情開始出錯的地方。
請查看以下內容或在jsfiddle上的內容,并隨時進行編輯。
。const DENOMINATOR = 10;
const clamp = (value: number, min: number, max: number): number => {
return Math.min(Math.max(value, min), max)。
}
const calculateAwardsByEntryCount = (count: number)=> {
const maxLevels = 3 * DENOMINATOR;
const modulus = count % maxLevels;
const currentLevel = Math.max(0, Math. floor(modulus / DENOMINATOR) - 1) 。
const nextLevel = Math.min(3, currentLevel 1) 。
const prestige = Math.ceil((count 1) / maxLevels)。
const progress = ((modulus - DENOMINATOR * nextLevel) / DENOMINATOR) * 100;
let bronze = 0;
let silver = 0;
let gold = 0;
if (count >= DENOMINATOR) {
bronze = count <= maxLevels ? 1 : Math.floor(modulus / (DENOMINATOR -1) *威望。
}
if (count >= DENOMINATOR * 2 & & bronze > 0) {
silver = count <= maxLevels ? 1 : clamp(Math. ceil(modulus / (DENOMINATOR * 2 -1) *威望,0,青銅 1)。)
}
if (count >= DENOMINATOR * 3 & & silver > 0) {
gold = count <= maxLevels ? 1 : clamp(Math. ceil((modulus / (DENOMINATOR * 3 - 1) *威望),0,銀 1)。)
}
return {
達到: {bronze, silver, gold},
currentLevel,
nextLevel,
進度。
}
}
console.log(calculateAwardsByEntryCount(45));
<iframe name="sif1" sandbox="allow-forms allow-modals allow-scripts" class="snippet-box-edit snippet-box-result" frameborder="0"></iframe>
uj5u.com熱心網友回復:
這不完全是最有效的解決方案,但至少它對任何數量的條目都是100%準確的。
。const DENOMINATOR = 10;
const calculateAwardsByEntryCount = (count: number)=> {
let remainingProgress = count;
let currentLevel = null;
let bronze = 0;
let silver = 0;
let gold = 0;
for (remainingProgress; remainingProgress >= DENOMINATOR; remainingProgress -= DENOMINATOR) {
switch (currentLevel) {
case 1:
currentLevel = 2;
gold = 1;
break;
case 0:
currentLevel = 1;
silver = 1;
break;
default:
currentLevel = 0;
bronze = 1;
break;
}
}
if (currentLevel === null) {
currentLevel = -1 {
}
const progress = (remainProgress / DENOMINATOR) * 100。
const nextLevel = currentLevel === 2 ? 0 : currentLevel 1;
return {
達到了: {
銅牌。
銀牌
金
},
nextLevel,
進展。
};
}
console.log(calculateAwardsByEntryCount(9) )。)
console.log(calculateAwardsByEntryCount(10) ) 。
console.log(calculateAwardsByEntryCount(20) )。
console.log(calculateAwardsByEntryCount(30) ) 。
console.log(calculateAwardsByEntryCount(35) ) 。
console.log(calculateAwardsByEntryCount(45) ) 。
console.log(calculateAwardsByEntryCount(55) ) 。
console.log(calculateAwardsByEntryCount(65) ) 。
console.log(calculateAwardsByEntryCount(75));
<iframe name="sif2" sandbox="allow-forms allow-modals allow-scripts" class="snippet-box-edit snippet-box-result" frameborder="0"></iframe>
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/319974.html
標籤:
上一篇:C 二維陣列之謎
