2017-02-06 4 views
-1

Так что я пытаюсь создать приложение для рок/бумаги/ножниц, но у меня проблема. В приведенном ниже коде «Random r» выбирает номер 1-3 и присваивает его R/P/S. Эта часть работает, но код скоринга или тоста в моей инструкции switch не работает. Целое число рядом с «случаем» должно быть правильным правилом выбора? Если кто-то найдет мою проблему, я был бы признателен.Могу ли я использовать рандомизированные числа для оператора 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-): "Возвращает псевдослучайное, равномерно распределенное значение int между 0 (включительно) и заданным значением (эксклюзивным) ". => Это означает, что вы получаете значения 0, 1 или 2 ... а не 1, 2 или 3! – Seelenvirtuose

+0

Да, и Android Studio не имеет к этому никакого отношения. – EJP

ответ

0

Как @Seelenvirtuose сказал, что вы nextInt() будет генерировать значение между 0-2, но не 1-3 (предполагается, что отправка 3 в качестве параметра для метода nextInt()).

Таким образом, чтобы генерировать значение точно между 1-3, вы можете попробовать под кодом.

int minimum = 1; 
int maximum = 4; 

Random random = new Random(); 

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

Чтобы узнать больше о генерации случайного числа между указанным диапазоном вы посещаете here

0

Я понял это! Счет не работал, потому что каждый раз, когда был вызван метод, счетчик сбрасывался до 0, поэтому я поменял его до конца метода и удалил нули. Для тостов, я должен был добавить .show() в конце примерно так:

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

Спасибо за предложения всех! Случайный работал 1-3 для меня, но я изменил его на 0-2, чтобы быть технически правильным.

Смежные вопросы