如何在Java中避免“无法访问的语句”和“否则没有if”?

时间:2013-10-27 20:37:57

标签: java if-statement unreachable-statement

所以我的代码是用来比较机器人的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()函数时没有错误。

4 个答案:

答案 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.

解决您的问题:

  1. 在返回返回值后,切勿编写代码。
  2. 写括号{} Mor写,但你总能看到块。