在switch中使用switch case作为Java中的条件语句

时间:2017-04-11 05:55:52

标签: java switch-statement conditional

我正在尝试使用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;
    } 
}

6 个答案:

答案 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