use*_*780 3 java java.util.scanner
我是初学者,通过回答过去的考试试卷中的问题来学习java和修改我的考试,还有一个问题我被困在了.
考虑下面的代码片段,它读取输入命令然后处理它.
String cmd = scanner.next();
if (cmd == "forward" )
robot.forward(1);
else if (cmd == "turn" )
robot.turn();
else
System.out.println("Unknown command: " + cmd);
Run Code Online (Sandbox Code Playgroud)
在测试程序时,扫描程序将字符串"forward"读入cmd,但程序输出"Unknown command:forward".
a)详细解释为什么会发生这种情况.
b)应该对代码进行哪些更改以更正此错误.
如果有人可以帮我回答问题a)和b)我将不胜感激.
ps我明白这不是一个只寻找答案的网站(#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);
Run Code Online (Sandbox Code Playgroud)
顺便说一句,用这个代码模式,谨防调用.equals()上cmd,如果它是null-你会得到一个NPE.在不添加任何代码的情况下避免这种情况的常用方法是使用"yoda测试"(具有"反向"逻辑的测试):
if ("forward".equals(cmd))
robot.forward(1);
else if ("turn".equals(cmd))
robot.turn();
else
System.out.println("Unknown command: " + cmd);
Run Code Online (Sandbox Code Playgroud)
如果是,此代码不会抛出NPEcmdnull
| 归档时间: |
|
| 查看次数: |
2109 次 |
| 最近记录: |