当前位置: 首页 > 知识库问答 >
问题:

不能返回'if'块内的变量值[重复]

谭研
2023-03-14

我正在写一个函数来计算两个数的最大公分母。我的函数的返回类型是int,它的参数是两个ints。代码还没有完成,但到目前为止它有两个if()块。

这是我的代码:

public int gcd(int num1,int num2) {

    if(num1>num2 && num1%num2==0){
       return num2;
    }

    if(num1<num2 && num2%num1==0){           
       return num1;
    }

}

IDE显示一个缺失的返回语句错误。如果我将函数返回类型声明为void并使用System。出来println()语句它工作正常。那么,如上所述,当返回类型更改为int时,为什么会发生此错误呢?

在返回类型不是void的函数中,是否需要每个if()都有一个else

共有3个答案

王扬
2023-03-14

如果你的两个if条件都失败了会发生什么,因为你已经答应编译器你会返回一个int,但最后你试图欺骗他。

这就是编译器抱怨的原因。:)

谢谢

太叔逸春
2023-03-14
匿名用户

通过带有非voidreturn的方法返回的每个代码路径必须返回一个值。

您有一个返回的代码路径,即当两个ifs计算为false,但不返回值时。即:

public int gcd(int num1, int num2) {
    if(num1 > num2 && num1 % num2 == 0) {
        return num2;
    }
    if(num1 < num2 && num2 % num1 == 0) {
        return num1;
    }

    // return, but no return value!
}

请注意,这并不意味着每个可能的路径都必须返回,只是每个返回的可能路径都必须返回一个值。这是合法的:

public int M() throws Exception {
    throw new Exception();
}

通过该方法返回的路径中没有不返回值的路径。

孔鹤龄
2023-03-14

是否每个'if'都应该有一个其他累赘在一个函数中,有一个返回类型,而不是'空'?

不一定,只要每个代码路径都返回一个值或抛出一个异常,这在您的方法中不是这样的(例如,num1=0,num2=0;如果将输入,则两者都不返回)。

如果您知道应该根据传递给方法的值输入其中一个Ifs,那么您可以在方法末尾添加一个伪return(或者抛出一个异常,这实际上可能更利于调试)。

 类似资料:
  • 这是我的问题 我有一个充满国家代码的JSON文件,以及一个获取随机国家代码的函数,如下所示: 在另一个函数中,我调用上面的函数,并尝试将变量存储到另一个变量中,以便在新函数中可用。 谢谢你的帮助。

  • 问题内容: 我有一个简单的Java类,如下所示: 这段代码的输出是这样的: 为什么s不在finally块中覆盖,而是控制打印输出? 问题答案: 在与所述的执行块完成语句和的值在时间语句执行是由该方法返回的值。finally子句稍后s(在语句完成之后)更改值的事实(此时)并未更改返回值。 请注意,以上内容处理的s是对块中自身值的更改,而不是对s引用对象的更改。如果s是对可变对象的引用(String不

  • 我正在等待(从USSD请求中)检索一个值,以便返回它(getUSSD):

  • 我有下面的代码 我的期望是,若map中并没有值(数组),它将返回对新创建的数组的引用,我可以将我的“值”添加到该数组中。 然而,我看到myContext地图是空的。似乎超级基本,我不明白。

  • 如何在这种类型的返回语句中添加if语句: 显然,我不能直接在中删除if语句。

  • 我有一个布尔方法正在对字符串进行一些错误检查。我有一个int类常量叫“numwords”=8。我将一个字符串传递给布尔方法,在该方法中,我使用.split和.length对字符串进行单词计数。一个名为“words”的int计算字符串中的单词数。完成之后,我要执行一个if语句,比较单词和数字单词。如果它们的数目相等,则返回true,否则为false。我试过==和.等于,但都没用。有什么想法吗? 我试