有沒有辦法減少“else if”陳述句?我的任務是制作一個程式,該程式將要求用戶輸入 3 個成績,然后確定這些數字的平均值,并且還將根據他們給出的表格輸出計算平均值的等效成績。
到目前為止,這是我的代碼。
if (ave >= 98){
System.out.println("Your grade is 1!");
}
else if (ave >= 95){
System.out.println ("Your grade is 1.25!");
}
else if (ave >= 92){
System.out.println ("Your grade is 1.5!");
}
else if (ave >= 89){
System.out.println ("Your grade is 1.75!");
}
else if (ave >= 86){
System.out.println ("Your grade is 2!");
}
uj5u.com熱心網友回復:
如果有平滑函式(在 中每差 3 分ave,成績加 0.25 分),則應根據最小 86 個和最大 98 個檢查值計算等級值:
static double getGrade(int ave) {
final int min = 86;
double grade = 2.0;
int p = (ave - min) / 3;
p = p < 0 ? 0 : (p > 4 ? 4 : p); // acceptable ranges
grade -= p * 0.25;
System.out.println ("Your grade for ave = " ave " is " grade "!");
return grade;
}
測驗:
getGrade(99);
getGrade(94);
getGrade(86);
輸出:
Your grade for ave = 99 is 1.0!
Your grade for ave = 94 is 1.5!
Your grade for ave = 86 is 2.0!
對于評論中提供的更新公式:
1.0 = 98 – 100 %, 1.25 = 95 – 97 %, 1.5 = 92 – 94 %, 1.75 = 89 – 91 %, 2.0 = 86 – 88 %, 2.25 = 83 – 85 = 87, 2.2. = 77 – 79 %, 3.0 = 75 – 76 %, 5.0 = 低于 75 % 平均值
需要修改代碼以提供低于 75 和介于 75..77 之間的值:
static double getGrade(int ave) {
double grade = 5.0;
if (ave >= 75) {
grade = 3.0;
final int stepAve = 3;
final int min = 77;
final int ranges = 7;
int p = ave < min ? -1 : (ave - min) / stepAve;
p = p < 0 ? -1 : (p > ranges ? ranges : p); // acceptable ranges
grade -= (p 1) * 0.25;
}
System.out.println ("Your grade for ave = " ave " is " grade "!");
return grade;
}
測驗:
for (int i = 72; i < 100; i = 3) {
getGrade(i);
}
結果:
Your grade for ave = 72 is 5.0!
Your grade for ave = 75 is 3.0!
Your grade for ave = 78 is 2.75!
Your grade for ave = 81 is 2.5!
Your grade for ave = 84 is 2.25!
Your grade for ave = 87 is 2.0!
Your grade for ave = 90 is 1.75!
Your grade for ave = 93 is 1.5!
Your grade for ave = 96 is 1.25!
Your grade for ave = 99 is 1.0!
uj5u.com熱心網友回復:
在這種情況下,您可以提取更改的變數,將它們放在一個集合中,然后遍歷該集合。在你的情況下,我會做類似的事情:
int[] threshold = new int[]{98,95,..};
String[] descr = new String[]{"1","1.25",..}
for(int i = 0; i < threshold.length; i ) {
if(ave >= threshold[i]) {
print("Your grade is " descr[i]);
break;
}
}
uj5u.com熱心網友回復:
我會建議NavigableMap將較低的平均值映射到等級。
就像是
/** Maps lower average to corresponding grade. */
static final NavigableMap<Integer, String> GRADES =
Collections.unmodifiableNavigableMap( new TreeMap<>( Map.of(
98, "1",
95, "1.25",
92, "1.5",
89, "1.75",
86, "2",
Integer.MIN_VALUE, "not specified" // avoid null check
)));
String grade(int average) {
return GRADES.floorEntry(average).getValue();
}
最后一個條目僅針對平均值小于86的情況,顯然可以根據需要更改。也可以在地圖中使用Doubles 而不是Strings。
uj5u.com熱心網友回復:
對于多個 if..else if..else 。始終建議使用 switch 陳述句。
public void DisplayGrade(int range)
{
switch (range)
{
case >= 98 :
System.out.println ("Your grade is 1!");
break;
case >= 95:
System.out.println ("Your grade is 1.25!");
break;
case >= 92 :
System.out.println ("Your grade is 1.5!");
break;
case >= 89 :
System.out.println ("Your grade is 1.75!");
break;
case >= 86:
System.out.println ("Your grade is 2!");
break;
}
}
uj5u.com熱心網友回復:
您可以減少else-ifs數量的唯一方法是在需要唯一輸出的點之后切斷并添加一條else陳述句以避免輸入超出您的指定范圍:
if (ave >= 98){
System.out.println("Your grade is 1!");
}
else if (ave >= 95){
System.out.println ("Your grade is 1.25!");
}
else if (ave >= 92){
System.out.println ("Your grade is 1.5!");
}
else { //for example. if you do not need a custom output range below avg of 92...
System.out.println("Your grade is {whatever else it can be}");
}
正如評論中指出的那樣,您的代碼已經足夠簡化。您可以嘗試使用 switch 陳述句,但我認為不值得麻煩,因為您的代碼應該可以正常作業并且沒有采取不必要的步驟。你所需要的只是最后的else宣告。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/387435.html
上一篇:檢查單選按鈕是否在ejs中被選中
