在检查字符串时,我需要将以下
if
更改为开关
-大小写
,以提高圈复杂度。
String value = some methodx;
if ("apple".equals(value)) {
method1;
}
if ("carrot".equals(value)) {
method2;
}
if ("mango".equals(value)) {
method3;
}
if ("orange".equals(value)) {
method4;
}
但是我不确定我会得到什么价值。
现在每个人都在使用至少Java7,对吗?这是最初问题的答案:
String myString = getFruitString();
switch (myString) {
case "apple":
method1();
break;
case "carrot":
method2();
break;
case "mango":
method3();
break;
case "orange":
method4();
break;
}
笔记
String.equals
。if
-其他
语句(如cHows的回答)更快。学会使用其他
。
因为value
永远不会同时等于两个不相等的字符串,所以只有5种可能的结果——一个代表你关心的每个值,另一个代表“以上都不是”。但是因为你的代码没有消除不能通过的测试,所以它有16条“可能”的路径(2^考试数量),其中大多数永远不会被遵循。
使用else
,唯一存在的路径是实际可能发生的5条路径。
String value = some methodx;
if ("apple".equals(value )) {
method1;
}
else if ("carrot".equals(value )) {
method2;
}
else if ("mango".equals(value )) {
method3;
}
else if ("orance".equals(value )) {
method4;
}
或者开始使用JDK 7,它包括在switch
语句中使用字符串的功能。当然,Java只需将开关编译成
if
/else
之类的构造。。。
Java(版本7之前)不支持开关/大小写中的字符串。但是您可以通过使用枚举来实现所需的结果。
private enum Fruit {
apple, carrot, mango, orange;
}
String value; // assume input
Fruit fruit = Fruit.valueOf(value); // surround with try/catch
switch(fruit) {
case apple:
method1;
break;
case carrot:
method2;
break;
// etc...
}
我的应用程序未确认JDK 1.8。我试图使用一个带有字符串的开关盒作为开关。仅使用JavaDocs中的一个基本示例是的,我可以切换到if/else语句,但我不愿意。 我得到了,这意味着我使用的是旧版本的Java。。这不合理,因为我有jdk1。已安装8.0_11。 这会是我的Gradle档案中的一个问题吗?
案例1 自定义一个具有字符串替换功能的函数 使用for循环从指定位置遍历字符串“Good morning” 用字符串“evening”中的字符逐一替换原串 主函数中调用字符串替换函数 最后将替换后的字符串输出到屏幕上 #include <stdio.h> char * MyReplace(char *s1, char *s2, int pos) //自定义的替换函数 { int i, j;
问题内容: 是否可以在switch语句中使用关系运算符(<,<=,>,> =)? 上面的例子(显然)不起作用 问题答案: 你不能。 从jls-14.11 关系运算符(<,<=,>,> =)导致并且不允许这样做。 以下所有条件必须为真,否则会发生编译时错误: 与switch语句关联的每个case常量表达式都必须可分配给开关Expression的类型(第5.2节)。 与switch语句关联的大小写常量
问题内容: 为什么在切换情况下无法将枚举值用作字符串?(或者这有什么问题:) 问题答案: 您只能使用编译时已知的字符串。编译器无法确定该表达式的结果。 也许你可以尝试
这是我的代码: 如果年龄是15岁会发生什么?嗯,它给了我一个错误。所以我想知道是否有可能在案例中包含一个条件。例如, 我可以使用if语句,但我想知道是否可以使用开关。