2014-10-27 2 views
0

Всякий раз, когда я запускаю ее, кажется, что цикл для продолжения воспроизведения работает, но результат игры не выводится правильно всякий раз, когда conputerChoose выполняет randomGenerator. Пожалуйста помоги. Я новичок в java, и мы только предполагаем использовать 3 метода - инструкции, playGame и computerChoose. Мы также должны использовать цикл, управляемый пользователем, для продолжения работы. Я не могу понять, что это правильно, и мне еще нужно добавить цикл, чтобы подсчитать количество времени, в которое игра была сыграна, количество выигранных игр и количество раз, когда компьютер выиграл.Я не могу получить мою программу для скалы, бумаги, ножниц, чтобы прочитать правильные результаты.

import java.util.*; 

public class PRS { 

    public static Scanner kbd = new Scanner(System.in); 

    public static void instructions() { 

     System.out.println("\nThis is the popular game of paper, rock, scissors. Enter your" 
       + "\nchoice by typing the word \"paper\", the word \"rock\" or the word" 
       + "\n\"scissors\". The computer will also make a choice from the three" 
       + "\noptions. After you have entered your choice, the winner of the" 
       + "\ngame will be determined according to the following rules:" 
       + "\n\nPaper wraps rock (paper wins)" 
       + "\nRock breaks scissors (rock wins)" 
       + "\nScissors cuts paper (scissors wins)" 
       + "\n\nIf both you and the computer enter the same choice, then the game " 
       + "\nis tied.\n"); 

    } 

    public static int playGame(){ 

     int outcome = 0; 
     System.out.print("Enter your choice: "); 
     kbd = new Scanner(System.in); 
     String player = kbd.nextLine().toLowerCase(); 
     String computerChoice = computerChoose(); 
     System.out.println("\nYou entered: " + player); 
     System.out.println("Computer Chose: " + computerChoose()); 

     if(player.equals(computerChoose())){ 

      outcome = 3; 


     } 

     else if (player.equals("paper") && computerChoice.equals("rock")){ 

      outcome = 1; 

     } 
     else if (computerChoice.equals("paper") && player.equals("rock")){ 

      outcome = 2; 
     } 
     else if (player.equals("rock") && computerChoice.equals("scissors")){ 


      outcome = 1; 


     } 
     else if (computerChoice.equals("rock") && player.equals("scissors")){ 
      outcome = 2; 

     } 

     else if (player.equals("scissors") && computerChoice.equals("paper")){ 

      outcome = 1; 
     } 

     else if (computerChoice.equals("scissors") && player.equals("paper")){ 

      outcome = 2; 
     } 

     else if (player.equals("rock") && computerChoice.equals("paper")){ 

      outcome = 2; 
     } 

     else if (computerChoice.equals("rock") && player.equals("paper")){ 

      outcome = 1; 
     } 
     return outcome; 

    } 


    public static String computerChoose(){ 

     /*return "scissors";*/ 
     Random generator = new Random(); 
     String [] answer = new String [3]; 
     answer [0]= "paper"; 
     answer [1] = "rock"; 
     answer [2] = "scissors"; 
     return answer[generator.nextInt(3)]; 

    } 

    public static void main(String[] args) { 


     kbd = new Scanner(System.in); 

     System.out.println("THE GAME OF PAPER, ROCK, SCISSORS:"); 

     System.out.print("\nDo you need instructions (Y or N)? "); 

     String userPlay = kbd.nextLine(); 

     if (userPlay.equalsIgnoreCase("y")){ 
      instructions(); 
     } 




     String answer; 
     do{ 

      int result = playGame(); 

      System.out.println(result); 
      switch (result){ 
      case 1: 
       System.out.println("YOU WIN!"); 
       break; 
      case 2: 
       System.out.println("Comp WINs!"); 
       break; 
      case 3: 
       System.out.println("IT'S A TIE!"); 
       break; 
      default: 
      } 

      System.out.print("\nPlay again (Y or N)? "); 
      answer = kbd.nextLine(); 

     }while(answer.equalsIgnoreCase("y")); 


    } 


} 

ответ

4

Первое, что вам нужно сделать, это вызвать только computerChoose() один раз. Каждый раз, когда вы вызываете этот метод, он генерирует новое случайное число и, следовательно, другой ответ. Вы должны вызывать его только один раз внутри playGame() и назначать его локальной переменной.

E.g.

String computerChoice = computerChoose(); 

Затем замените все ваши другие вызовы в computerChoose() с этим именем переменной. Таким образом вы увидите одно значение и сравните только одно значение в вашей логике.

Что касается отслеживания другой информации, такой как количество игр и количество выигрышей/потерь, подумайте о объявлении еще нескольких переменных класса (или локальных переменных в основном методе), которые затем можно назначить, увеличить и прочитать , Вы можете сделать все это из цикла do-while в основном методе. Нет необходимости в каких-либо дополнительных циклах.

+0

Большое спасибо. Но я все равно получаю странный ответ, когда я нажимаю «Да», когда его спрашивают, хочу ли я продолжить. он продолжает печатать тот же результат, что и последний, независимо от результата. – mlopman

+0

См. Ответ от @ArmaAK ниже, он взял то, что я пропустил в своем ответе. –

1

В дополнение к ответу Адама изменение цикла do-while в конце следующего будет решить несколько разных проблем.

String answer; 
int winCount=0, lossCount=0, tieCount=0; 
do{ 
    int result = playGame(); 

    switch (result){ 
    case 1: 
     System.out.println("YOU WIN!"); 
     winCount++; 
     break; 
    case 2: 
     System.out.println("Comp WINs!"); 
     lossCount++; 
     break; 
    case 3: 
     System.out.println("IT'S A TIE!"); 
     tieCount++; 
     break; 
    default: 
    } 

    System.out.print("\nPlay again (Y or N)? "); 
    answer = kbd.nextLine(); 

}while(answer.equalsIgnoreCase("y")); 
System.out.printf("Wins: %d, Losses: %d, Total plays: %d%n", winCount, lossCount, winCount+lossCount+tieCount); 

Вам необходимо обновить result внутри время цикла или еще только результаты первой игры будут точными.

+0

Спасибо. ИТ работал в определенной степени. Но по какой-то причине он теперь печатает число до строки результата. Кроме того, второй обойти это, печатает 0, когда я помещаю бумагу. – mlopman

+0

это мой вывод: – mlopman

+0

Извините, это была отладка. Выньте этот оператор печати под вызовом 'playGame()' – ArmaAK