-2

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

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”值将解决问题。尝试此操作后,错误消失了。但是在编译时,程序会立即终止。我究竟做错了什么?

4

5 回答 5

1

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

return 0也许?

于 2013-05-25T22:51:18.453 回答
1

如果您的所有条件都是错误的,则您的方法的执行将到达您的方法的末尾而不会命中任何return语句。您必须为这种情况提供一个返回值。

添加最后一行来完善您的方法的主体:

return 0; // for example

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

于 2013-05-25T22:52:01.050 回答
0

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

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

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

     // if all if cases fail:
     throw new InvalidDirectionException("Invalid direction inputted");
}
于 2013-05-25T22:51:26.240 回答
0

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

于 2013-05-25T22:52:21.867 回答
0

move方法必须始终返回一个值。在您的代码中,当您的 if 条件都不满足时,您需要更新代码以写入一些 int 值。

于 2013-05-25T22:52:24.210 回答