为什么这个返回方法不会编译?

时间:2013-05-25 22:47:31

标签: java return

我正在尝试创建一个简单的程序,您可以通过键入命令在四个方向上移动一个空格。这是我的代码:

public class Map {
    public int x;
    public int y;
}

import java.util.Scanner;

public class Mover {
    Scanner input = new Scanner(System.in);
    Map map = new Map();

    public int move(int x, int y){
        map.x = x;
        map.y = y;
        String direction = input.next();

        System.out.println("Where will you move?");

        if(direction.equalsIgnoreCase("move right")){
            x++;
            return x;
        }

        if(direction.equalsIgnoreCase("move left")){
            x--;
            return x;
        }

        if(direction.equalsIgnoreCase("move up")){
            y++;
            return y;
        }

        if(direction.equalsIgnoreCase("move down")){
            y--;
            return y;
        }
    }
    public static void main(String args[]){
        Mover mover = new Mover();
    }
}

编译器说问题是我需要返回一个int值,但显然我已经在我所做的每个if语句中。具体来说,它表示在方法的最后返回一个'y'值将解决问题。尝试这个之后,错误消失了。但是在编译时,程序会立即终止。我做错了什么?

5 个答案:

答案 0 :(得分:1)

所有return语句都在条件块中。在最后添加一个return语句(对于direction与任何内容不匹配的情况)。

或许

return 0

答案 1 :(得分:1)

如果您的所有条件都是错误的,那么您的方法的执行将到达方法的末尾而不会发出return语句。您必须为该情况提供返回值。

添加最后一行来磨练方法的主体:

return 0; // for example

Java方法没有“默认”返回值。

答案 2 :(得分:0)

因为如果您的所有if案例都失败了,那么您没有返回值。

你应该返回一些错误代码整数,有一个默认方向,或者抛出某种异常/错误。

public int move(int x, int y) throws InvalidDirectionException
{
     ...

     // if all if cases fail:
     throw new InvalidDirectionException("Invalid direction inputted");
}

答案 3 :(得分:0)

如果你的if语句都没有评估为true,那么你最终不会返回任何内容。如果没有ifs为真,则在末尾添加else以返回int

答案 4 :(得分:0)

move方法必须始终返回值。在您的代码中,您需要更新代码以在没有满足条件的情况下编写一些int值