0

我是来自 c# 背景的 java 新手。在 c# 中,当我想确保用户不能在控制台应用程序中执行空数据时,我会创建一个循环,例如

static void Main(string[] args)
{
    Console.WriteLine("Enter your name : ");
    string name = Console.ReadLine();

    while (name == "")
    {
        Console.WriteLine("Enter your name : ");
        name = Console.ReadLine();
    }
}

现在我想在java中实现相同的功能。我在用

public static void main(String[] args) {
    // TODO code application logic here
    System.out.println("Enter your name : ");
    String pname;
    Scanner scan=new Scanner(System.in);
    pname=scan.next();

    while ("".equals(pname))
    {
        System.out.println("Enter your name : ");
        pname=scan.next();
    }
}

但是当输入一个空值时,输出不会Enter your name再次显示它只会移动一行等待输入一个值。

我究竟做错了什么?

4

4 回答 4

1

尝试nextLine()改用。next()只到达下一个空格,nextLine()获得下一个换行符。我依稀记得我在大学的 java 课上的这一点。

于 2013-10-02T21:44:51.230 回答
0

我也曾经遇到过类似的问题。问题不在while循环中。它是在重用相同的 Scanner 对象。尝试每次创建新的 Scanner 对象。

public static void main(String[] args) {
// TODO code application logic here
System.out.println("Enter your name : ");
String pname;
Scanner scan=new Scanner(System.in);
pname=scan.next();

while (pname.equals(""))
{
    System.out.println("Enter your name : ");
    scan = new Scanner(System.in);
    pname=scan.next();
}

}

于 2013-10-02T21:56:15.993 回答
0

您可以使用:

while (pname == null || "".equals(pname))
{
    System.out.println("Enter your name : ");
    pname = scanner.nextLine();
}
于 2013-10-02T21:48:43.257 回答
0
   while ("".equals(pname))
        {
           System.out.println("Enter your name : ");
           pname=scan.next();
        }

而是使用

     while (pname.equals(""))
     {
        System.out.println("Enter your name : ");
        pname=scan.next();
     }

如果您查看 javadocs 中的 equals,您就会知道我在说什么。还有一个提示,当我开始用 java 编码时,我开始使用缓冲阅读器

于 2013-10-02T21:46:10.233 回答