从void和boolean方法返回多个值

我有以下问题:有一个计算两个整数之间相似性的布尔型静态方法,我被要求返回4个结果:

  • 而不改变方法的返回类型,它应该保持布尔值。
  • 而无需更新/使用外部变量和对象的值
  • 这是我迄今为止所做的(我不能将返回值从布尔值更改为其他值,例如int,我只能使用布尔值):

    public static boolean isSimilar(int a, int b) {
        int abs=Math.abs(a-b);
        if (abs==0) {
        return true;
        } else if (abs>10) {
        return false;
        } else if (abs<=5){
            //MUST return something else, ie. semi-true
        } else {
            //MUST return something else, ie. semi-false
        }
    }
    

    无论如何,以下是不好的做法,但如果您可以尝试捕捉异常,您可以按照惯例实际定义一些额外的输出。 例如:

    public static boolean isSimilar(int a, int b) {
        int abs = Math.abs(a-b);
        if (abs == 0) {
            return true;
        } else if (abs > 10) {
            return false;
        } else if (abs <= 5){
            int c = a/0; //ArithmeticException: / by zero (your semi-true)
            return true; 
        } else {
            Integer d = null;
            d.intValue(); //NullPointer Exception (your semi-false)
            return false;
        }
    }
    

    一个布尔值可以有两个值(true或false)。 期。 所以如果你不能改变外部的返回类型或任何变量(这将是一个坏习惯),你不可能做你想做的事。


    为功能添加参数是否违反规则2? 如果不是,这可能是一个可能的解决方案:

    public static boolean isSimilar(int a, int b, int condition) {
        int abs = Math.abs(a - b);
        switch (condition) {
        case 1:
            if (abs == 0) {
                return true; // true
            }
        case 2:
            if (abs > 10) {
                return true; // false
            }
        case 3:
            if (abs <= 5 && abs != 0) {
                return true; // semi-true
            }
        case 4:
            if (abs > 5 && abs <= 10) {
                return true; // semi-false
            }
        default:
            return false;
        }
    }
    

    通过调用函数4次(使用条件= 1,2,3和4),我们可以检查4个结果(只有一个返回true,其他3个返回false)。

    链接地址: http://www.djcxy.com/p/86645.html

    上一篇: Return multiple values from void and boolean methods

    下一篇: Get approximate square root