2017-02-06 15 views
-1

ロック/ペーパー/はさみアプリを作成しようとしていますが、問題が発生しています。以下のコードでは、「ランダムr」は1〜3の番号を選択し、R/P/Sに割り当てます。その部分はうまくいきますが、私のswitch文のスコアやトーストコードはそうではありません。 "case"の横にある整数は正しい選択値でなければなりません。誰かが私の問題を見つけることができれば、私はそれを感謝します。switch文にランダム化された数値を使用できますか?

public void decide(){ 
     int playerTotal = 0; 
     int computerTotal = 0; 

     TextView pTotal = (TextView)findViewById(R.id.playerTotal); 
     TextView cTotal = (TextView)findViewById(R.id.compTotal); 

     pTotal.setText(Integer.toString(playerTotal)); 
     cTotal.setText(Integer.toString(computerTotal)); 

     int cpu = r.nextInt(3); //Randomizer will choose 1-3 
     if(cpu == 1) { 
      cpuChoice = "rock"; 
      imgCpu.setImageResource(R.drawable.rock); 
     } 
     else if(cpu == 2){ 
      cpuChoice = "paper"; 
      imgCpu.setImageResource(R.drawable.paper); 
     } 
     else if(cpu == 3){ 
      cpuChoice = "scissors"; 
      imgCpu.setImageResource(R.drawable.scissors); 
     } 
     String winOrLose = ""; 

      switch (cpu){ 
       case 1: 
        if(myChoice == "rock") { 
         winOrLose = "Stalemate!"; 
        } 
        if(myChoice == "paper") { 
         winOrLose ="paper beats rock! You won this round!"; 
         playerTotal++; 
        } 
        if(myChoice == "scissors") { 
         winOrLose = "rock beats paper! You lost this round!"; 
         computerTotal++; 
        } 
        Toast.makeText(MainActivity.this,winOrLose, Toast.LENGTH_SHORT); 
        break; 
       case 2: 
        if(myChoice == "rock") { 
         winOrLose = "paper beats rock! You lost this round!"; 
         computerTotal++; 
        } 
        if(myChoice == "paper") { 
         winOrLose = "Stalemate!"; 
        } 
        if(myChoice == "scissors") { 
         winOrLose = "scissors beats paper! You won this round!"; 
         playerTotal++; 
        } 
        Toast.makeText(MainActivity.this,winOrLose, Toast.LENGTH_SHORT); 
        break; 
       case 3: 
        if(myChoice == "rock") { 
         winOrLose = "rock beats scissors! You won this round!"; 
         playerTotal++; 
        } 
        if(myChoice == "paper") { 
         winOrLose = "scissors beats paper! You lost this round!"; 
         computerTotal++; 
        } 
        if(myChoice == "scissors") { 
         winOrLose = "Stalemate!"; 
        } 
        Toast.makeText(MainActivity.this,winOrLose, Toast.LENGTH_SHORT); 
        break; 

      } 
      } 
+0

私はこのコードに何の問題も見当たりません。どのような問題が発生しているのでしょうか? –

+0

['Random.nextInt(int)'](https://docs.oracle.com/javase/8/docs/api/java/util/Random.html#nextInt-int-): "一様に擬似乱数を返します0(両端を含む)と指定された値(排他的)の間のint値を分散します。 =>つまり、1,2,3の値ではなく0,1,2の値を取得します。 – Seelenvirtuose

+0

はい、Android Studioとまったく関係ありません。 – EJP

答えて

0

@SeelenvirtuoseはnextInt()は(あなたがnextInt()メソッドのパラメータとして3を送信すると仮定した場合)0-2ではなく1-3の間の値を生成しますあなたに言ったように。

したがって、正確に1-3の値を生成するには、以下のコードを試してみてください。 here

0

が、私はそれを考え出した

int minimum = 1; 
int maximum = 4; 

Random random = new Random(); 

int randomValue = random.nextInt(maximum - minimum) + minimum; 

は、あなたが訪問し、指定された範囲の間の乱数を生成についての詳細を知るために!メソッドが呼び出されるたびに得点が0にリセットされるので、スコアリングは機能しませんでした。そのため、メソッドの最後にスワップしてゼロを消去しました。乾杯のために、最後に.show()を追加する必要がありました。

Toast.makeText(MainActivity.this,winOrLose, Toast.LENGTH_SHORT).show(); 

おかげさまで、ありがとうございました!私のためにランダムに1-3を働かせましたが、私はそれを技術的に正しいように0-2に変更しました。

関連する問題