Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/310.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为什么Guava中空数组的max和min抛出IllegalArgumentException?_Java_Guava - Fatal编程技术网

Java 为什么Guava中空数组的max和min抛出IllegalArgumentException?

Java 为什么Guava中空数组的max和min抛出IllegalArgumentException?,java,guava,Java,Guava,我正在读番石榴的Ints.max(int…array)(类似地,Ints.min,Longs.min,等等),如果array.length==0(这是番石榴15.0),他们会抛出一个IllegalArgumentException 我想知道为什么在这种情况下他们不返回“identity元素”,而不是抛出异常。我所说的“标识元素”是指表现为1表示乘积,0表示总和的元素。 也就是说,我希望Ints.min()是Integer.MAX\u VALUE,Ints.MAX()是Integer.min\u

我正在读番石榴的
Ints.max(int…array)
(类似地,
Ints.min
Longs.min
,等等),如果
array.length==0(这是番石榴15.0),他们会抛出一个
IllegalArgumentException

我想知道为什么在这种情况下他们不返回“identity元素”,而不是抛出异常。我所说的“标识元素”是指表现为1表示乘积,0表示总和的元素。 也就是说,我希望
Ints.min()
Integer.MAX\u VALUE
Ints.MAX()
Integer.min\u VALUE
,依此类推

其基本原理是,如果将一个数组一分为二,则整个数组的最小值必须是两个子数组的最小值之间的最小值。或者,对于有数学倾向的,实数空集上的和为0,乘积为1,集合的空集合的并集为空集,依此类推

由于番石榴库往往是精心制作的,我想这里抛出异常肯定有一个解释。所以问题是:为什么


编辑:我知道大多数人希望数组的max和min是数组的一个元素,但这是因为两个元素的max/min总是其中之一。另一方面,如果将max/min视为(可交换的)二进制操作,则返回标识元素更有意义。对我来说。

这是你自己说的-

其基本原理是,如果将一个数组一分为二,则整个数组的最小值必须是两个子数组的最小值之间的最小值。或者,对于有数学倾向的,实数空集上的和为0,乘积为1,集合的空集合的并集为空集,依此类推

所以[-1]=[-1]并集[],但是max([-1])!=最大([-1]联合[])。我同意,对于乘积或总和,返回各自的标识更为合理,但不返回max/min

我还喜欢max/min(S)是S的一个元素的属性,而不是与小于和大于无关的元素


特别是如果我在一个有很多负数的领域工作-比如加拿大北部的温度-我的温度样本因为温度计坏了而空了-它不应该随机显示为相对非常温暖的一天。

因为,IMHO,在99.99%的情况下,当你问数组的最小元素时,您希望获取此数组的元素,而不是任意大的值。因此,在大多数情况下,空数组是一种特殊情况,需要进行特殊处理。因此,不处理这种特殊情况是一个错误,由异常发出信号。

数组值的最小值/最大值必须来自该数组。如果数组为空,则没有可接受的值。此处返回
Integer.MAX\u VALUE
Integer.MIN\u VALUE
将是错误的,因为这些值不在数组中。数组中没有任何内容。从数学上讲,答案是空集,但这不是可能的
int
值中的有效值。没有可能的
int
正确答案,因此唯一可能的正确做法是抛出
异常

您可能需要询问番石榴开发者。Min/max of nothing是未定义的(IMHO),因此番石榴的行为似乎正常。如果
int[]
为空,您希望如何从
int[]返回最小元素?任何
int
值都可以在
int[]
中找到它的位置,包括极端值
整数。{MIN,MAX}\u值
。就我个人而言,我发现这种行为是合乎逻辑的。正如在下面的bet中发现的,还请注意Haskell不是这样做的,这是一种真正受数学启发的语言。我的意思是max([-1])==max(max([-1]),max([]))。如果max([])是整数,则为真。@matiasg我明白了,是的,这些是标识。番石榴对我来说似乎是一个合理甚至很好的设计决定,但我不认为有任何理论上的理由不喜欢你的。”因此,大多数时候,空数组是一种特殊情况“这是一个宗教问题。任何数学家都会喜欢一个统一处理空集的证明或程序,如果不检查的话,我会打赌用Haskell这样的语言实现max或min将符合OP的设计。@LouisWasserman ouch。与OP的问题非常相关,如果即使他们的mathy语言也没有以mathy优雅的方式来做,那么实际上可能有一个很好的理由不这样做。在阅读您的赌注之前,我也尝试过Haskell;-)如上所述,它们还抛出一个异常。但是函数或/和::[Bool]->Bool,从数学角度来看与max/min非常相似,对于空列表,它们分别返回False和True。答案不能是空集合,这一点都没有意义(考虑一组具有某种总顺序的集合的
min
,您将看到原因)。我同意你写的所有其他东西,尤其是答案必须来自于这个数组。这是最大值和最大值之间的区别。