不使用if else ,实现石头剪刀布
系列文章目录
文章目录
- 系列文章目录
- 一、方法一使用数组映射
一、方法一使用数组映射
定义一个二维数组来表示胜负关系,然后根据玩家的选择直接返回结果
思路:
将剪刀 石头 布分别用数字0,1,2表示
定义一个胜负表:int[][] win = {{0, -1, 1}, {1, 0, -1}, {-1, 1, 0}};
其中 win[a][b] 表示 a 对 b 的胜负结果:
1:a 赢
-1:b 赢
0:平局
public class RockPaperScissors {
public static String play(int player1, int player2) {
// 定义胜负关系表:0: 剪刀, 1: 石头, 2: 布
这个二维数组 win[a][b] 表示:玩家1出 a,玩家2出 b 时的结果。每个位置的含义:
0 → 平局(draw)
1 → 玩家1赢(player1 wins)
-1 → 玩家2赢(player2 wins)1. win[0][0] = 0 → 剪刀 vs 剪刀 → 平局
两个都出剪刀,平局。2. win[0][1] = -1 → 剪刀 vs 石头 → 玩家2赢
剪刀被石头打败,所以玩家2赢。3. win[0][2] = 1 → 剪刀 vs 布 → 玩家1赢
剪刀剪布,玩家1赢。4. win[1][0] = 1 → 石头 vs 剪刀 → 玩家1赢
石头砸剪刀,玩家1赢。int[][] win = {{0, -1, 1}, // 剪刀 vs 剪刀: 平局, vs 石头: 输, vs 布: 赢{1, 0, -1}, // 石头 vs 剪刀: 赢, vs 石头: 平局, vs 布: 输{-1, 1, 0} // 布 vs 剪刀: 输, vs 石头: 赢, vs 布: 平局
};int result = win[player1][player2];
return result == 1 ? "Player 1 wins!" :result == -1 ? "Player 2 wins!" :"It's a draw!";
}public static void main(String[] args) {System.out.println(play(0, 1)); // 剪刀 vs 石头 → Player 2 wins!System.out.println(play(1, 2)); // 石头 vs 布 → Player 2 wins!System.out.println(play(2, 0)); // 布 vs 剪刀 → Player 1 wins!System.out.println(play(1, 1)); // 石头 vs 石头 → It's a draw!}
}