从 void 和 boolean 方法返回多个值
Posted
技术标签:
【中文标题】从 void 和 boolean 方法返回多个值【英文标题】:Return multiple values from void and boolean methods 【发布时间】:2016-02-12 06:00:10 【问题描述】:我有以下问题:有一个计算两个整数之间相似度的布尔静态方法,我被要求返回 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
【问题讨论】:
抛出一个包含返回值的异常,或者改变一个参数,比如int[]
,除非它违反了约束2。
布尔值要么是真要么是假,所以你只有这两个选项。要返回这两个选项以外的任何内容,您需要将返回数据类型更改为其他内容。故事结束
谁问你这个的?对我来说,这似乎是一个棘手的问题,提出问题的人有一个解决方案,可以扩展他们在问题中使用的术语的定义。
今天早上在面试(实习)。信不信由你,剩下的问题都是小菜一碟,一些智商,一些Java基础知识。我想这件事有所作为,让我们现在等待结果
Gaaaack。我希望这不是一个面试问题。我真的质疑任何人的能力,他们认为像这样的面试问题会揭示谁更适合某个职位或实习。除非他们打算给那些说“那将是一种非常糟糕的编程方式”的受访者打分。但也许其他人可以向我解释这类问题的价值?
【参考方案1】:
无论如何,以下是不好的做法,但是如果您可以尝试捕获异常,您实际上可以按照约定定义一些额外的输出。例如:
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;
【讨论】:
据我后来听到的,这是面试中接受的答案之一 哦,哇,那我强烈建议离开这家公司(或寻找另一家),当这样一个糟糕的设计被认为是面试中的答案时。【参考方案2】:一个布尔值可以有两个值(真或假)。时期。因此,如果您无法更改返回类型或外部的任何变量(无论如何这都是不好的做法),就不可能做您想做的事。
【讨论】:
除了抛出一个 RuntimeException,它会起作用,但是是一个真的糟糕的设计决策:-)【参考方案3】:向函数添加参数是否违反规则 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)。
【讨论】:
尚不清楚它是否违反规则,它可能确实,它在边界线上,但我想这个解决方案也可以接受。以上是关于从 void 和 boolean 方法返回多个值的主要内容,如果未能解决你的问题,请参考以下文章
java中方法的返回类型都有哪些?可以引用数据类型吗?举例说明
如何以较少的费用从 java 中的方法返回两个值(1.Collection,2.Single Boolean 值)?
最好返回 NSArray 还是 void 并更新 self 属性?