加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

更正Java程序代码片段

发布时间:2020-12-15 04:57:23 所属栏目:Java 来源:网络整理
导读:我是初学者,通过回答过去的考试试卷中的问题来学习 java和修改我的考试,还有一个问题我被困在了. 考虑下面的代码片段,它读取输入命令然后处理它. String cmd = scanner.next();if (cmd == "forward" ) robot.forward(1);else if (cmd == "turn" ) robot.turn
我是初学者,通过回答过去的考试试卷中的问题来学习 java和修改我的考试,还有一个问题我被困在了.

考虑下面的代码片段,它读取输入命令然后处理它.

String cmd = scanner.next();

if (cmd == "forward" )
    robot.forward(1);
else if (cmd == "turn" ) 
    robot.turn();
else
     System.out.println("Unknown command: " + cmd);

在测试程序时,扫描程序将字符串“forward”读入cmd,但程序输出“Unknown command:forward”.

a)详细解释为什么会发生这种情况.

b)应该对代码进行哪些更改以更正此错误.

如果有人可以帮我回答问题a)和b)我将不胜感激.

附:我知道这不是一个只寻找答案的网站(#noeasywayout),所以我会尽量不要在这里贪婪.对于给您带来的任何不便,我深表歉意.

解决方法

这老栗子……

在java中,==测试两个操作数是否完全相同,显然它们不是(其中一个对象是一个String常量,另一个是从输入中读取的).

使用String.equals()方法比较它们的值.

试试这个:

if (cmd.equals("forward"))
    robot.forward(1);
else if (cmd.equals("turn")) 
    robot.turn();
else
    System.out.println("Unknown command: " + cmd);

顺便说一句,有了这种代码模式,请注意在cmd上调用.equals()如果它为null – 你将得到一个NPE.一个常见的方法是避免这种情况而不添加任何代码是使用“yoda测试”(一个带有“逆转”逻辑):

if ("forward".equals(cmd))
    robot.forward(1);
else if ("turn".equals(cmd)) 
    robot.turn();
else
    System.out.println("Unknown command: " + cmd);

如果cmd为null,则此代码不会抛出NPE

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读