我在以下代码中有一个重复的案例标签。 java编译器说我在案例79-70中有一个重复的案例标签。我是一名新的java程序员,你能不能用较少的java术语来解释我做错了什么?
public class Unit4Test2
{
public static void main( String [] args)
{
int test_Score = 80;
int test_Score2 = 40;
int Grade_Average = (test_Score + test_Score2) / 2 ;
switch( Grade_Average )
{
case 100-90:
System.out.println( " Your average test score is " + Grade_Average );
System.out.println( "Your letter grade is an A." );
break;
case 89-80:
System.out.println( " Your average test score is " + Grade_Average );
System.out.println( "Your letter grade is a B." );
break;
case 79-70:
System.out.println( " Your average test score is " + Grade_Average );
System.out.println( "Your letter grade is a C." );
break;
case 69-65:
System.out.println( " Your average test score is " + Grade_Average );
System.out.println( "Your letter grade is a D." );
break;
case 64-0:
System.out.println( " Your average test score is " + Grade_Average );
System.out.println( "Your letter grade is a F." );
break;
default:
System.out.println( " Invalid test score. ");
break;
}
}
}
答案 0 :(得分:2)
79-70
不被视为范围,而是简单的减法,其值为9
。因为您还编写了89-80
并且其值也是9
,所以编译器认为您要指定9
两次。
为了更好地构建此问题,请使用if
和else if
,而不是使用开关来解决此问题:
if (Grade_Average > 100)
{
System.out.println("Not possible, you got more than 100 points you cheater!");
}
else if (Grade_Average >= 90)
{
System.out.println( " Your average test score is " + Grade_Average );
System.out.println( "Your letter grade is an A." );
}
else if (Grade_Average >= 80)
{
// do stuff
}
// moar stuff!!11!one!
else if (Grade_Average >= 0)
{
System.out.println( " Your average test score is " + Grade_Average );
System.out.println( "Your letter grade is a F." );
}
else
{
System.out.println("Error! I cannot grade your score!");
}
此方法首先检查Grade_Average
是否大于第一个阈值,如果是,则打印相应的句子。接下来它会检查下一个阈值,如果大于它,那就等等等等。最后,如果未找到匹配项,则返回错误。如果测试分数大于100
,它也会返回错误。
我提出的这个方法是我个人会做的,因为我认为它比案例陈述更具可读性。但是,如果你仍然坚持使用case语句,你可以尝试这样的事情:
public static boolean isBetween(int x, int lower, int upper) {
return lower <= x && x <= upper;
}
switch(Grade_Average) {
case isBetween(90, 100):
System.out.println( " Your average test score is " + Grade_Average );
System.out.println( "Your letter grade is an A." );
break;
case isBetween(80, 89):
System.out.println( " Your average test score is " + Grade_Average );
System.out.println( "Your letter grade is a B." );
break;
case isBetween(70, 79):
System.out.println( " Your average test score is " + Grade_Average );
System.out.println( "Your letter grade is a C." );
break;
case isBetween(65, 69):
System.out.println( " Your average test score is " + Grade_Average );
System.out.println( "Your letter grade is a D." );
break;
case isBetween(0, 64):
System.out.println( " Your average test score is " + Grade_Average );
System.out.println( "Your letter grade is a F." );
break;
default:
System.out.println( " Invalid test score. ");
break;
}