【问题标题】:Vending Machine Program自动售货机程序
【发布时间】:2013-03-14 15:02:38
【问题描述】:

我必须创建一个简单的自动售货机程序,如果用户输入 2 个令牌,他们会得到 1 个罐头。我的代码有点问题 - 如果我输入 1 个令牌并输入“Y”,我会收到消息“谢谢享用您的饮料”,而它确实应该出现错误。

import java.util.Scanner;
/**
 * Vending Machine
 * 
 * @author - 
 * @version 1.0
 */

public class VendingMachine
{

int cans = 10;
int token = 20;

public void fillUp (int cans)
{
    if(cans <= 0)
    {
        cans = cans+=10;            
    }

}

public void tokenIn (int token)
{
    Scanner scan = new Scanner (System.in);
    System.out.println("Do you want something to drink? (Y/N)");

    boolean tokenIN = false;
    if(scan.next().equals("Y"))
    {
        tokenIN = true;
    }
    else
    {
        tokenIN = false;
    } 

    if(tokenIN = true && token >= 2 && cans >=1)
    {
        cans--;
        token-=2;
        System.out.println("Thanks, enjoy your drink!");    
    }
    else
    {
        System.out.println("Goodbye");
    }

}

public void getTokenCount (int token)
{
    System.out.println(token);
}

public void getCansCount (int cans)
{
    System.out.println(cans); 
}
}

【问题讨论】:

    标签: java if-statement


    【解决方案1】:

    我看到的一个问题是在下面一行:

    if(tokenIN = true && token >= 2 && cans >=1)
    

    您正在使用赋值运算符 (=),而应该使用相等运算符 (==)。当您的参数是布尔值时,您根本不需要运算符。 if (tokenIN) 的计算结果与 if(tokenIN == true) 相同,因此该行可以缩短为:

    if(tokenIN && token >= 2 && cans >= 1)
    

    注意:原始语句if(tokenIN = true &amp;&amp; ...始终评估为true,因为分配给true&amp;&amp; 运算符的短路逻辑.

    【讨论】:

      【解决方案2】:

      问题本身:

      if(tokenIN = true && token >= 2 && cans >=1)
      

      应该是:

      if(tokenIN == true && token >= 2 && cans >=1)
      

      如果你想做一个等于运算符。 由于 tokenIN 已经是一个布尔值,你可以这样做:

      if(tokenIN && token >= 2 && cans >=1)
      

      对您的代码的一些其他建议:

      替换: cans = cans+=10;cans += 10;

      在进行equals等操作时,最好总是把常量放在前面,以防止出现异常。 将scan.next().equals("Y") 替换为"Y".equals(scan.next())

      您可以将 if\else 替换为:

      tokenIN = "Y".equals(scan.next());
      

      因为 equals 已经计算为布尔值。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-03-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多