案例79-70中的重复案例标签

时间:2014-08-04 19:51:22

标签: java label case

我在以下代码中有一个重复的案例标签。 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;
    }
  }
}

1 个答案:

答案 0 :(得分:2)

79-70不被视为范围,而是简单的减法,其值为9。因为您还编写了89-80并且其值也是9,所以编译器认为您要指定9两次。

为了更好地构建此问题,请使用ifelse 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;
}