我是编程新手,所以这有点基本,但我在这里找不到为什么会一直发生这种情况的答案"运算符||对于参数类型char;,有人能帮忙吗,这是我们的任务。提前谢谢。
import java.util.Scanner;
public class Test {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
char choice = (scan.next().charAt(0));
switch (choice) {
case ('A'||'a'):
System.out.println("Wrong Answer");
break;
}
}
}
在Java中,不能对字符进行逻辑"或"运算。最接近您在Java中想要做的事情可能是:
switch (choice) {
case 'A':
case 'a':
System.out.println("Wrong Answer");
break;
}
在这里,我们让A
的两种情况都流向同一种情况。另一种选择:
switch (Character.toUpperCase(choice)) {
case 'A':
System.out.println("Wrong Answer");
break;
}
这种方法首先将输入字符大写,然后我们只需要检查switch
语句中的大写字母。
您可以将switch
替换为常规的if
语句,并使用||
运算符:
public class Test {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
char choice = scan.next().charAt(0);
if (choice == 'A' || choice == 'a') {
System.out.println("Wrong Answer");
}
}
}
然而,使用String
类操作会更好。来自Scanner的next()
正好返回String实例。经过小的修改,它可以像:
public class Test {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
String firstLetter = scan.next().substring(0, 1);
if (StringUtils.equalsIgnoreCase(firstLetter, "A")) {
System.out.println("Wrong Answer");
}
}
}
此外,还使用了StringUtils
类中的equalsIgnoreCase((。您必须使用生成管理器将此依赖项添加到项目中。
您可以将字符转换为小写或大写:
switch (Character.toLowerCase(choice)) {
case 'a': System.out.println("Wrong Answer"); break;
}
正如其他答案所说,每个case语句中只能有一个值。其他答案建议使用两种案例陈述。然而,Java的最新版本(从版本13开始(有一个增强的switch
语句,使其更加整洁:
switch (choice) {
case 'A', 'a' -> System.out.println("Wrong Answer");
}
看看它整洁了多少?您不仅不需要两个case语句,而且也不需要break
语句。
其他答案建议使用Character.toLowerCase
,但这也存在问题。考虑一下:
switch (Character.toLowerCase(choice)) {
case 'i':
System.out.println("Correct answer");
break;
default:
System.out.println("Wrong answer");
break;
}
问题是Character.toLowerCase
对当前区域设置敏感。如果土耳其的用户运行以上操作,并键入I
,他们将得到";错误答案"而不是正确的答案。这是因为在土耳其语中,字母I的小写等价物不是I,而是ı(一个没有点的I(。类似的问题也出现在toUpperCase
和其他一些语言中。出于这个原因,我不建议使用toLowerCase/toUpperCase。