在java中使用while循环时出错

时间:2013-10-02 21:41:02

标签: c# java console

我是来自c#background的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 个答案:

答案 0 :(得分:1)

请尝试使用nextLine()next()只能到达下一个空格,nextLine()会获得下一个换行符。我在大学的java课程中依稀记得这个。

答案 1 :(得分: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编码时,我开始使用buffred reader

答案 2 :(得分:0)

您可以使用:

while (pname == null || "".equals(pname))
{
    System.out.println("Enter your name : ");
    pname = scanner.nextLine();
}

答案 3 :(得分: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();
}

}