I have a method that returns a int, and it tells me i'm missing a return statement. Can this be fixed without rewriting the method?

huangapple go评论79阅读模式
英文:

I have a method that returns a int, and it tells me i'm missing a return statement. Can this be fixed without rewriting the method?

问题

这是该方法。正如您所见,所有的if语句中都有一个返回,所以我理解为什么它不能识别输出,但是否有任何方法可以修复这个问题?

private int bounds(int x, int y) {
    if (x == -1) {
        if (y == -1) {
            return life[130][70];
        } else if (y == 71) {
            return life[130][0];
        }
        if (0 <= y && y <= 70) {
            return life[130][y];
        }
    } else if (x == 131) {
        if (y == -1) {
            return life[0][70];
        } else if (y == 71) {
            return life[0][0];
        }
        if (0 <= y && y <= 70) {
            return life[0][y];
        }
    }
    if (0 <= x && x <= 130) {
        if (y == -1) {
            return life[x][70];
        } else if (y == 71) {
            return life[x][0];
        }
        if (0 <= y && y <= 70) {
            return life[x][y];
        }
    }
}
英文:

This is the method. As you can see, all of the if statements have a return in them so I understand why it is not recognizing the output, but is there any way to fix this?

private int bounds(int x, int y) {
        if (x == -1) {
            if (y == -1) {
                return life[130][70];
            }
            else if (y == 71) {
                return life[130][0];
            }
            if (0 &lt;= y &amp;&amp; y &lt;= 70) {
                return life[130][y];
            }
        }
        else if (x == 131) {
            if (y == -1) {
                return life[0][70];
            }
            else if (y == 71) {
                return life[0][0];
            }
            if (0 &lt;= y &amp;&amp; y &lt;= 70) {
                return life[0][y];
            }
        }
        if (0 &lt;= x &amp;&amp; x &lt;= 130) {
            if (y == -1) {
                return life[x][70];
            }
            else if (y == 71) {
                return life[x][0];

            }
            if (0 &lt;= y &amp;&amp; y &lt;= 70) {
                return life[x][y];
            }
        }
    }

答案1

得分: 1

请问您的方法在例如 x 为 -2 时会返回什么。

意思是,编译器会告诉您该方法中存在一些路径没有看到返回语句。简单来说:相信编译器。

您可以通过在所有的 if 块之后添加一个最终的返回语句来修复这个问题。

但是真正的答案是:您不应该编写如此复杂的代码。上述代码会成为一个维护的噩梦。它应该进行重构。

英文:

Ask yourself what your method would return if x is -2 for example.

Meaning: the compiler tells you that there are paths through that method that don't see a return statement. Simply: believe the compiler.

You could fix the problem by adding one final return statement after your if blocks.

But the real answer: you should never write code that turns that complicated. The above is a maintenance nightmare. It should be refactored.

答案2

得分: 0

你需要在函数末尾添加一个默认返回语句,以防如果语句都不成立的情况。

英文:

you need to add a default return to the end of your function, if not one of the if statement is true

答案3

得分: 0

可以通过以下方式修复缺少返回语句的编译错误,而无需重写方法:

  1. 抛出 RuntimeException(仅当某些输入有效时)。
  2. 在结尾处返回默认值(如果所有输入都有效)。

在现有逻辑中,负整数(除了 -1 之外的)未经处理(x 和 y 的上限也是如此)。如果当前未处理的输入无效,则可以执行类似以下操作:

private int bounds(int x, int y) {
    ...
    现有逻辑
    ...
    throw new IllegalArgumentException("Bad input");
}
英文:

It is possible to fix the missing return statement compilation error without rewriting the method by:

  1. Throwing a RuntimeException (if only some inputs are valid).
  2. Returning a default value at the end (if all inputs are valid).

In the existing logic, negative integers other than -1 are not handled (same with upper bounds for x and y). If inputs which are not currently handled are invalid, you may do something like:

private int bounds(int x, int y) {
    ...
    (Existing logic)
    ...
    throw new IllegalArgumentException(&quot;Bad input&quot;);
}

huangapple
  • 本文由 发表于 2020年9月21日 21:29:36
  • 转载请务必保留本文链接:https://go.coder-hub.com/63993312.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定