2017-06-05 10 views
-2

私は初心者のために申し訳ありません。私は簡単なことを見落としていると確信していますが、以前のトピックで解決策を見つけることができませんでした。getterは常に0を返します

私はオブジェクト "computerDraw"を構築しようとしています。新しい "computerDraw"を作成するときに、コンピュータがint配列の1,2,3のいずれかの数字を引き出すかどうかを判断させたいと思う。数字はランダムに引き出されます。

描画される数値は、変数 "computerSumCards"に格納する必要があります。

私はcomputerSumCardsを返すためにゲッターを作成しましたが、毎回 "0"を返します。

私はその理由を理解できません。助けてくれてありがとう!この時点で、あなたは常にcomputerSumCards += randomCard;後0

を割り当てる

public class computerDraw { 
    int computerSumCards; 
    int getAmountOfComputerCards; 
    int randomCard; 
    int draws = 0; 

    private int[] possibleDraws = {1, 2, 3}; 
    int computerCanDraw = (possibleDraws[new Random().nextInt(possibleDraws.length)]); 

    public void drawLoop() { 
      while (draws < computerCanDraw) { 
        int[] cards = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 10, 10, 10}; 
        randomCard = (cards[new Random().nextInt(cards.length)]); 
        computerSumCards += randomCard; 

      } 
    } 

    public int getComputerSumCards() { 
      return computerSumCards; 
    } 

    public int getAmountOfComputerCards() { 
      getAmountOfComputerCards = draws; 
      return getAmountOfComputerCards; 
    } 
} 
+0

'drawLoop()'を呼び出しましたか? – Guy

+0

@Guy:いいえ、私はエラーを受け取りましたが、(別のトピックでは)クラス本体のル​​ープ中に直接設定できないことがわかりました。私はまだそれを理解しようとしています。それはこの質問に関連していますか?私は別の問題があると思った。 – BjornsBot

+0

私はこの質問がなぜ下降音を得ているのか不思議です。私は事前に研究を行い、統合/再コンパイルして実行しようとしました。私がやっていること/間違ったことを尋ねるなら、将来の質問をするときには避けることができるので、説明してください。ありがとう。 – BjornsBot

答えて

1

クラスはwhileループを「無視」しません。ループはメソッドdrawLoop()の内部にあります。実行したい場合は、明示的に呼び出す必要があります

computerDraw draw = new computerDraw(); 
draw.drawLoop(); 

補足として、クラス名は後で大文字で始まります。 computerDrawComputerDrawである必要があります。

+0

draw.drawLoop()を呼び出します。私のために働いた、私はそれを忘れてしまった!ありがとう!また、命名のヒント - 初心者の間違いのおかげで:-) – BjornsBot

2

あなたはどこにでもdraws値を変更しない、getAmountOfComputerCards = draws;draws++;を追加し、それは問題ないはずです。それがなければ無限ループになります。

+0

アドバイスをいただき、ありがとうございました。しかし、問題はgetter "getComputerSumCards()"は0でなくてもいいということです。それがどうして起こるのか? – BjornsBot

+0

@BjornsBot私が言及したコードに最初に 'drawLoop()'メソッドを呼び出し、そのゲッターの後に、うまくいきます。 –

+0

は、drawLoop()メソッドを呼び出すことによって、この問題を解決しました。 – BjornsBot

0

また、私はまだ新しいですが、これを試してみてください。

public int drawLoop() { 
     while (draws < computerCanDraw) { 
       int[] cards = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 10, 10, 10}; 
       randomCard = (cards[new Random().nextInt(cards.length)]); 
       computerSumCards += randomCard; 

     } 
     return computerSumCards; 
} 

public int getComputerSumCards() { 
     return drawLoop(); 
} 
0

あなたはdraw.drawLoop()を呼び出す必要があります。 whileループを呼んでも無限ループに入ります。描画とcomputerCanDrawの値は変更されず、描画は常に<のcomputerCanDraw値のままです。描画値を変更するか、またはcomputerCanDrawを適切に実装する必要があります。

関連する問題