2016-10-31 4 views
-1

Я пытаюсь сделать цикл завершающим после того, как компьютер или игрок выиграют 5 игр. Я пытался сделать это с циклом for, но это не останавливается вообще. Я попытался отладить и понять, но я потерян. Можете ли вы, пожалуйста, помочь мне выяснить, где я ошибся? Любые предложения по повышению эффективности кода будут очень оценены.Почему моя петля не работает так, как я ее хочу?

import java.util.Scanner; 
import java.util.Random; 

public class RockPaperScissor { 
    public static void main (String [] args){ 
    System.out.println("Lets play Rock, Paper, Scissors!"); 
    Scanner scanner = new Scanner(System.in); 

    int computerwins=0; 
    int playerwins=0; 


    Random random = new Random(); 
     for (int totalGame = 0; playerwins<=5 || computerwins<=5; ++totalGame){ 

      int gamenumber = totalGame + 1; 
      System.out.print("Game " + gamenumber + ". " + "Pick one! 1 = Rock, 2 = Paper, 3 = Scissor : "); 
      int input = scanner.nextInt(); 

      Random rand = new Random(); 
      int computerResponse = rand.nextInt(3) + 1; 
      String compResponse = "something"; 
      switch (computerResponse) { 
       case 1: compResponse = "Rock"; 
        break; 
       case 2: compResponse = "Paper"; 
        break; 
       case 3: compResponse = "Scissor"; 
        break; } 
      String you = "something"; 
      switch (input) { 
       case 1: you = "Rock"; 
        break; 
       case 2: you = "Paper"; 
        break; 
       case 3: you = "Scissor"; 
        break; 
      } 
      System.out.println("You: " + you + ", Computer: " + compResponse); 

      if(input == computerResponse) { 
       System.out.println("It's a tie!"); } 
      else if (input == 1) { 
       if (computerResponse == 2) { 
        System.out.println("Paper eats rock. You lose!"); 
        ++computerwins; } 
       else if (computerResponse == 3) { 
        System.out.println("Rock crushes scissors. You win!"); 
        ++playerwins; } } 
      else if (input == 2) { 
       if (computerResponse == 1) { 
        System.out.println("Paper eats rock. You win!"); 
        ++playerwins; } 
       else if (computerResponse == 3) { 
        System.out.println("Scissor cuts paper. You lose!"); 
        ++computerwins; } } 
      else if (input ==3) { 
       if (computerResponse == 1) { 
        System.out.println("Rock crushes scissors. You lose!"); 
        ++computerwins; } 
       else if (computerResponse == 2) { 
        System.out.println("Scissor cuts paper. You win!"); 
        ++playerwins; } } 

      System.out.println("Score Now: You = " + playerwins + ", Computer = " + computerwins); 
      System.out.println(" "); } 
     if (playerwins == computerwins) { 
      System.out.println("Aww! It's a tie."); } 
     if (playerwins < computerwins) { 
      System.out.println("Aww! You lost!"); } 
     if (playerwins > computerwins) { 
      System.out.println("Yay! You won!");} 
     } } 

спасибо !!

+0

Вы хотите '&&' вместо '||' в вашем состоянии цикла. В противном случае он будет продолжаться до тех пор, пока у ОБОИХ игроков не будет 6 побед. Кроме того, я думаю, вы хотите '<' вместо '<='. Итак, 'playerwins <5 && computerwins <5' –

+0

Ваше условие' playerwins <= 5 || computerwins <= 5' будет только ложным один раз * обе * стороны имеют более 5 побед. Если вы хотите, чтобы он был либо, либо изменил его на 'playerwins <= 5 && computerwins <= 5'. – shmosel

+0

@DavidWallace Знаете ли вы дублирующий вопрос, который охватывает это? Поскольку такой вопрос возникает довольно часто, было бы лучше закрыть их как обман, а не повторять это снова и снова. – Tom

ответ

0

В вашем для контура терминации состояния

playerwins<=5 || computerwins<=5 

Это продолжается до тех пор, пока условие ЯВНО верно. Вы хотите изменить его на &&, чтобы продолжить, пока одно условие не станет ложным.

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