java程序不打印这两条消息
我这里有一些代码,我试图让用户输入一封信, 数字或符号,我让它们都工作,但当我输入一个字母时,它 输出“您已输入字母”和“您已输入字母” Symbol“但事实是,我从来没有输入过一个符号,只是一个符号 信下面是它的样子:
输入单个字符:
D
你输入了一封信
你输入了一个符号
import static java.lang.System.*;
import java.util.*;
public class Java1304
{
public static void main(String[] args)
{
new Problem();
}
}
class Problem
{
char letter;
public Problem()
{
input();
process();
output();
}
void input()
{
Scanner scan = new Scanner(in);
out.println("Enter a SINGLE character:");
letter = scan.nextLine().charAt(0);
}
void process()
{
if(Character.isLetter(letter))
{
out.println("You entered a LETTER!");
}
if(Character.isDigit(letter))
{
out.println("You entered a NUMBER!");
}
if(!Character.isLetter(letter) || !Character.isDigit(letter))
//else
out.println("You entered a SYMBOL!");
}
void output()
{
out.println();
out.println();
out.println();
}
}
# 1 楼答案
您使用了OR而不是AND,因此当您检查
!Character.isDigit(letter)
时,字母“D”将通过在最后一个if语句中,将| |改为&&
# 2 楼答案
您想要的行为没有反映在您编写的代码中。如果字符不是字母或数字,则语句
!Character.isLetter(letter) || !Character.isDigit(letter)
的计算结果为true(因为| |是OR的逻辑运算符)回到您的示例,如果您键入“A”,那么
Character.isDigit(letter)
的计算结果为false,所以!Character.isDigit(letter)
的计算结果为true,所以!Character.isLetter(letter) || !Character.isDigit(letter)
的计算结果为true根据您的示例,您的if块可以更好地写成:
# 3 楼答案
第二个if语句为true,因为
!Character.isLetter(letter)
为true。||
是一个逻辑or
。这意味着,如果其中一条语句为真,它将进入if子句所以只要把最后一个if换成else,你就没事了
# 4 楼答案
您的问题是最后一个if语句——让我们在这里逐步了解您的用例:
您可以输入
D
isLetter('D')
是true
所以它会打印isDigit('D')
是false
所以不能打印!isLetter('D') && !isDigit('D')
与! true || ! false
(评估方法调用),这与false || true
(评估!
)与true
(评估||
)以便打印要修复它,您可以将
||
更改为&&
,或者将注释掉的else
子句放回原处。我个人认为else
子句是一个更好的解决方案,因为它清楚地传达了你的想法,即不是字母也不是数字的东西必须是符号,而不必明确检查每一个# 5 楼答案
再次罢工!那是你的罪魁祸首。你的案子需要
&&