创建命令行,如果语句不起作用

时间:2013-08-19 21:53:08

标签: java shell loops

我想创建一个命令行,只是为了运行基本命令。到目前为止,我已经做到了,所以人们可以告诉程序他们的名字。但是,当我没有输入名称时,它会像我一样对待它。这是我的班级:

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

这是输出

  

$$:好吧

     

谢谢你的名字,好吧

     

$$:洞

     

感谢名称,孔

     

$$:

     

感谢您的名字,

为什么不起作用?

7 个答案:

答案 0 :(得分:7)

调用readLine() on a BufferedReader只会在输入结束时返回null。在这里,输入尚未结束,您刚刚输入一个空行,因此""(空字符串)就是结果。

您需要结束输入流,通常使用Ctrl-C。然后你会得到"Why wont you tell me your name!"。但是你需要打破你的无限循环。

答案 1 :(得分:3)

使用此

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

答案 2 :(得分:2)

尝试

wtt.length()==0 

而不是检查null

答案 3 :(得分:2)

这是因为虽然您首先将字符串设置为null,然后将其设置为br.readLine(),即使用户在输入之前没有输入任何内容,也会有一行要读取,所以它会将字符串设置为空字符串。

您还应该(或者说)将您的字符串与""(一个空字符串)进行比较,看看他们是否输入了任何内容。

答案 4 :(得分:1)

您还应该将wtt""进行比较,以确保该行不为空。

if (wtt == null) {

变为

if (wtt == null && !!("".equals(wtt))) {

答案 5 :(得分:1)

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

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

答案 6 :(得分:1)

readLine 方法不会为您提供行尾字符(例如\ n,\ n \ r)。因此,当您按下输入而不输入任何内容时,您不能指望循环退出。您可以使用读取方法来阅读字符并确定是否有换行符或使用扫描程序类,这对我来说更适合您。