2015-09-30 6 views
1

Я пытаюсь создать цикл while, в котором пользователь имеет в общей сложности три попытки ввести допустимое число. Я не понимаю, как система распознает, что перед отображением сообщения были сделаны 3 недопустимые попытки. Производятся классы, переменные и объекты сканера. После трех попыток я хочу сказать «Больше не пытается». У меня уже есть программа, написанная, чтобы использовать вход пользователя для количества, если он действителен. Это просто, если они вводят три недопустимые попытки.  Пока цикл с итерацией

Updated code: 

int quantity = 0;

 // Get user's desired amount of lemonade cups 
     System.out.print("Hello " + name + ". How many cups of lemonade can I get you? "); 
     quantity = keyboard.nextInt(); // Store amount of cups wanted 

     int attempts = 0; 
     int maxAttempts = 3; 
     double subTotal = quantity * lemonadeCost; 
     double totalTax = subTotal * 0.08; 
     double totalPrice = subTotal + totalTax; 

     while (attempts < maxAttempts) { 
      if (quantity < 1 || quantity >= 20) { 
       System.out.println("That is an invalid amount, please try again"); 
       quantity = keyboard.nextInt(); } 

      else { 
       System.out.println("Subtotal: " + defaultFormat.format(subTotal)); 
       System.out.println("Tax: " + defaultFormat.format(totalTax)); 
       System.out.println("Total: " + defaultFormat.format(totalPrice)); 

      } 
      attempts++; 
       if (attempts >= 3) { 
        System.out.print ("No lemonade for you"); 
        break; 
       } 
      // Ask for user's payment method 
      Scanner method = new Scanner(System.in); 
      System.out.println("How would you like to pay? Enter 'm' for money, 'c' for credit or 'g' for gold. "); 
      String payment = method.nextLine(); 
+0

Спасибо за помощь всем. Я смоделировал свой код после примера CodeRunner. Это казалось самым простым и подходящим для того, что меня просили сделать. Это то, что у меня есть для моего кода, однако он не работает должным образом. После второй недействительной попытки он просто попросит пользователя, как они хотят платить. Если я выберу действительный номер, квитанция будет напечатана без остановок. Кроме того, должен ли метод оплаты быть в инструкции else? –

+0

Итак, я удалил продолжение; и он прекратил печать без остановок. –

ответ

0

dxdy правильно о фигурных скобках, необходимых для изготовления функции петли, а().

После того как петля в то время закончилась (или количество составляет от 1 до 20, или попыток> maxAttempts), вам просто нужно иметь, если заявление вроде следующего:

if (attempts > maxAttempts) { 
    System.out.println("No more tries); 
    return -1; // or something else to break out of your code 
} 

, а затем продолжить с остальная часть вашего кода работает с переменной количества.

0

Вам, кажется, недостает открывающих и закрывающих скобок для петли. Как это, ваш код читает

while (quantity < 1 || quantity >= 20 && attempts <= maxAttempts) 
    System.out.println("That is an invalid amount, please try again"); 
// these below are not part of the loop 
quantity = keyboard.nextInt(); 
attempts++; 

Вместо этого вы должны сделать

while (quantity < 1 || quantity >= 20 && attempts <= maxAttempts){ 
    System.out.println("That is an invalid amount, please try again"); 
    quantity = keyboard.nextInt(); 
    attempts++; 
} 
0

EDIT: Как вы обновили вопрос, так что это было необходимо обновить ответ тоже. Здесь это то, что вы на самом деле хотите.

public static void main(String[] args) { 
    // Get user's desired amount of lemonade cups 
    String name = "Jimmy Nguyen"; 
    Scanner keyboard = new Scanner(System.in); 
    int quantity;// Store amount of cups wanted 
    int lemonadeCost = 4; // Suppose 
    int attempts = 0; 
    int maxAttempts = 3; 
    System.out.print("Hello " + name + ". How many cups of lemonade can I get you? "); 
    while (attempts < maxAttempts) { 

     quantity = keyboard.nextInt(); 
     if (quantity < 1 || quantity >= 20) { 
      System.out.println("That is an invalid amount, please try again\n"); 
      ++attempts; 
     } else { 
      double subTotal = quantity * lemonadeCost; 
      double totalTax = subTotal * 0.08; 
      double totalPrice = subTotal + totalTax; 
      System.out.println("Subtotal: " + subTotal); 
      System.out.println("Tax: " + totalTax); 
      System.out.println("Total: " + totalPrice); 
      // Ask for user's payment method 
      System.out.println("How would you like to pay? Enter 'm' for money, 'c' for credit or 'g' for gold. "); 
      keyboard.nextLine(); 
      String payment = keyboard.nextLine(); 
      break; 
     } 

     if (attempts >= 3) { 
      System.out.print("No lemonade for you"); 
      break; 
     } 
    } 
} 
+0

Эй! Я очистил свой код с вашей помощью. Я смог успешно запустить вашу программу, но столкнулся с трудностями при попытке добавить ее в свою. Если у вас есть еще одна минута, чтобы взглянуть, я бы очень признателен. –

+0

Поместите весь вышеуказанный код в основной метод. Привет! Что это за проблема? – CodeRunner

+0

Проблема в том, что мой код не дождался трех недопустимых попыток перед отображением сообщения. Кроме того, отображается неверное сообщение. Он прямо говорит о том, как пользователь хотел бы заплатить. –

0

попробовать этот код:

 //start with 1 since the user will attempt it at least one time. 
     int attempts = 1; 

     int maxAttempts = 3; 

     int quantity=0; 

     Scanner keyboard = new Scanner(System.in); 

     //LESS THAN OR EQUAL TO 3... 
     while(attempts<=maxAttempts){ 

      System.out.print("Enter amount: "); 

      quantity = keyboard.nextInt(); 

      //check if valid 

      if(quantity < 1 || quantity >= 20){ 


       //check if it's 1st and 2nd trial. 
       if(attempts<maxAttempts){ 

        System.out.println("That is an invalid amount, please try again"); 

       }else{ 
        //third trial and still invalid 
        System.out.print("No more tries"); 

       } 

      }else{ 

       //user entered a valid amount so let's break the loops. 
       System.out.println("The amount is valid. Value of amount: "+ quantity); 
       break; 
      } 
      //increment attempts 
      attempts++; 
     } 

     //never forget to close the scanner 
     keyboard.close(); 
    } 
} 

Хотя я мог превратить это в методы, если это разрешено

+0

Да. Мой инструктор не хочет, чтобы мы еще включили методы. Это действительно помогает, спасибо. Двойная стадия if и else нова для меня. Я обычно думал, что другое утверждение должно упасть после if. Не знал, что мы можем поставить double ifs и double else. –

+0

Вы можете иметь оператор if внутри другого оператора if. Он называется «вложенным if». Вы можете узнать больше об этом здесь (https://www.cs.umd.edu/~clin/MoreJava/ControlFlow/nested-if.html) – triForce420

+0

Надеюсь, вы нажмете галочку, если я ответил на ваш вопрос ... – triForce420

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