2016-07-19 5 views
3

私はMancalaゲームプロジェクトに取り組んでいます。場合にはあなたがGUIに興味がある、ここにある:JavaのMancalaゲーム - whileループでint配列を使用

https://s32.postimg.org/hxzmhxt1x/mancala.png

私はコンピュータプレイヤーはそれから石をキャプチャすることができます彼らの店に最も近いピットを選択するようになります方法に取り組んでいます人間のプレーヤー。捕獲は、最後の石が空のピットにピットから直接向かい、もう一方の石に石が付いているときに行われます。私は以下の関連する方法を含めています。パラメータ "theBoard"は、ストアを含むすべてのピットとアレイの各ピットに含まれる石の数を表すint配列です。ここで私はメソッドを持っているコードは、次のとおりです。

public int selectPit(int[] theBoard) { 
     int pitChoice = theBoard.length - 2;   

     while (pitChoice >= theBoard.length/2) { 
      int destinationPit = theBoard[pitChoice] + pitChoice; 
      int opposite = (theBoard.length - 2) - destinationPit; 
      if (theBoard[destinationPit] == 0 && theBoard[opposite] > 0 && destinationPit <= (theBoard.length - 2) && destinationPit > (theBoard.length/2)) { 
       return pitChoice; 
      } else { 
       pitChoice--; 
      } 
     } 
     return this.selectClosestPitWithStones(theBoard); 
    } 

selectClosestPitWithStonesを呼び出す最後の行には、キャプチャを可能にするオプションはありません念のためバックアップメソッドの呼び出しです。このバックアップ方法の機能は、意図したとおりに機能します。しかし、私のselectPitメソッドは、誤った結果や "ArrayIndexOutOfBoundsException:-1"を返し続けます。

このメソッドをテストするために正しく記述されたJUnitテストを使用しています。このようなテストは次のとおりです。

@Test 
    public void testCapturePit0() { 
     this.setUp(); 
     int[] theBoard = {6, 0, 0, 0, 2, 0, 0, 0}; 
     assertEquals(4, this.strategy.selectPit(theBoard)); 
    } 

誤った結果を引き起こす可能性のあるアイデアはありますか?

+1

不正な結果の原因は何ですか?論理エラー。デバッガを使用するか、デバッグ用のSystem.out.println()文を出力します。これはプログラミングの一部です。 – whiskeyspider

+0

あなたはwhileループで配列の境界の外に移動しています。その理由を発見するためには、反復をデバッグする必要があります。このエラーは、関係する値に基づいて完全に実現可能です。あなたのアルゴリズムを慎重に考え、必要に応じて値をSystem.outに出力し、必要な方法でコードを書いてください。それを徹底的にテストしてください。 – ManoDestra

答えて

2

これをデバッグして、変数に期待する値があることを確認します。

現時点での問題は、配列の境界から外れる変数の1つです。配列インデックスは0から長さ-1になることに注意してください。 int destinationPit = theBoard[pitChoice] + pitChoice;int destinationPit = theBoard[pitChoice] + pitChoice;の両方が、配列の入力または状態に応じて範囲外になる可能性があります。

関連する問題