0

当我输入水、茶、苏打水等饮料时,循环出现问题。

另外,我不希望它在用户输入饮料选择之前打印退货,但每次都会出现这种情况。

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

 }
}
4

3 回答 3

0

发生这种情况是因为您没有立即开始使用else if。您应该在第一次使用if.

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

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

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

于 2013-03-18T07:34:35.500 回答
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");
    
于 2013-03-18T08:20:43.133 回答
0

在 Java 7 switch 语句支持“字符串”值,尝试改变你的代码是这样的:

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

希望这对您的问题有所帮助。

于 2013-03-18T07:49:08.723 回答