2013-03-18 3 views
0

Проблема с моими петлями при вводе напитков, таких как вода, чай, сода.Java Vender Loop Beginner

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

import java.util.Scanner; 


    public class Vending 
    { 

    public static void main(String[] args) 
    { 


     System.out.print("Enter a command = "); 

     double balance = 0.0; 
     String a; 


    // scanner input 
    Scanner in = new Scanner(System.in); 

    while (in.hasNext()) 
    { 
     String command = in.nextLine(); 
     if (command.equals("penny")) 
     { 
      balance = balance + 0.01; 
      System.out.println("balance = " + balance); 
     } 
     if (command.equals("nickel")) 
     { 
      balance = balance + 0.05; 
      System.out.println("balance = " + balance); 
     } 
     if (command.equals("dime")) 
      { 
      balance = balance + 0.10; 
      System.out.println("balance = " + balance); 
     } 
     if (command.equals("quarter")) 
      { 
      balance = balance + 0.25; 
      System.out.println("balance = " + balance); 
     } 
     if (command.equals("dollar")) 
      { 
      balance = balance + 1.00; 
      System.out.println("balance = " + balance); 
     } 

     else if (command.equals("break")) 
     { 
      break; 
     } 

     else if (command.equals("water")) 
     { 
      System.out.println("Water"); 
      System.out.println("balance = " + balance - 1.25); 
     } 
     else if (command.equals("tea")) 
     { 
      System.out.println("Tea"); 
      System.out.println("balance = " + balance - 1.50); 
     } 
     else if (command.equals("soda")) 
     { 
      System.out.println("soda"); 
      System.out.println("balance = " + balance - 1.75); 
     } 
     else 
     { 
      System.out.println("return " + balance + " to customer"); 
     } 

     balance++; 
    } 

} 
} 

ответ

0

Это происходит потому, что вы не начнете использовать else if сразу. Вы должны использовать это после первого использования if.

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

Например, если вы введете dime, он добавит 0.10, а затем отметит квартал, а затем доллар. Затем он входит в блок else if. Затем он проверяет наличие разрыва, воды, чая и т. Д., А затем обнаруживает, что все ложные (вы помещаете в копейку), а затем удаляет другой блок, распечатывающий баланс.

Чтобы исправить это, вы должны использовать отдельные методы для проверки денежной стоимости или предмета.

0

в Java 7 переключателя поддержки оператора значения «String», попробуйте изменить свой код так:

String command = in.nextLine(); 
switch(command) { 
    case "penny": 
      //do something 
      break; 
    case "water": 
      //do something 
      break; 
    case "tea": 
      //do something 
      break; 
    case "soda": 
      //do something 
      break; 
    default: 
      System.out.println("return " + balance + " to customer"); 
} 
balance++; 

Надеется, что это поможет вашему вопросу.

+0

Да, я рекомендовал бы это тоже, если вы используете Java 7. Но есть еще и другие ошибки в коде Op в. – Breavyn

0

Хорошо, я могу видеть несколько вопросов здесь

  1. вместо in.nextLine(), а использовать in.next(), это будет читать вход на первый «введите»
  2. если вы хотите, чтобы распечатка возврата была напечатана в конце, выведите ее из цикла так, чтобы как только пользователь закончил, введя «break», он затем распечатает бит возврата.
  3. Вы никогда не уменьшаете баланс с ценой предмета ... Вместо баланса ++ ;. Измените его на баланс - = цена; (Баланс = баланс - цена;)

    while (in.hasNext()) { 
        String command = in.next(); 
           double price = 0.0; 
           ... 
           ... 
        else if (command.equals("water")) { 
         System.out.println("Water"); 
         price = 1.25; 
        } else if (command.equals("tea")) { 
         System.out.println("Tea"); 
         price = 1.50; 
        } else if (command.equals("soda")) { 
         System.out.println("soda"); 
         price =1.75; 
        } 
    
        balance -= price; 
           System.out.println("balance is " + balance); 
    } 
    System.out.println("return " + balance + " to customer");