Как мне остановить цикл do ... while, чтобы он был бесконечным - PullRequest
0 голосов
/ 04 декабря 2018

У меня есть следующий код, который приводит к бесконечному циклу:

System.out.println("Adjust Invoices");
System.out.println("Would like to Pay an invoice or Add an invoice to your account?");
System.out.println("Press '1' to Pay and '2' to Add");
int invoice = choice.nextInt();
do
{
    if (invoice == 1)
    {
        System.out.println("one");
    }
    if (invoice == 2)
    {
        System.out.println("two");
    }
    else
    {
        System.out.println("Press '1' to Pay and '2' to Add");
    }
} while (invoice >= 3 || invoice <=0);

Как я могу перестать быть бесконечным циклом, когда я ввожу что-то отличное от '1' или '2'?

Ответы [ 3 ]

0 голосов
/ 04 декабря 2018

Вы уверены, что хотите остановить цикл, когда вы вводите что-то отличное от '1' или '2' ?Обычная практика - останавливать этот вид цикла, когда пользователь вводит правильный выбор, в вашем случае 1 или 2, и дать другой вариант, например 0, для выхода.Поэтому до тех пор, пока пользователь не введет 1 или 2, цикл не должен заканчиваться:

Scanner choice = new Scanner(System.in);
System.out.println("Adjust Invoices");
System.out.println("Would like to Pay an invoice or Add an invoice to your account?");

int invoice;

do {
    System.out.println("Press '1' to Pay or '2' to Add, '0' to Exit");
    invoice = choice.nextInt();
    if (invoice == 0) {
        System.out.println("Exiting...");
        break;
    } else if(invoice == 1) {
        System.out.println("one");
        break;
    } else if (invoice == 2) {
        System.out.println("two");
        break;
    } 
} while(invoice < 0 || invoice > 2);
0 голосов
/ 04 декабря 2018

Ну, я полагаю, сначала вам нужно будет поместить

int invoice = choice.nextInt();

в ваш цикл, чтобы избежать этого.Иначе нет смысла использовать цикл.Вы хотите зациклить, если вы введете неправильный ввод, верно?Что ж, это имеет смысл, только если вы позволите пользователю корректировать свой ввод.

Тогда я просто притормозу, как только появится действительный ввод, и напишу подсказку в конце без «else».Кроме того, если вы сломаете в этих точках, вы можете удалить свое состояние.Это будет излишним.Ваша подсказка также является избыточной, поэтому просто вставьте ее перед входом.Итак, что вы получите в итоге:

System.out.println("Adjust Invoices");
    System.out.println("Would like to Pay an invoice or Add an invoice to your account?");

    int invoice;
    do
    {
        System.out.println("Press '1' to Pay and '2' to Add");
        invoice = choice.nextInt();
        if (invoice == 1)
        {
            System.out.println("one");
            break;
        }
        if (invoice == 2)
        {
            System.out.println("two");
            break;
        }
    } while (true);
0 голосов
/ 04 декабря 2018

Чтобы цикл не был бесконечным, вы должны избегать того, чтобы условие оставалось верным, иначе оно не остановится.Если вы хотите остановить цикл после ответа в соответствии с условием, прервите его.

В вашем случае вы можете действовать следующим образом (помните, вы должны выбрать другое значение, если первое не было проверено, поэтому invoice=choice.nextInt() должно быть включено в начало цикла):

do
     {
          invoice = choice.nextInt();
          if(invoice == 1)
          {
                 System.out.println("one");
                 break;
                 //quit the loop after the operation
          }
          else if (invoice == 2)
          {//we add else if because invoice might be either 1 or 2 or another value and not two values at same time.
                System.out.println("two");
                //quit the loop after the operation
          }
         else
         {
                   System.out.println("Press '1' to Pay and '2' to Add");
                   //don't break here because you are just leaving a message to let the user know invoice must be either one or two and if not display the message
          }
    }while(invoice >= 3 || invoice <=0);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...