我必须创建一个简单的自动售货机程序,如果用户输入2个令牌,他们得到一个可以。我在代码上遇到了一点麻烦--如果我输入一个令牌并输入'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);
}
}发布于 2013-03-14 23:05:46
我看到的一个问题是下面这行:
if(tokenIN = true && token >= 2 && cans >=1)在应该使用相等运算符(==)的地方使用赋值运算符(=)。当你的参数是布尔值时,你真的不需要运算符。if (tokenIN)的计算结果与if(tokenIN == true)相同,因此这一行可以缩短为:
if(tokenIN && token >= 2 && cans >= 1)注意:原始语句if(tokenIN = true && ...的计算结果始终为true,因为对true的赋值和&&运算符的短路逻辑。
发布于 2013-03-14 23:10:50
问题本身:
if(tokenIN = true && token >= 2 && cans >=1)应该是:
if(tokenIN == true && token >= 2 && cans >=1)如果你想做一个等于运算符。由于tokenIN已经是一个布尔值,您可以这样做:
if(tokenIN && token >= 2 && cans >=1)在执行equals之类的操作时,最好始终将常量放在前面,以防止异常。用"Y".equals(scan.next())替换scan.next().equals("Y")
您可以将if\else替换为:
tokenIN = "Y".equals(scan.next());https://stackoverflow.com/questions/15412799
复制相似问题