Цикл Do-While, введенный пользователем, не зацикливается - PullRequest
0 голосов
/ 30 августа 2018
int ID;

Scanner scan = new Scanner(System.in);
ID = Integer.parseInt(scan.nextLine());

do{
   System.out.println("Improper EMPID, please reenter your EMPID.\n");
   Scanner scan1 = new Scanner(System.in);
   ID = Integer.parseInt(scan1.nextLine());
}
while (ID > 999999 && ID < 10000000);

return ID;

Это функция в моем основном коде, где я пытаюсь заставить пользователя ввести семизначный идентификатор.
Предполагается, что будет проходить бесконечно, пока пользователь не введет семь цифр , однако будет проходить только один раз, а затем завершится.

Я также сделал это с помощью цикла while с теми же результатами. Что-то, чего я здесь не вижу?

  Scanner scan = new Scanner(System.in);
  int id = Integer.parseInt(scan.nextLine());

  while (id >= 10000000 || id <= 999999);{
     System.out.println("Please enter your EMPID\n");
     id = Integer.parseInt(scan.nextLine());
  }


  return id;

Мой код теперь выглядит следующим образом.

Он будет постоянно зацикливаться, не показывая отпечаток.

Ответы [ 3 ]

0 голосов
/ 30 августа 2018

Вы должны продолжить цикл, когда ввод неверен:

while (ID <= 999999 || ID >= 10000000);

Не относится к вопросу, но, пожалуйста, назовите переменные регистром верблюда и удалите ненужный код:

Scanner scan = new Scanner(System.in);
int id = Integer.parseInt(scan.nextLine());

while (id <= 999999 || id >= 10000000) {
    System.out.println("Improper EMPID, please reenter your EMPID.\n");
    id = Integer.parseInt(scan.nextLine());
}
0 голосов
/ 30 августа 2018

эта логика будет лучше с циклом while, так как вы сначала запрашиваете у пользователя значение и хотите дать ему сообщение об ошибке, только если оно неверно

например

 Scanner scan = new Scanner(System.in);
 int ID = Integer.parseInt(scan.nextLine());
 while (!ID || ID <= 999999 || ID >= 10000000) {
    System.out.println("Improper EMPID, please reenter your EMPID.\n");
    ID = Integer.parseInt(scan1.nextLine());
}
0 голосов
/ 30 августа 2018

Вы не проверяете длину ввода, вы проверяете реальное значение. Вы можете использовать int length = String.valueOf(ID).lenght();, чтобы получить длину значения int.
Просто подсказка: не создавайте новые сканеры каждый раз, вы запутаете себя. Один просто отлично.

...