2016-07-31 77 views
2

我正在寫一個Java程序,其中包含一個包含數組和索引的對象firstlast以表示數組中定義值的位置。例如,如果一個長度爲8的雙數組除了在第3,第4和第5個座標上是空白的,就像[_, _, _, -1.0, 4.2, -5.9, _, _]那麼first將存儲3並且last將存儲6(比定義值的最後一個位置多一個) 。但是,我不知道如何在Java數組中使用空值。它將一切初始化爲0.0,我無法將空值分配給任何座標。你如何在Java中表現爲空?

我需要爲這個任務使用數組,所有0.0的數組應該被認爲是滿的,所以我不能只是選擇將其解釋爲空。

感謝您的任何幫助。

+1

沒有太多的背景知道你想完成什麼特定的任務,你可以使用'OptionalDouble'。但是,如果你描述你的用例,你可能會有更多的見解。 – Tunaki

+2

舊的答案是使用'Double []'和'null'。更現代的答案是使用'OptionalDouble []',但我認爲這可能不是你的任務所要求的。你也可以使用'boolean []'來標記一個項目是否存在。 –

+0

你是在全局聲明數組嗎?它是一個數據成員還是你在你的類中的方法中定義它? –

回答

8

您可以使用null來表示參考類型的「未定義」。 A double不能是null(原始類型,不是參考類型),但Double可以。因此,您可以使用Double[]而不是double[]

但是你確定你需要關心「未定義」的值嗎?在我看來,知道任何低於first和高於last的索引都包含未定義的值是您數據結構的責任。也就是說,不知道存儲在這些索引處的實際值。存儲在那裏的實際值可能是任何東西,應該沒有關係。這是我從你透露的練習中得到的一點印象,我可能是錯的。

+0

然而,這是一個很好的觀點,我需要能夠區分完整數組和空數組,並且都似乎是'first == last'的情況。所以我想過這種解決問題的方法,但是如果我走這條路線,我沒有看到如何區分全空陣列和空陣列。 – Addem

+1

我想'first == last'是一個空數組,而'last - first + 1 == storage.length'應該是完整數組的指示符。 – janos

+0

@Addem閱讀問題描述,我的解釋和janos'一樣。如果在整個陣列中許多「空」值可以與有效值交織,那麼只有布爾數組或位集的建議纔有意義。從你的描述來看,'first'和'last'就足夠了,而且聽起來好像忽略了那個範圍以外的值可以正常工作。 – erickson

1

如果你的數組是基本類型double [],那麼它不能爲null。然而Double [](大寫)是允許空值的原語的對象包裝。

+0

我被給了一個使用'double []'的代碼框架,所以我不認爲我有這個選擇。 – Addem

0

如果您必須將值存儲在double[]中,那麼不容易表示未知值。任何雙重價值理論上都可以成爲有效的價值。

您有兩種選擇。

第一種是指定一個特定的雙值來表示「未知」。例如,您可以使用Double.NaN來表示未知值。

第二個選項是將未知值存儲在單獨的結構中。您可以使用boolean[]Map<Integer,Boolean>或甚至List<Integer(保存所有未知指數)。