How to “Rock Paper Scissors” in Java

The challenge

Let’s play Rock Paper Scissors! You have to return which player won! In case of a draw return Draw!.

Examples:

rps('scissors','paper') // Player 1 won! rps('scissors','rock') // Player 2 won! rps('paper','paper') // Draw!
Code language: Java (java)

The rules of the game Rock Paper Scissors

The rules of the game Rock Paper Scissors is quite simple.

Rock beats scissors, scissors beats paper, and paper beats rock.

Below is an illustration showing the cyclical routes.

rockpaperscissors

Test cases

import static org.junit.Assert.*; import org.junit.Test; public class RPSTest { @Test public void test1() { System.out.println("Fixed Tests Player 1 won!"); assertEquals("Player 1 won!", RPS.rps("rock", "scissors")); assertEquals("Player 1 won!", RPS.rps("scissors", "paper")); assertEquals("Player 1 won!", RPS.rps("paper", "rock")); } @Test public void test2() { System.out.println("Fixed Tests Player 2 won!"); assertEquals("Player 2 won!", RPS.rps("scissors", "rock")); assertEquals("Player 2 won!", RPS.rps("paper", "scissors")); assertEquals("Player 2 won!", RPS.rps("rock", "paper")); } @Test public void test3() { System.out.println("Fixed Tests Draw!"); assertEquals("Draw!", RPS.rps("scissors", "scissors")); assertEquals("Draw!", RPS.rps("paper", "paper")); assertEquals("Draw!", RPS.rps("rock", "rock")); } }
Code language: Java (java)

The solution in Java

Option 1 (the long way):

public class RPS { public static String rps(String p1, String p2) { // create some Strings to return String p1w = "Player 1 won!"; String p2w = "Player 2 won!"; String d = "Draw!"; // return the draws if (p1.equals("rock") && p2.equals("rock")) return d; if (p1.equals("paper") && p2.equals("paper")) return d; if (p1.equals("scissors") && p2.equals("scissors")) return d; // return the rock vs if (p1.equals("rock") && p2.equals("paper")) return p2w; if (p1.equals("rock") && p2.equals("scissors")) return p1w; // return the paper vs if (p1.equals("paper") && p2.equals("rock")) return p1w; if (p1.equals("paper") && p2.equals("scissors")) return p2w; // return the scissors vs if (p1.equals("scissors") && p2.equals("rock")) return p2w; if (p1.equals("scissors") && p2.equals("paper")) return p1w; // finally return null if all else failed return null; } }
Code language: Java (java)

Option 2 (quicker):

public class RPS { public static String rps(String p1, String p2) { if(p1 == p2) return "Draw!"; int p = (p1 + p2).equals("scissorspaper") || (p1 + p2).equals("rockscissors") || (p1 + p2).equals("paperrock") ? 1 : 2; return "Player " + p + " won!"; } }
Code language: Java (java)

Option 3 (in a ternary):

public class RPS { public static String rps(String p1, String p2) { return p1.equals(p2) ? "Draw!" : "Player " + ("scissorspaper paperrock rockscissors".contains(p1+p2)?1:2) + " won!"; } }
Code language: Java (java)

Option 4 (with a HashMap):

import java.util.HashMap; import java.util.Map; public class RPS { public static String rps(String p1, String p2) { if (p1.equals(p2)) return "Draw!"; Map<String, String> game = new HashMap<>(); game.put("scissors", "paper"); game.put("paper", "rock"); game.put("rock", "scissors"); String result = game.get(p1); if (result.equals(p2)) return "Player 1 won!"; else return "Player 2 won!"; } }
Code language: Java (java)

Option 5 (checking in full string contains):

public class RPS { public static String rps(String p1, String p2) { if (p1 == p2) { return "Draw!"; } else { String rules = "rockpaperscissorsrock"; if (rules.contains(p1+p2)) { return "Player 2 won!"; } else { return "Player 1 won!"; } } } }
Code language: Java (java)
Tags:
Subscribe
Notify of
guest
0 Comments
Inline Feedbacks
View all comments