牛客算法基础noob54 斗兽棋
牛牛和牛妹正在玩一个博弈游戏。游戏规则如下:
每位玩家可以选择四种棋子之一:
elephant
、tiger
、cat
或mouse
。棋子之间的克制关系为:
elephant
吃tiger
tiger
吃cat
cat
吃mouse
mouse
吃elephant
当一方的棋子能吃掉另一方的棋子时,该方获胜;否则视为平局。
输入说明: 输入包含两个用空格分隔的字符串,分别代表牛牛和牛妹选择的棋子(保证是四种有效棋子之一)。
输出说明: 根据比赛结果输出:
- 牛牛获胜:输出
win
- 牛妹获胜:输出
lose
- 平局:输出
tie
import java.util.Scanner;// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {public static void main(String[] args) {Scanner in = new Scanner(System.in);String s1 = in.next(),s2 = in.next();String e = "elephant";String t = "tiger";String m = "mouse";String c = "cat";if(s1.equals(e) && s2.equals(t)){System.out.print("win");}else if(s1.equals(t) && s2.equals(e)){System.out.print("lose");}else if(s1.equals(t) && s2.equals(c)){System.out.print("win");}else if(s2.equals(t) && s1.equals(c)){System.out.print("lose");}else if(s1.equals(c) && s2.equals(m)){System.out.print("win");}else if(s2.equals(c) && s1.equals(m) ){System.out.print("lose");}else if(s1.equals(m) && s2.equals(e)){System.out.print("win");}else if(s1.equals(e) && s2.equals(m)){System.out.print("lose");}else{System.out.print("tie");}}
}
这段代码的逻辑是通过比较输入的两个字符串s1
和s2
来判断游戏结果(输出"win"、"lose"或"tie"),但存在一个关键错误导致判断异常:
核心问题:字符串比较方式错误 在Java中比较字符串内容时,不能使用==
运算符,而应该使用equals()
方法:
==
比较的是字符串对象的内存地址是否相同equals()
才是比较字符串内容是否相同
问题示例 当输入s1
为"elephant"时:
s1 == e
可能返回false(因为它们是不同的对象)s1.equals(e)
才会返回true(内容相同)
修改说明
- 将所有
==
替换为equals()
- 保持原有逻辑不变,确保正确比较字符串内容
修正效果 输入示例:"elephant tiger"
- 修正前:
s1 == e
可能为false,错误输出"tie" - 修正后:
s1.equals(e)
为true且s2.equals(t)
为true,正确输出"win"