Java 如何在Switch case语句中使用范围检查
我必须使用switch case语句用JAVA编写一个程序。我需要使用switch case语句检查以下条件。但是我无法比较switch case语句中的值,我如何才能完成此任务Java 如何在Switch case语句中使用范围检查,java,Java,我必须使用switch case语句用JAVA编写一个程序。我需要使用switch case语句检查以下条件。但是我无法比较switch case语句中的值,我如何才能完成此任务 if Avarage - AVG AVG ≥ 3.50 “A Pass” 3.49 ≥ AVG ≥ 3.00 “B Pass” 2.99 ≥ AVG ≥ 2.50 “C Pass" 2.49 ≥ AVG ≥ 2.00 “D Pass” 2.00 ≥ AVG “Fail” 您可以使用一系列if语
if Avarage - AVG
AVG ≥ 3.50 “A Pass”
3.49 ≥ AVG ≥ 3.00 “B Pass”
2.99 ≥ AVG ≥ 2.50 “C Pass"
2.49 ≥ AVG ≥ 2.00 “D Pass”
2.00 ≥ AVG “Fail”
您可以使用一系列if语句,也可以使用实现NavigableMap接口的。它可能看起来像:
TreeMap<Double, String> map = new TreeMap<>();
map.put(0d, "Fail");
map.put(2d, "D Pass");
map.put(2.5, "C Pass");
map.put(3d, "B Pass");
map.put(3.5, "A Pass");
System.out.println(map.floorEntry(1.9).getValue()); //Fail
System.out.println(map.floorEntry(2.49).getValue()); //D
System.out.println(map.floorEntry(2.5).getValue()); //C
System.out.println(map.floorEntry(3d).getValue()); //B
System.out.println(map.floorEntry(3.5).getValue()); //A
TreeMap map=newtreemap();
映射放置(0d,“失败”);
地图放置(2d,“D通行证”);
地图放置(2.5,“C通行证”);
地图放置(3d,“B通行证”);
地图放置(3.5,“通行证”);
System.out.println(map.floorEntry(1.9.getValue())//失败
System.out.println(map.floorEntry(2.49.getValue())//D
System.out.println(map.floorEntry(2.5.getValue())//C
System.out.println(map.floorEntry(3d.getValue())//B
System.out.println(map.floorEntry(3.5.getValue())//A.
回到您的示例,您可以简单地调用returnmap.floorEntry(AVG.getValue()代码>
性能方面,它将非常接近,尤其是只有5种不同的情况。我让您决定哪个更可读。开关在内部使用跳转表,这就是为什么case语句只能测试精确值和最终值。你可以这样想象:
result = jumpTable[key]; // switch pseudo-code
String getTestResult(final double avg) {
if (avg >= 3.5) {
return "A Pass";
} else if (avg >= 3.0) {
return "B Pass";
} else if (avg >= 2.5) {
return "C Pass";
} else if (avg >= 2.0) {
return "D Pass";
} else {
return "Fail";
}
}
这不是您在编译的代码中会发现的,但总体上是相同的想法,所以我用它来回答您的问题
无法访问不在此数组中的任何索引,因此如果数组长度为5,则无法执行以下操作:
result = jumpTable[2.3]; // impossible in Java
因为这只是没有定义,Java无法神奇地发现您实际上想要舍入到2。要存档,您需要编写一个能够理解和转换中间值的函数,例如一个简单的floor函数
result = jumpTable[floor_int(2.3)]; // a solution for a specific case
在某些情况下会起作用。显然,所使用的函数实际上需要适合您的问题,因此如果2.3应该指向索引1,那么您显然需要在幕后使用不同的数学
正如assylias所写,a的方法floorEntry
是我上面所写的方法的一个广义版本,可以用来解决您的问题
另一种选择是标准的if-else链,如下所示:
result = jumpTable[key]; // switch pseudo-code
String getTestResult(final double avg) {
if (avg >= 3.5) {
return "A Pass";
} else if (avg >= 3.0) {
return "B Pass";
} else if (avg >= 2.5) {
return "C Pass";
} else if (avg >= 2.0) {
return "D Pass";
} else {
return "Fail";
}
}
这使用了数字的自然顺序,这表明(显然)avg
不能>=3.5,但我必须使用Switch-Case语句,这是一个需要使用Switch-Case语句的问题。有人能帮我吗?@astrodileepa如果avg可以是任意双精度的,这不能用Switch语句来写。如果仅授权某些值(例如0、0.5、1、1.5、2、2.5、3、3.5),则可能。您需要提供更多信息。是的,我知道我们不能使用switch case语句来比较值。但这是一个具有挑战性的问题。规则是不要使用if..else语句。我不知道如何处理这种情况。这是一个非常棘手的问题。