自动售货机计划

时间:2013-03-14 15:02:38

标签: java if-statement

我必须创建一个简单的自动售货机程序,如果用户输入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); 
}
}

2 个答案:

答案 0 :(得分:4)

我看到的一个问题出在以下几行:

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

您正在使用赋值运算符(=),您应该使用相等运算符(==)。当你的参数是布尔值时,你真的不需要一个运算符。 if (tokenIN)将评估与if(tokenIN == true)相同,因此该行可以缩短为:

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

注意:由于if(tokenIN = true && ...和{{true的分配,原始语句true始终评估为&& 1}}运算符的短路逻辑。

答案 1 :(得分: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已经计算为布尔值。