Robocode中调用getName()判断扫描机器人名称时编译报错
错误原因
你的代码存在2个会直接导致编译/逻辑异常的问题,另外还有1个Java字符串判断的常见隐患:
- 语法错误:if条件判断里误用了单等号
=。在Java中=是赋值运算符,作用是给变量赋值,判断相等必须使用双等号==,这就是编译器直接报错的核心原因。 - 逻辑错误:你调用的
getName()方法返回的是你自己编写的机器人的名称,不是被扫描到的敌方机器人名称。要获取扫描事件里探测到的机器人名称,需要调用事件对象e的getName()方法,即e.getName()。 - 潜在隐患:Java中字符串值比较不要用
==,==判断的是两个字符串对象的内存地址是否一致,哪怕两个字符串文字内容完全相同,也可能因为内存地址不同返回false。字符串内容相等判断必须使用.equals()方法。
修正后可运行代码
public void onScannedRobot(ScannedRobotEvent e) { if ("RamFire".equals(e.getName())) { // 扫描到名为RamFire的机器人时执行的逻辑 } else { // 扫描到其他机器人时执行的逻辑 } }
注:把字符串常量
"RamFire"放在前面调用equals(),是为了避免极端情况下e.getName()返回null时触发空指针异常,是Java开发中的通用写法习惯。
内容的提问来源于stack exchange,提问作者Rooibo Quallity
相关产品推荐
相关产品推荐

