0

私の割り当て:

Stixのゲームは、以前「Survivor、Thailand」でプレイされたゲームに似ていますが、簡略化されたバージョンでは、次のようになります。

2人のプレイヤーがプレイします(Survivorでは2人以上でしたが、ここでは2人だけを扱います)。いくつかのスティック(マッチのような)がテーブルに置かれます。最初のプレーヤーは、テーブルにその数があれば、1、2、または3本のスティックを奪います。次に、2番目のプレーヤーが1、2、または3本のスティックを(可能であれば)取り去ります。最後のスティックを取る人は誰でも負けます。

これは私のクラスです:

    public class StixBoard
    {
        public int number;

        public StixBoard(int number)
        {
        number = number;
        }

        public int getNumStix()
        {
        return number;
        }

        public boolean takeStix(int number)
        {
            int take = 1;
            while(take <= getNumStix())
            {
            takeStix(take);
            take++;
            }

            if(number >= 1 && number <= 3)
            {
            number = number - this.number;
                System.out.println("Number of sticks on board:" + number);
            return(true);
            }
        else
        System.out.println("Illegeal Move");
        return(false);
        }

        public boolean isGameOver()
        {
            if(number >=1)
            {
            return(true);
            }
            else
            return false;
        }

            public String toString()
        {
            return(getNumStix() + " Stix Remaining.");
        }
    }

This is my tester:

    public class StixGame
    {

        public static void main(String[] args)
        {

        StixBoard game1 = new StixBoard(6);
        System.out.println(game1.getNumStix());


        }

    }

Can someone tell my why game1 only returns 0?

*UPDATE*
Now that it constantly displays:

    6
    Illegeal Move
    false
    6

I've been playing around with it but can't figure out why =/

Program now looks like this:

public class StixBoard
{
    public int number;

    public StixBoard(int number)
    {
    this.number = number;
    }

    public int getNumStix()
    {
    return number;
    }

    public boolean takeStix(int number)
    {
        int take = 0;

        while(take != number && number <= 3 && number > 0)
        {
        number = this.number - take;
        take++;
        }

        if(this.number >= 1 && this.number <= 3)
        {
        number = number - this.number;
            System.out.println("Number of sticks on board:" + number);
        return(true);
        }
    else
    System.out.println("Illegeal Move");
    return(false);
    }

    public boolean isGameOver()
    {
        if(number >=1)
        {
        return(true);
        }
        else
        return false;
    }

        public String toString()
    {
        return(getNumStix() + " Stix Remaining.");
    }
}

そしてこれは私のテスターです:

public class StixGame
{

    public static void main(String[] args)
    {

    StixBoard game1 = new StixBoard(6);
    System.out.println(game1.getNumStix());
    System.out.println(game1.takeStix(3));
    System.out.println(game1.getNumStix());
    }

}
4

4 に答える 4

6

コンストラクターで使用する場合number = number、実際には入力からの変数を使用するため、基本的にはそれ自体にリセットされます。その後、コンストラクターが終了すると、スコープから外れるため、変数が消えます。代わりに行う必要があるのは、関数パラメーターの名前を変更するか、を使用することthis.number = numberです。

于 2012-12-07T21:06:25.513 に答える
0

クラスを次のように初期化する必要があります。

public StixBoard(int number)
{
this.number = number;
}

コンストラクター内の変数に同じ名前を使用しない

于 2012-12-07T21:08:52.887 に答える
0

コンストラクターはnumberパラメーターをそれ自体に設定します。

public StixBoard(int number)
{
number = number;
}

そして、のデフォルト値のthis.numberまま0です。this.名前の衝突を避けるために、プレフィックスを使用してパラメーター値をインスタンス変数に割り当てる必要があります。

this.number = number;
于 2012-12-07T21:09:30.470 に答える
0

問題はあなたのコンストラクタです:

public StixBoard(int number) {
    number = number;
}

と置換する:

public StixBoard(int number) {
    this.number = number;
}

ご覧のとおり、パラメーター番号はフィールド番号を隠しています。したがって、割り当ては、クラス フィールドではなく、パラメーター番号自体に割り当てられます。シャドウイングを削除するには、キーワードthisを使用して、現在のスレッドで実行されているオブジェクト フィールドを参照する必要があります。

于 2012-12-07T21:10:31.550 に答える