比x小,大于y

时间:2014-12-02 21:20:50

标签: java case

我只想问一下如何用java编写这个例子。

case 1: 
    if (mark == 1) {
        System.out.println("You can't pass test");
    }    
    break;
case 2:
    if (mark > 1) {
        System.out.println("You can pass test");
    }

但是最大分数是5,所以如果有人把6个应用程序假设说" ERROR"。我该如何解决?

6 个答案:

答案 0 :(得分:2)

测试i是否小于x且大于y。像

这样的东西
if (i > y && i < x)

或使用De Morgan's laws

if (!(i <= y || i >= x))

答案 1 :(得分:2)

在某些地方你的情况,如果测试似乎是在检查相同的事情,它会让人感到困惑,因为整个开关声明都没有显示出来。如果switch语句也使用了mark,那么使用case和if语句进行测试似乎是多余的。

如果您正在寻找如何使用开关来测试范围,请参见示例。如果你希望它们具有相同的效果,你可以在一个开关中让案件失败(不添加休息时间):

switch (mark) {
    case 1: {
        System.out.println("you can't pass test");
        break;
    }
    case 2:
    case 3:
    case 4:
    case 5: {
        System.out.println("You can pass test");
        break;
    }
    default: {
        System.out.println(mark > 5 ? "too high" : " too low");
        break;
    }
}

虽然if语句在这里可能会更好用:

if (mark >= 2 && mark <= 5) {
    System.out.println("You can pass test"); 
} else if (mark < 2){
    System.out.println("You can't pass test");
} else {
    System.out.println("ERROR");
}

答案 2 :(得分:1)

你需要做一个&amp;&amp;在你的if语句中。

if(mark ==1) {

}

if(mark > 1 && mark <=5) {
}

这假设最大标记包括五个。

答案 3 :(得分:0)

if (mark >= 0 && mark<= 5) {
    if(mark<=1){
        System.out.println("You can't pass test");
    }else{
        System.out.println("You can pass test");
    }
}else{
    System.out.println("Error");
}

答案 4 :(得分:0)

重构:

void testPass()
{
 System.out.println("You can pass test");
}

void testFail()
{
 System.out.println("You can't pass test");
}

void testError()
{
 //some code to do error processing
}

void someMethod(int marks)
{
 //somecode
   check_block:
   {
        if (marks > 5)
        {
            testError();
            break check_block;
        }
        if(marks > 1)
        {
            testPass():
            break check_block;
        }
        testFail();
    }   
    //some code

}

尽量避免切换。 希望这有帮助

答案 5 :(得分:0)

考虑使用业务对象而不是底层类型(在本例中为int):

class Mark {
   private final int value;
   public Mark(int value) {
       if (value < 1) {
            throw new IllegalArgumentException("Value " + value + " too small");
       } else if (value > 5) {
            throw new IllegalArgumentException("Value " + value + " too large");
       }
       this.value = value;
   }
   public boolean isPassing() {
       return value > 1;
   }
   public int getValue() {
       return value;
   }
}

在应用程序的主体中

try {
    Mark mark = new Mark(value);
    System.out.println("You "+(mark.isPassing()?"can":"can't")+" pass test"); 
} catch (IlleagalArgumentException e) {
    System.out.println("Error: " + e.getMessage()); 
}

真正的优势在于,随着您的应用程序的增长,您可以传递Mark的实例,并且只需要在将int转换为Marks时担心错误情况。