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而不是重新发明轮子