Haciendo mi roca, papel, tijeras juego más corto -- java campo con game campo con rock-paper-scissors camp codereview Relacionados El problema

Making my Rock, Paper, Scissors game shorter


3
vote

problema

Español

Estoy buscando consejos sobre cómo hacer que el siguiente código sea más corto. Cualquier ayuda es apreciada.

  public String determineWinner(String winner) {     winner = "";     if (playChoice.equals(compChoice))         winner = "The result is a tie.";     else if (compChoice.equals("R"))     if (playChoice.equals("S") || playChoice.equals("s"))         winner = "Computer wins because Rock beats Scissors.";     else         winner = "Player wins because Paper beats Rock";     else if (compChoice.equals("S"))     if (playChoice.equals("P") || playChoice.equals("p"))         winner = "Computer wins because Scissors beats Paper.";     else         winner = "Player wins because Rock beats Scissors";     else      if (playChoice.equals("R") || playChoice.equals("r"))         winner = "Computer wins because Paper beats Rock.";     else         winner = "Player wins because Scissors beats Paper.";     return winner; }   
Original en ingles

I am looking for advice on making the following code shorter. Any help is appreciated.

public String determineWinner(String winner) {     winner = "";     if (playChoice.equals(compChoice))         winner = "The result is a tie.";     else if (compChoice.equals("R"))     if (playChoice.equals("S") || playChoice.equals("s"))         winner = "Computer wins because Rock beats Scissors.";     else         winner = "Player wins because Paper beats Rock";     else if (compChoice.equals("S"))     if (playChoice.equals("P") || playChoice.equals("p"))         winner = "Computer wins because Scissors beats Paper.";     else         winner = "Player wins because Rock beats Scissors";     else      if (playChoice.equals("R") || playChoice.equals("r"))         winner = "Computer wins because Paper beats Rock.";     else         winner = "Player wins because Scissors beats Paper.";     return winner; } 
        
 
 

Lista de respuestas

2
 
vote

El código parece poco claro desde el punto de vista del uso del parámetro e ignorar la diferencia de casos es caso de "El resultado es un empate", así que ...

Pruebe esto :).

  $0  
 

You code looks unclear from point of view of parameter usage and ignoring case difference is case of "The result is a tie.", so ...

Try this :).

public class testik {     // No throws clause here     public static void main(String[] args) {         // Paper < Rock < Scissors < Paper         System.out.println("Comp:S vs User:R = " + determineWinnerOtherWay("S","R")); //user win         System.out.println("Comp:S vs User:P = " + determineWinnerOtherWay("S","P")); // com win          System.out.println("Comp:P vs User:R = " + determineWinnerOtherWay("P","R")); //com win         System.out.println("Comp:P vs User:S = " + determineWinnerOtherWay("P","S")); // user win          System.out.println("Comp:R vs User:S = " + determineWinnerOtherWay("R","S")); //com win         System.out.println("Comp:R vs User:P = " + determineWinnerOtherWay("R","P")); // user win     }      public static String code2Title(String code){         if ("R".equals(code)) {             return "Rock";         } else if ("P".equals(code)) {             return "Paper";         } else {             return "Scissors";         }     }      public static String determineWinnerOtherWay(String compChoice, String playChoice) {         String winner = "";         String playerChoiceN = playChoice.toUpperCase();         if (playChoice.equals(compChoice))             winner = "The result is a tie.";         int diff = compChoice.charAt(0) - playerChoiceN.charAt(0);         if ( diff == 1 || diff == 2 || diff ==-3) {             winner = "User win bacause:"+code2Title(playerChoiceN)+" wins " + code2Title(compChoice);         } else {             winner = "Computer wins because:"+code2Title(compChoice)+" wins " + code2Title(playerChoiceN);         }         return winner;     }  } 
 
 
   
   
1
 
vote

He escrito esto en C #, pero debería traducir a Java fácilmente.

Hecho $1 Llame a sí mismo, invirtiendo el orden del jugador1 & amp; jugador2. Esto elimina completamente la mitad del laberinto 'si ellos'.

  $2  
 

I've written this in C#, but it should translate to Java easily.

I made determineWinner() call itself, reversing the order of player1 & player2. This eliminates fully half of the 'if else` maze.

// these are class level variables. string winnerNotice = @"{0} wins. {1} beats {2}"; string drawNotice = @"Draw. Both players picked {0}";  // new structures to help clean up the determineWinner() method public class Player {      public string Name;     public choices choice; }  public enum choices {     Paper = 1 , Scissors = 2 , Rock = 4 }          public String determineWinner( Player player1, Player player2 ) {              //tie             if ( player1.choice == player2.choice )                  return string.Format( drawNotice ,player1.choice );              // paper covers rock             if ( player1.choice == choices.Paper && player2.choice == choices.Rock)                  return string.Format(winnerNotice,player1.Name,player1.choice,player2.choice);              // rock beats scissors beats paper             if ( player1.choice > player2.choice )                  return string.Format( winnerNotice ,player1.Name ,player1.choice ,player2.choice );              // player 1 did not win, did player 2 win?             determineWinner(player2, player1);         }     }     } 
 
 
0
 
vote

Considerar:

  $3  

Luego, su función podría parecer:

  $4  

Entonces la implementación depende de usted.

 

Consider:

paper = 2 scissors = 3 rock = 5 

Then your function could look like:

public int determineWinner(int player1, int player2) {     if(player1 != player2)         if(player1 + player2 == 7)             return Math.min(player1, player2);         else             return Math.max(player1, player2);     else         return 0; } 

Then the implementation is up to you.

 
 

Relacionados problema

12  Tijeras de papel de roca en un solo método en Java - ¿Bueno o malo?  ( Rock paper scissors in one single method in java good or bad ) 
Soy nuevo en la programación y he creado un juego de rock, papel, tijeras. Todo el programa está bajo una sola clase y el método principal. Escucho que probab...

4  Simple Rock Paper Tijeras En Erlang  ( Simple rock paper scissors in erlang ) 
Soy muy nuevo en Erlang y estoy específicamente interesado en hacer mi Erlang idiomático (en otras palabras, ¿puede decir que no conozco a Erlang de este códi...

1  Piedra Papel tijeras  ( Rock paper scissors ) 
Gracias por su tiempo, soy nuevo en la programación y pasé algunos días haciendo este rock, papel y amp; Juego de tijera. ¿Qué otras mejoras posibles podrían ...

8  Simple Rock Paper Tijeras en C ++  ( Simple rock paper scissors in c ) 
He hecho un juego de tijeras de papel rock. Funciona bien, pero me gustaría saber cómo puedo mejorarlo más. Node2 ...

7  Mecánica de índice para tijeras de papel de roca  ( Index mechanics for rock paper scissors ) 
Acabo de pasar por un ejemplo en línea muy fácil Creando un juego de tijeras de rock-papel, pero parecía que no era un gran uso del poder de la computación. ...

2  Juego de tijeras de papel Python Rock  ( Python rock paper scissors game ) 
¿Alguna ocasión de personas puede leer mi código de juego y ver si se necesita reformatear o volver a escribir para un mejor código general? Realmente lo apre...

3  Scissors de papel rock c ++ juego  ( Rock paper scissors c game ) 
Acabo de empezar a aprender C ++ y decidí hacer un juego de tijeras de papel rock. Funciona bien, pero me gustaría saber cómo puedo mejorarlo más. En particul...

2  Scissors de papel de rock principiante juego de Python [cerrado]  ( Rock paper scissors beginner python game ) 
cerrado. Esta pregunta es off-topic . Actualmente no está aceptando respuestas. ¿Quieres ...

15  Implementación básica de roca-papel-tijeras  ( Basic rock paper scissors implementation ) 
Decidí intentar realizar una implementación simple de RPS en Java 8, se deben decir las siguientes notas primero: En un punto posterior, debe apoyar a los ...

2  Mi primera prueba de RSPEC - Tijeras de papel de roca  ( My first rspec test rock paper scissors ) 
Soy relativamente familiar para RUBY, pero estoy completamente nuevo para probar el código. He decidido usar RSPEC porque, como parece una opción popular. E...




© 2022 respuesta.top Reservados todos los derechos. Centro de preguntas y respuestas reservados todos los derechos