制作命令行,if语句无效

3

我想制作一个命令行程序,只用于运行基本命令。到目前为止,我已经让人们告诉程序他们的名字。然而,如果我没有输入名字,它会将其视为我已经输入了。这是我的类:

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);
}

这是输出结果:

$$:好的

谢谢你的名字,好的

$$:洞

谢谢你的名字,洞

$$:

谢谢你的名字,

为什么它不起作用?

3
你可能会得到一个空字符串,但你只测试了是否为空值(null)。 - digitaljoel
1
顺便提一下,如果你不得不放置一个注释来解释为什么你以某种方式命名了变量,那么你可能需要将变量名称更改为更有意义和可读性的内容 :) - digitaljoel
7个回答

7

BufferedReader上调用readLine()只有在输入结束时才会返回 null。 在这里,输入并没有结束,只是输入了一个空行,因此结果是""(空字符串)。

你需要终止输入流,通常使用Ctrl-C来完成。然后你将得到"Why wont you tell me your name!"。但之后你需要打破无限循环。


3

使用这个

if (wtt == null || wtt.trim().length() == 0) 

2
尝试一下。
wtt.length()==0 

不要检查 null


1
(实际上,最好首先检查“null”) - Dennis Meng
不要重复造轮子,使用Apache Commons Lang StringUtils#isEmpty - Luiggi Mendoza

2

这是因为虽然你一开始将字符串设置为 null,但之后你又将其设置为 br.readLine(),即使用户在按下回车键之前没有输入任何内容,它也会读取一行并将字符串设置为空字符串。

你应该同时(或者改为)将你的字符串与 ""(空字符串)进行比较,以查看用户是否输入了任何内容。


1
你需要将wtt""进行比较,以确保该行不为空。 if (wtt == null) { 变成 if (wtt == null && !!("".equals(wtt))) {

1

不要将 wtt 与 null 进行比较,而是将其与空字符串进行比较:

if ("".equals(wtt))
{
    System.out.....
}

1

readLine方法不会返回行末字符(例如\n、\r)。因此,如果您只按下回车键而没有输入任何内容,就不能期望循环退出。您可以使用read方法来读取字符并确定是否有换行符,或者使用Scanner类,在您的情况下似乎更适合。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接