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。
TA贡献1853条经验 获得超18个赞
如果您需要支持null(例如 Python 的None),那么您应该返回包装器类型Integer。
static Integer function(int [] arr) {
// ...
}
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;
[...]
添加回答
举报