2013-10-02 2 views
0

Я новичок в java из C# background. В C#, когда я хочу, чтобы убедиться, что пользователь не могу ли нулевые данные в консольном приложении я сделать петлю какОшибка использования цикла while в java

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 снова перемещает только одну строку ждет значение, которое должно быть введено.

Что я делаю неправильно?

+0

Как вы вводите 'null' значение? – Joni

+0

@Joni Просто нажав клавишу ввода, не набрав ничего. Вот как это делается в C#. Я делаю ошибку? –

+0

«Пока цикл не работает хорошо в java», веселый заголовок, не так ли? Интересно, как вы думаете, что язык работает не так хорошо, как вы, так как вы даже признаетесь, что являетесь новичком. – Jack

ответ

1

Попробуйте вместо этого использовать nextLine(). next() только встает на следующее место, nextLine() получает следующую строку. Я смутно помню это из своего класса java в колледже.

+0

Был ли мой ответ оскорблять вас ..? –

+0

Почему ты так сказал. я поблагодарил вас –

+0

Обычно, когда у людей есть несколько '.....' в конце, это подразумевает сарказм. (Я рад, что это было не в этом случае lol) –

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 для равных, вы будете знать, что я имею в виду. А также намек, я начал использовать buffred читателя, когда я начал программировать в Java

+0

Это не будет иметь никакого значения, потому что 'equals' является симметричным. На самом деле оригинал предпочтителен, если есть вероятность, что 'pname' фактически' null'. – Joni

+0

Неправильное использование. Если pname является NULL, во второй форме вы получаете 'NullPointerException' ;-) –

+0

Спасибо, я узнал что-то новое тоже – user2754845

0

Вы можете использовать:

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

Я также столкнулся с подобным типом проблемы сразу. Проблема не в цикле while. Он используется для повторного использования одного и того же объекта 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(); 
} 

}

Смежные вопросы