2016-07-29 50 views
1

我期望以下代碼返回(0,0)值。然而,我得到一個Java對象aget在應用到`make-array`數組時返回java對象

(let [axs (make-array Long 5 5 0)]                                                            
    (aget axs 0 0))   

我也試圖變異索引時,得到了一個類型不匹配(0,0)

(let [axs (make-array Long 5 5 0)]                                                            
    (aset axs 0 0 1)) 

我希望有一個初始化龍[5] [5]的java數組歸零。我在這裏錯過了什麼?

感謝

+1

首先你的數組沒有初始化,其次如果你想要一個二維數組,你必須在你的make-array的末尾刪除0 –

回答

3

第三個參數make-array不初始化用零的陣列,但增加了第三排的尺寸,其大小等於零。結果,你的數組的大小也是零。要解決此問題,創建數組如下:

(make-array Long/TYPE 5 5) 

這將創建原始多頭陣列,將用零初始化。

+1

'Long/TYPE'是表示原始long類的類文字(與'java .lang.Long'指示包裝器類或盒子),所以'(make-array Long/TYPE 5 5)* *創建一個2d的基元長度數組。 – sw1nn

+0

@ sw1nn這是正確的!我確定在REPL中''(類型爲(make-array Long/TYPE 5 5))''爲我返回了[[Ljava.lang.Long;',但實際上它返回'[[J'。可能我已經搞砸了。我已經回覆了它的初始版本 – OlegTheCat