Java - как получить неопределенный объем ввода от пользователя - PullRequest
1 голос
/ 15 ноября 2010

Java Вопрос:

Я хочу получить неопределенное количество строк ввода от пользователя.Например, я хочу, чтобы пользователь продолжал вводить имена людей в виде строк, пока у пользователя не будет других имен для ввода.Мне нужен удобный способ легко указать, что у пользователя больше нет ввода.Цикл может выглядеть следующим образом.Есть хорошие идеи?Любые советы по улучшению фрагмента кода приветствуются.

 BufferedReader read = new BufferedReader(new InputStreamReader(System.in));     

 while( <user still has more input> ) {
      System.out.println("Enter name: ");
      String s = read.readLine();
      ...
      <do something with s>;
      ...
 }

спасибо!

Ответы [ 3 ]

2 голосов
/ 15 ноября 2010

Вам нужно значение, которое не является именем, но не указывает больше данных. Пустая строка была бы хороша. Вы также хотите запросить, действительно ли они хотят выйти, поэтому в случае, если они случайно нажали кнопку возврата, они не потеряли все свои данные.

name = read.readLine(); 
Pattern p = Pattern.compile("^\\s$"); //empty line or one of just space chareacters
if (p.matcher(name).matches()) {
       System.out.println("Are you done?[y/n]");
       if (Pattern.matches("[yY]", read.readLine()) {
          //quit your loop
       }
}
0 голосов
/ 15 ноября 2010

Вы можете иметь логическую переменную, такую ​​как finished, и проверить, вводит ли пользователь 'Q' или другой элемент, чтобы указать, что они завершены.Если это так, установите finished на true, и вы выйдете из цикла на следующей итерации.

Вот краткий пример:

boolean finished = false;
String name = null;  // initialized to a default value.

System.out.println("Enter 'Q' to quit");
while(!finished) {
System.out.println("Enter name: ");
name = read.readLine();  // moved declaration outside of loop
if(name.equals("Q")) { 
   finished = true;
 }
  // do work with name
}

Я также изменил ваш код aбит,

  • Я добавил пользователю сообщение, чтобы указать, что завершает ввод.
  • Я переименовал вашу переменную s во что-то более значимое, потому что вы сохраняете имя пользователя казалось разумным изменить его на name.
  • В качестве привычки я также инициализировал мои переменные значениями по умолчанию, поэтому я присвоил переменной name значение null.Не совсем необходимо, но я считаю, что это хорошая практика.
  • Поскольку я назначил name значение по умолчанию, я переместил его за пределы вашего цикла.
0 голосов
/ 15 ноября 2010

Простой способ состоит в том, чтобы пользователи вводили пустую строку, когда они сделали. Вы бы просто проверили, если line.equals("") или, возможно, обрежете его раньше.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...