我正在尝试使用switch case来选择基于变量的条件, 但是我收到了错误。这样做的正确过程是什么?是否可以使用switch case,或者我应该使用嵌套的iffs?
public class Grader {
// no attributes required
public Grader() {
// no code required
}
public String grade(int mark) {
String grade = null;
// code to determine grade goes here
switch (mark){
//For marks 85-100, Grade is HD
case ((100>=mark>=85)):
grade="HD";
break;
//For marks 75-84, Grade is D
case (mark>=75 && mark<=84):
grade="D";
break;
//For marks 65-74, Grade is C
case (mark>=65 && mark<=74):
grade="C";
break;
//For marks 50-64, Grade is P
case (mark>=50 && mark<=64):
grade="P";
break;
//For marks 49-0, Grade is HD
case (mark<=49 && mark>=0):
grade="F";
break;
}
return grade;
}
public boolean pass(int mark) {
boolean pass = false;
// code to determine pass goes here
return pass;
}
}
我
答案 0 :(得分:1)
Switch仅在其情况下采用常量值。您无法在评估运行时的情况下添加表达式。
最好的方法是使用传统的if-else-if
。
public String grade(int mark) {
String grade = null;
// code to determine grade goes here
if (mark >= 100 && mark <= 85) {
grade = "HD";
} else if (mark >= 75 && mark <= 84) {
grade = "D";
} else if (mark >= 65 && mark <= 74) {
grade = "C";
} else if (mark >= 50 && mark <= 64) {
grade = "P";
} else if (mark <= 49 && mark >= 0) {
grade = "F";
} else {
grade = "Not found";
}
return grade;
}
答案 1 :(得分:0)
不幸的是,Java没有像Javascript那样的切换范围,因此获得所需结果的一种方法是将mark
除以10并在必要时进行四舍五入(例如8.5变为9和等等。)。然后,对于0到10之间的每个数字,都有这样的情况,
double markDividedByTen = mark/10.0;
int mark = (int) (markDividedByTen + 0.5); //round to whole number
switch (mark){
case 10:
grade="HD";
break;
case 9:
grade="HD";
break;
case 8:
grade="D";
break;
case 7:
grade="C";
break;
case 6:
grade="P";
break;
case 5:
grade="P";
break;
case 4:
grade="F";
break;
case 3:
grade="F";
break;
case 2:
grade="F";
break;
case 1:
grade="F";
break;
case 0:
grade="F";
break;
}
这种方法的唯一问题是,从45到49的标记在技术上会获得“P”等级,但我只是想向您展示if / else if语句仍然使用switch语句的替代方法。 / p>
答案 2 :(得分:0)
你可以使用if-else语句,因为switch不能有表达式。 你可以用它。
public class Grader {
// no attributes required
public Grader() {
// no code required
}
public String grade(int mark) {
String grade = null;
// code to determine grade goes here
if(mark>=85 && mark<=100)
{
grade = "HD";
}
else if(mark>=75 && mark<=84)
{
grade = "D";
}
else if(mark>=65 && mark<=74)
{
grade = "C";
}
else if(mark>=50 && mark<=64)
{
grade = "P";
}
else if(mark>=0 && mark<=49)
{
grade = "F";
}
return grade;
}
public boolean pass(int mark) {
boolean pass = false;
// code to determine pass goes here
return pass;
}
}
答案 3 :(得分:0)
问题在于您在检查语句是否小于或大于某些值时尝试生成boolean
值。在switch
中,如果迭代{{1},则无法控制它值类型。
integer
这应该可以解决您的问题。但是有很多方法可以帮助您避免多个检查语句。检查if (100 >= mark && 85 <= mark) {
// grade ...
} else if (84 >= mark && 75 <= mark) {
// grade ...
} else if (74 >= mark && 65 <= mark) {
// grade ...
} else if (64 >= mark && 50 <= mark) {
// grade ...
} else if (49 >= mark && 0 <= mark) {
// grade ...
} else if (-1 >= mark || 101 <= mark) {
// Error,mark cannot be lower than 0 and higher than 100
}
和enums
技术
答案 4 :(得分:0)
对于这种情况,肯定是if-else语句。 您的switch语句错误顺便说一句。
答案 5 :(得分:0)
如果你真的想使用开关,你可以将标记除以 10 并使 case 10 & case 9 = A 然后你可以把 if 条件放在 case 8 到 5 中,默认为 f