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

私が目にする問題の1つは、次の行にあります。

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());

等しいので、すでにブール値に評価されます。

于 2013-03-14T15:10:50.133 に答える