2015-12-28 5 views
0

Я пытаюсь сделать цикл, который повторяется до тех пор, пока пользователь не введет правильную информацию (без пробелов или пробелов). Это то, что у меня есть до сих пор, но оно повторяется только один раз. Я хочу, чтобы он повторялся, пока пользователь не заполнил правильное имя, например. Oskar/OSKAR/оскарПытается повторить до тех пор, пока условие не будет ложным

System.out.print("Name: "); 
    String name = scanner.nextLine(); 
    name = name == null ? "" : name.trim(); 
    while(name.isEmpty()) { 
     System.out.println("Wrong data"); 
     System.out.print("Name: "); 
     String name1 = scanner.nextLine(); 
     name = name1; 
    } 
+3

Это потому, что имя не пустой цикл anymore.Your работает только тогда, когда имя пустой. –

+0

Вы хотите, чтобы пользователь вводил имя и проверял, что он что-то ввел? –

+0

также похоже, что вы забыли trim() в цикле while –

ответ

3

Вы должны использовать do/while петли, так что вы не написать то же самое код дважды:

Scanner scanner = new Scanner(System.in); 

String name = null; 
do { //use do while loop for this 
    if (name != null) 
     System.out.println("Invalid Name \"" + name + "\" Try again"); 

    System.out.print("Enter Your Name: "); 
    name = scanner.nextLine(); 

    //keep looping until name is only letters 
} while (!name.matches("[A-Za-z]+")); 

System.out.println("Welcome " + name); 

Выход:

Введите Ваше имя:
Invalid Name "" Попробуйте еще раз
Введите Ваше имя: a1
Invalid Name "a1" Попробуйте еще раз
Введите Ваше имя: 1
Invalid Name "1" Попробуйте еще раз
Введите Ваше имя: Oskar
Добро пожаловать Oskar

+1

В этом случае вы пропустите msg «Неверное имя». Мне нужно будет поддерживать это, я думаю, используя флаг, я думаю. –

+0

@AadityaGavandalkar ok исправлено – WalterM

+0

Большое вам спасибо, очень полезно! –

2

Когда вы сделаете это: name = name1;, вы бросаете все, что пользователь дал вам в name, таким образом while(name.isEmpty()) больше не будет true.

Чтобы это исправить, вам нужно будет сделать некоторые дополнительные проверки на переменную name1, например:

if("Oskar".equals(name1)) //Instead of name = name1 
    name = name1; 

Код выше перезапишет переменную name тогда и только тогда, когда пользователь предоставляет Oskar в качестве имени.

0

Может быть, вам нужно что-то вроде:

System.out.print("Name: "); 
     String name = scanner.nextLine(); 
     name = name == null ? "" : name.trim(); 
     while(!"desiredName".equals(name)) { 
      System.out.println("Wrong data"); 
      System.out.print("Name: "); 
      String name1 = scanner.nextLine(); 
      name = name1; 
     } 
+2

Ну, вы можете выбросить этот код и просто написать 'String name =" wishName ";' then. – Manu

0

Как и другие заявили, что ваш код будет выйти из цикла, пока однажды есть некоторая непустая строка ввода. Для того, чтобы сделать больше проверок (где есть несколько желаемых входы), пожалуйста, следуйте ниже подхода:

Set<String> desiredSet = new HashSet<String>(Arrays.asList("XYZ", "OSKAR")); 
    System.out.print("Name: "); 
    String name = scanner.nextLine(); 
    name = name == null ? "" : name.trim(); 
    while(name.isEmpty() && !desiredSet.contains(name.toUpperCase())) { 
     System.out.println("Wrong data"); 
     System.out.print("Name: "); 
     name = scanner.nextLine().trim(); 
    } 

Нет необходимости в дополнительных переменной name1

0

Возможно, вторая строка, имя1 больше не пуста.

PS: Вы также должны устранить пробелы или пробелы. тело цикл хотел бы ниже:

System.out.println("Wrong data"); 
System.out.print("Name: "); 
String name1 = scanner.nextLine(); 
name1 = name1 == null ? "" : name1.trim(); 
name = name1; 
0

Вы могли бы начать принимать внутрь петли вместо того, чтобы принять его вне:

String name=""; 
while(true) 
{ 
    System.out.println("Enter the name"); 
    Scanner s=new Scanner(System.in); 
    name=s.nextLine().trim(); 
    if(name.isEmpty()) 
    { 
      System.out.println("Invalid.enter again"); 

     } 
     else 
     break; 
} 
+0

@Tom отредактирован ... Я привык сравнивать целые числа много .. это причина '==' приходит в голову сначала .. –

+0

@Tom .. Это точка .... –

+0

Последнее: 'break' находится в ветке else, вам не нужно' continue' в ветке 'if'. И ваш заголовок цикла while while все равно нуждается в D: D. – Tom

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