此方法是假设计算得到的分数的平均值,并相应地返回等级。我如何通过从交换机()来计算(等级),以便它可以返回正确的档次?
public char calculate(){
int count=0;
int total = 0;
for (int x: testScores){
total = total + x;
count++;
}
int grade = total/count;
switch(grade){
case (1): if (grade>=90) return 'O';
break;
case(2): if (grade>=80 && grade<90) return 'E';
break;
case (3): if (grade>=70 && grade<80) return 'A';
break;
case (4): if (grade>=55 && grade<70) return 'P';
break;
case (5): if (grade>=40 && grade<55) return 'D';
break;
case (6): if (grade<40) return 'E';
break;
}
return //what should i return here??
}
我知道如何做到这一点无需开关(),但我认为这是可以做到这样为好。 PLZ告诉我,我失去了什么?
关于你的问题:
switch
与default
条款和返回默认值出现。break
stetements,因为你正在使用return
在每种情况下另外,如果你是限制自己只使用switch
,那么这是实现你的目标,一个简单的方法:
char calculate(int[] scores) {
double averageScore = Arrays.stream(scores).average().getAsDouble();
int nearestMultipleOfFive = 5 * ((int) averageScore / 5);
switch (nearestMultipleOfFive) {
case 100:
case 95:
case 90: return 'O';
case 85:
case 80: return 'E';
case 75:
case 70: return 'A';
case 65:
case 60:
case 55: return 'P';
case 50:
case 45:
case 40: return 'D';
default: return 'E';
}
}
既然你覆盖switch语句所有的情况下,你立即为他们每个人的回报,你不应该做任何事情,在那里,你永远达不到的那部分代码。在你目前拥有的break
语句的代码也没用,因为它永远不会在任何情况下达到的,因为再次它是由一个return语句预期。
如果你想在年底通过存储交换机案件的结果在先前定义的变量,并返回一个在最后一次返回值可以修改你的代码位。
如果您打开最后case
到default
而不是实际值,这将消除需要switch
语句后返回任何东西。
更广泛地说,每个if
里面你case
陈述可疑。如何grade == 1
和grade >= 90
?能够工作的只有一个案例6,因为6也是<40.你正在尝试使用1-6作为某种逻辑的标签,但在现实中的JVM grade
的值进行比较,以这些数字来决定什么案件执行。
我认为这是表达这种逻辑更简单的方法。它看起来像grade
将自己的数字等级(即0的100,虽然在理论上也有可能是负之间),所以我会沟switch
声明,只是使用if / else语句:
if (grade >= 90) {
return 'O';
} else if (grade >= 80 && grade < 90) {
return 'E';
} else if (grade >= 70 && grade < 80) {
return 'A';
} else if (grade >= 55 && grade < 70) {
return 'P';
} else if (grade >= 40 && grade < 55) {
return 'D';
} else {
return 'E';
}
注意最后一句话就是,没有任何条件else
。这使得它像一个default
声明switch
情况下工作:它会赶上不符合其他条件的任何值。
在你开关你跳转到不同的部位检查,如果grade
是1,2,3,等等。但是,你在它的0至100的范围内比较值?这不能工作了。
但你并不需要一个开关在所有的,你可以使用一系列if
语句
public char calculate(){
int count=0;
int total = 0;
for (int x: testScores){
total = total + x;
count++;
}
int grade = total/count; //what if count is 0?
if (grade>=90) return 'O';
if (grade>=80) return 'E';
if (grade>=70) return 'A';
if (grade>=55) return 'P';
if (grade>=40) return 'D';
return 'E';
}
并确保覆盖的情况下count
为0,我还没有在这里做,因为我不知道应该是什么结果呢。