所以我的代码是用来比较机器人的y坐标和目标的y坐标。当我添加print语句时,我在使函数返回任何内容时遇到问题。我感觉这与括号有关,但我不确定如何使用它们。
这不是整个程序,但它是唯一有错误的程序。
当我尝试编译时:
public class Ex12
{
private byte isTargetNorth(IRobot robot)
{
if (robot.getLocationY() > robot.getTargetLocation().y) {
return 1; System.out.println("north");
} else if (robot.getLocationY() == robot.getTargetLocation().y) {
return 0; System.out.println("no");
} else {
return -1; System.out.println("south");
}
}
}
我收到错误:无法访问的声明
当我尝试这个时:
public class Ex12
{
private byte isTargetNorth(IRobot robot)
{
if (robot.getLocationY() > robot.getTargetLocation().y)
return 1; System.out.println("north");
else if (robot.getLocationY() == robot.getTargetLocation().y)
return 0; System.out.println("no");
else
return -1; System.out.println("south");
}
}
我收到错误:'else'没有'if'
删除System.out.println()函数时没有错误。
答案 0 :(得分:3)
return语句退出方法。因此,System.out将永远不会被调用。
答案 1 :(得分:1)
第一个:在各自的System.out.println
调用之后移动return语句 - return退出当前方法,因此System.out.println
永远不会被调用,因此无法访问。
第二个是格式混乱的情况:你的代码
if (robot.getLocationY() > robot.getTargetLocation().y)
return 1; System.out.println("north");
else if ...
//...
实际上相当于
if (robot.getLocationY() > robot.getTargetLocation().y) {
return 1;
}
System.out.println("north");
else if ... //else without if right here, because else should follow immediately after an if block!
没有示例的其他内容是一个很好的提醒,为什么在省略大括号时应该格外小心。
答案 2 :(得分:0)
在第一个代码块中,在return语句之后有System.out.println,这使得它们无法访问。如果将System.out.println放在return语句之前,它将起作用。
在第二个示例中,您从if语句中删除了bocks({...}),这意味着每个条件只能有一个语句。你有两个return和System.out.println。
答案 3 :(得分:0)
您写道:
return 1;
System.out.println(""); // << This is written after you return to the calling method.
这意味着,您无法在此处编写代码。
在您编写的其他代码中
if() Some Code;
// This statement will be executed, because it is outside of the if-block
else
// The else above has no if.
解决您的问题:
{}
Mor写,但你总能看到块。