2013-03-14 71 views
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

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

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

您使用赋值运算符(=),您应该使用等号(==)。当你的参数是布尔值时,你根本不需要运算符。 if (tokenIN)将评估一样if(tokenIN == true),所以该行可以缩短为:

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

注:原来的语句if(tokenIN = true && ...总是评估为true因为分配给true&&运营商短期的电路逻辑。

+0

哦好吧愚蠢的错误,非常感谢! – user1554786 2013-03-14 15:18:31

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;

这是更好地始终把常数在进行诸如平等等操作以防止异常时, 更换scan.next().equals("Y")"Y".equals(scan.next())

,你可以直接用替换你如果\其他:

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

既然已经等于计算结果为布尔。