-2

所以我的代码旨在将机器人的 y 坐标与目标的 y 坐标进行比较。当我添加打印语句时,我在使函数返回任何内容时遇到问题。我觉得这与括号有关,但我不确定如何使用它们。

这不是整个程序,但它是其中唯一有错误的部分。

当我尝试编译这个时:

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");

    }
}

我得到错误:没有“if”的“else”

当我删除 System.out.println() 函数时,我没有收到任何错误。

4

4 回答 4

3

return 语句退出您的方法。因此,System.out 永远不会被调用。

于 2013-10-27T20:39:22.067 回答
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!

else without if 示例很好地提醒了您为什么在省略大括号时应该格外小心。

于 2013-10-27T20:42:51.223 回答
0

在您的第一个代码块中,您在 return 语句之后有 System.out.println ,这使得它们无法访问。如果您将 System.out.println 放在 return 语句的前面,它将起作用。

在您的第二个示例中,您从 if 语句中删除了方块({...}),这意味着每个条件只能有一个语句。你有两个 return 和 System.out.println。

于 2013-10-27T20:44:04.480 回答
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.

要解决您的问题:

  1. 永远不要在返回返回值后编写代码。
  2. 写括号{}Mor 来写,但你总能看到积木。
于 2013-10-27T20:45:56.797 回答