Java Vender Loop初学者

时间:2013-03-18 07:30:03

标签: java

当我输入饮料时,我的循环出现问题,例如水,茶,苏打水

此外,我不希望它在用户输入饮料选项之前打印返回,但每次都会显示。

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

 }
}

3 个答案:

答案 0 :(得分:0)

这种情况正在发生,因为您没有立即开始使用 else if 。您应该在首次使用 if 后使用此功能。

它从第一个if开始,检查它,然后移动到下一个if。当您到达检查dollar的部分时,如果dollar为假,则只检查其他部分。这是因为它们是else if

因此,如果您输入dime,它将添加0.10,然后检查季度,然后是美元。然后它进入else if块。然后它检查休息,水,茶等,然后发现所有都是假的。(你放入一角钱)然后点击打印余额的else块。

因此,为了解决这个问题,您应该使用单独的方法来检查货币价值或物品。

答案 1 :(得分:0)

在Java 7中的switch语句支持“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++;

希望这有助于解决您的问题。

答案 2 :(得分: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");