为了账号安全,请及时绑定邮箱和手机立即绑定

在应该返回整数的函数中返回 null

在应该返回整数的函数中返回 null

慕仙森 2022-03-10 10:31:47
该代码标识了数组中最接近 0 的整数,如果有 2 个或更多值满足此条件,则返回值应为 null。问题是,当我使条件返回 null 时,它会显示错误,因为函数应该返回一个整数。    static int function(int [] arr){    int closest=arr[0];    for(int i=1;i<arr.length;i++){        if(Math.abs(arr[i])<closest){            arr[i]=closest;        }        else if(arr[i]==closest){            return null;        }    }    return closest;}我对 Java 很陌生(以前学过 Python),如果有更好/更有效的方法来处理这段代码,请分享。
查看完整描述

3 回答

?
至尊宝的传说

TA贡献1789条经验 获得超10个赞

您可以将返回类型转换为Integer可以保存null并将自动装箱和拆箱的返回类型为 int:


static Integer function(int [] arr){

    int closest=arr[0];

    for(int i=1;i<arr.length;i++){

        if(Math.abs(arr[i])<closest){

            arr[i]=closest;

        }

        else if(arr[i]==closest){

            return null;

        }

    }

    return closest;

}

然而,这可能不是最好的解决方案。您可以改为返回Integer.MAX_VALUE以表示其中两个元素与零等距。这取决于您计划如何处理两个元素距离相等的情况0。


查看完整回答
反对 回复 2022-03-10
?
慕容森

TA贡献1853条经验 获得超18个赞

如果您需要支持null(例如 Python 的None),那么您应该返回包装器类型Integer。


static Integer function(int [] arr) {

    // ...

}


查看完整回答
反对 回复 2022-03-10
?
FFIVE

TA贡献1797条经验 获得超6个赞

显而易见的答案是 returnInteger而不是int.


static Integer function(int[] arr) {

自动装箱将负责包装原语;自动拆箱将负责提供您的客户端代码NullPointerException。


但是您说高效,但是分配真正的对象并不高效(小值将使用公共对象,但这仍然不是很好)。抛出异常的效率会更低(假设它发生得足够频繁。)


该例程可能会返回任何int值,我们希望插入一个额外的可能输出代码。long因此,一种可能性是增大一个并返回 aLong.MIN_VALUE作为特殊值。可能需要对客户端代码进行强制转换才能返回int.


static Integer function(int[] arr) {

Long.MIN_VALUE有趣的是Long.MIN_VALUE == Math.abs(Long.MIN_VALUE)。


正是在这一点上,我们意识到代码中似乎存在错误(不确定,因为我真的知道它应该做什么)。


    if(Math.abs(arr[i])<closest){

这对于Integer.MIN_VALUE. 可能你想交换它。


    if (-Math.abs(arr[i]) > -closest){

long在进行比较之前转换为也是可能的,但不太聪明。(整数溢出 - bleurgh。)


null解决该问题的另一种方法是让客户端代码选择一个适当的值来发出与应该指示的相同的信号。


static int function(int[] arr, int dflt) {

    [...]

        } else if (arr[i] == closest) {

            return dflt;

        [...]


查看完整回答
反对 回复 2022-03-10
  • 3 回答
  • 0 关注
  • 193 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信