【问题标题】:How can I fix the error "This method must return a result of type int" without breaking the current code?如何在不破坏当前代码的情况下修复错误“此方法必须返回 int 类型的结果”?
【发布时间】:2021-12-02 12:09:03
【问题描述】:

据我所知,我理解这个错误。我知道在我的程序中存在不满足条件并且计算机不知道该怎么做的情况。话虽如此,我不确定如何在不破坏当前代码的情况下正确修复它。我在所有 if 语句的末尾添加了一个 return 0,这消除了错误,但在某些情况下,我当然不希望打印出 0。我也尝试将它放在最后的 else 语句中,但我仍然得到同样的错误。

赋值指令如下:“如果两个参数相差在1以内,则返回较小的数;否则,较大的参数减1,较小的参数加1,平衡结果。”

这是我所拥有的:

    public static int balance (int x, int y) {
        if(x == y) {
            System.out.println("The values X and Y (" + x +  " and " + y + ") are already balanced; They are equal to each other!");
        }
        
        else if(Math.abs(x-y) == 1) { //Checks to see if numbers are within 1 of each other (Math.abs because negative numbers don't matter in this case)
            if(x > y) {
                return y;
            }
            else return x;
        }
        else if(x > y) {
            x = x - 1; //X is larger so we subtract
            y = y + 1; //Y is smaller so we add
            return balance(x,y); //Recursion happens
        }
        else if(x < y) {
            y = y - 1; //Y is larger so we subtract
            x = x + 1; //X is smaller so we add
            return balance(x,y); //Recursion happens
        }
    }

那方面的计算和一切似乎完全按照说明要求进行。我似乎无法摆脱 “此方法必须返回 int 类型的结果”错误,而不会在控制台中显示不需要的随机值。

【问题讨论】:

    标签: java recursion methods


    【解决方案1】:

    您需要进行两项更改。

    1. 决定在x == y的情况下返回什么,并在第一个分支中添加适当的return语句。

    2. 将else if (x &lt; y) { 更改为else {。你知道你已经用尽了所有的可能性,但编译器没有。这是告诉编译器无处可去的可靠方式。

    除非你做这两件事,否则编译器认为它有可能在方法中用完行来执行,而不会遇到return 语句。这对于您声明为返回 int 的方法无效。

    【讨论】:

    • 好吧,我知道这是如何解决它的。话虽如此,当我在 x == y 时添加 return 语句时,我不确定要准确返回什么。我只想让用户知道这两个值彼此相等,不需要“平衡”。那是在打印语句中
    • 好吧,问题陈述说“如果两个参数彼此相差1,则返回较小的数字......” - 我会说涵盖了这种情况.
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-03-08
    • 1970-01-01
    • 2013-09-02
    • 1970-01-01
    • 2017-02-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多