0

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

2 回答 2

4

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

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

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

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

注意:由于赋值和运算符的短路逻辑,原始语句if(tokenIN = true && ...始终计算为。truetrue&&

于 2013-03-14T15:05:46.197 回答
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 已经计算为布尔值。

于 2013-03-14T15:10:50.133 回答