在Java中如何将某些内容表示为空?

在Java中如何将某些内容表示为空?,java,arrays,Java,Arrays,我正在编写一个Java程序,其中的一个对象包含一个数组和索引first和last,以表示数组中定义值的位置。例如,如果一个长度为8的双数组除了在第三、第四和第五个坐标处之外都应该是空的,比如[\uuu、\uu、-1.0、4.2、-5.9、\uu、\uu]那么第一个将存储3,而最后一个将存储6(比定义值的最后一个位置多一个)。但是,我不知道如何在Java数组中使用空值。它将所有内容初始化为0.0,我无法为任何坐标分配空值 我被要求在这个任务中使用数组,所有0.0的数组应该被视为已满,所以我不能选择

我正在编写一个Java程序,其中的一个对象包含一个数组和索引
first
last
,以表示数组中定义值的位置。例如,如果一个长度为8的双数组除了在第三、第四和第五个坐标处之外都应该是空的,比如
[\uuu、\uu、-1.0、4.2、-5.9、\uu、\uu]
那么
第一个
将存储3,而
最后一个
将存储6(比定义值的最后一个位置多一个)。但是,我不知道如何在Java数组中使用空值。它将所有内容初始化为0.0,我无法为任何坐标分配空值

我被要求在这个任务中使用数组,所有0.0的数组应该被视为已满,所以我不能选择将其解释为空


谢谢您的帮助。

如果您的数组是基元类型double[],那么它不能为空。但是,Double[](大写)是原语的对象包装器,它允许空值。

您可以使用
null
表示引用类型的“未定义”。
double
不能为
null
(基本类型,不是引用类型),但可以为
double
。因此,您可以使用
Double[]
而不是
Double[]


但是您确定需要关注“未定义”的值吗?在我看来,您的数据结构有责任知道
first
下面和
last
上面的任何索引都包含未定义的值。也就是说,不知道这些索引中存储的实际值。存储在那里的实际值可以是任何东西,应该无关紧要。这就是我从你透露的关于这个练习的一点信息中得到的印象,我可能错了。

如果你必须将值存储在一个
双[]
中,那么就没有简单的方法来表示未知值。理论上,任何双精度值都可以是有效值

你有两个选择

第一种方法是指定一个特定的双精度值来表示“未知”。例如,可以使用
Double.NaN
表示未知值


第二个选项是将未知的值存储在单独的结构中。您可以使用
boolean[]
Map
或甚至
列表,如果您对要完成的具体任务没有太多背景知识,您可以使用
OptionalDouble
。但是,如果您准确描述您的用例,您可能会有更多的洞察力。旧的答案是使用
Double[]
null
。更现代的答案是使用
OptionalDouble[]
,但我认为这可能不是你作业中要求的。您还可以使用
布尔[]
标记是否存在项。是否全局声明数组?它是数据成员还是在类中的方法中定义的?很难给出更多的描述。它最终将在一个课堂项目中模拟一些振动的物理现象,但对它的完整描述既长又复杂,我不确定它是否有助于回答这个问题。从根本上说,它应该是一种具有排队和出列方法的特定类型的数据结构——我不知道如何有效地说更多。如果所有其他方法都失败了,我喜欢布尔数组的想法,它可以标记值是否存在。你可以围绕双精度数组和布尔数组编写一个包装类。我得到了一个使用
double[]
的代码框架,因此我认为我没有选择余地。这是一个很好的观点,但是,我需要能够区分满数组和空数组,而且这两种情况似乎都是
first==last
的情况。所以我考虑过解决这个问题的方法,但是如果我这样做的话,我不知道如何区分空数组和满数组。我假设
first==last
是空数组,而
last-first+1==storage。length
应该是满数组的指示器。@Addem正在阅读问题描述,我的解释和亚诺斯的一样。只有当许多“空”值可以在整个数组中与有效值交错时,建议使用布尔数组或位集才有意义。但是,根据您的描述,
first
last
就足够了,而且似乎忽略该范围之外的值就可以了。