【问题标题】:Two different datatype in function return函数返回中的两种不同数据类型
【发布时间】:2013-03-29 07:10:04
【问题描述】:

在这个函数中,我需要两种不同的数据类型来返回,当y 不为零时为浮点数,当为零时为布尔值。

public XXXXX division(int x, int y){
    if(y!=0){
        return x/y;
    }
    else{
        return false;
    }
}

我知道我可以使用两个函数来实现这一点 1- 检查除法校正 2- 在一个函数中计算我想要的正确除法,这可能吗?

【问题讨论】:

    标签: java types return


    【解决方案1】:

    不应允许将 0 作为除数传递。在这种情况下,您应该抛出异常而不是返回 false:

    public float division(int x, int y) {
        if (y != 0) {
            return ((float) x) / y;
        }
        else {
            throw new IllegalArgumentException("division by 0 makes no sense");
        }
    }
    

    【讨论】:

      【解决方案2】:

      不确定为类似的事情使用单一方法是否是一种好习惯。但是您可以创建自己的类,并将结果和错误作为属性,然后从您的方法中返回该类的对象。

      【讨论】:

        【解决方案3】:

        您可以在调用函数本身之前检查Y 的值是否为零。不允许将零传递给该函数。

        无论如何,如果您将零传递给函数,除以零的情况将抛出ArithmaticException。所以你的函数可以向调用者抛出异常。

        public float division(int x, int y) throws Exception {   ///ArithmaticException
            return ((float) x) / y;
        }
        

        【讨论】:

          【解决方案4】:

          也许使用 Double 作为返回类型并正常返回值。如果为false,则返回null。

          【讨论】:

            【解决方案5】:

            最简单的方法-

            public Object division(int x, int y) {
                if (y != 0) {
                    return x / y;
                } else {
                    return false;
                }
            }
            

            【讨论】:

            • x / y 应该是(双)x / y。
            • 返回的结果如何解释呢?
            • 调用代码必须注意这一点。只是为了检查返回对象的类型/实例。
            【解决方案6】:

            您可以返回Float,使用null 表示“无结果”:

            public Float division(int x, int y) {
                if(y != 0) {
                    return x / (float)y;
                } else {
                    return null;
                }
            }
            

            也就是说,在这种特殊情况下,返回 IEEE 无穷大或 NaN 可能实际上是有意义的。

            请注意,我已经修复了整数除法,因为这听起来不是您想要的。

            【讨论】:

              【解决方案7】:

              也许你应该事先检查一下:

              伪代码

              if(y!=0){

              获取division(x/y)

              }else{

              说Cannot divide by 0

              }

              【讨论】:

                猜你喜欢
                • 2022-01-24
                • 2021-11-19
                • 1970-01-01
                • 2012-03-04
                • 1970-01-01
                • 1970-01-01
                • 2011-06-27
                • 1970-01-01
                • 1970-01-01
                相关资源
                最近更新 更多