我必须创建一个简单的自动售货机程序,如果用户输入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);
}
}
答案 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已经计算为布尔值。