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>;
      ...
 }

спасибо!


person well actually    schedule 15.11.2010    source источник


Ответы (3)


Вы можете иметь логическую переменную, такую ​​как 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
}

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

  • Я добавил сообщение пользователю, чтобы указать, что завершает ввод.
  • Я переименовал вашу переменную s во что-то более осмысленное, поскольку вы сохраняете имя пользователя, и мне показалось разумным изменить его на name.
  • По привычке я также инициализировал свои переменные значениями по умолчанию, поэтому я присвоил переменной name значение null. Не совсем необходимо, но я считаю это хорошей практикой.
  • Поскольку я присвоил name значение по умолчанию, я переместил его за пределы вашего цикла.
person Anthony Forloney    schedule 15.11.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
       }
}
person Paul Rubel    schedule 15.11.2010

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

person icyrock.com    schedule 15.11.2010