Java 如果语句不起作用,则生成命令行
我想制作一个命令行,只运行基本命令。到目前为止,我已经做到了让人们可以告诉程序他们的名字。但是,当我不输入名称时,它会将其视为我输入了名称。这是我的班级:Java 如果语句不起作用,则生成命令行,java,shell,loops,Java,Shell,Loops,我想制作一个命令行,只运行基本命令。到目前为止,我已经做到了让人们可以告诉程序他们的名字。但是,当我不输入名称时,它会将其视为我输入了名称。这是我的班级: public static void main(String args[]) throws IOException { int a = 1; do { System.out.print("$$: "); BufferedReader br = new BufferedR
public static void main(String args[])
throws IOException
{
int a = 1;
do
{
System.out.print("$$: ");
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String wtt = null; // wtt = what they typed!
wtt = br.readLine();
if(wtt == null)
{
System.out.println("Why wont you tell me your name!");
}
else
{
System.out.println("Thanks for the name, " + wtt);
}
}
while(a == 1);
}
这是输出
$$:嗯
谢谢你的名字
$$:洞
谢谢你的名字,霍尔
$$:
谢谢你的名字
为什么不工作?调用只会在输入结束时返回null
。在这里,输入还没有结束,您只是输入了一个空行,因此结果是“
(空字符串)
您需要结束输入流,通常使用Ctrl-C。然后您将得到“为什么不告诉我您的名字!”
。但是你需要打破你的无限循环。试试看
wtt.length()==0
这是因为虽然您首先将字符串设置为
null
,但随后将其设置为br.readLine()
,即使用户在按enter键之前没有键入任何内容,也会有一行要读取,因此它会将字符串设置为空字符串
您还应该(或者相反地)将您的字符串与”
(空字符串)进行比较,以查看它们是否输入了任何内容。使用此选项
if (wtt == null || wtt.trim().length() == 0)
您还应该将
wtt
与“
进行比较,以确保该行不是空的
if(wtt==null){
变成
如果(wtt==null&&!!(“”.equals(wtt)){
将wtt与null进行比较,而不是将其与空字符串进行比较:
if ("".equals(wtt))
{
System.out.....
}
readLine方法不提供行尾字符(例如。\n\r)。因此,当您只按enter键而不输入任何内容时,您不能期望循环退出。您可以使用read方法来读取字符并确定是否有新行字符,或者使用Scanner类,在我看来,它更适合您的情况。您可能会得到空字符串,但您只是针对null进行测试。另外,如果您必须放一条注释来解释为什么您以这种方式命名变量,您可能希望将变量名称更改为更有意义和可读性的名称:)(实际上最好同时执行这两项操作;首先检查
null
)使用ApacheCommonsLang而不是重新发明轮子