2014-02-17 135 views
1

我希望輸入一個int和另一個long ex:1和1000000000,現在我希望創建一個大小爲1000000000的數組。然後在數組的每個索引處存儲int val,ex :arr[100000000] = 4可能有損從long轉換爲int

當我試圖做到這一點的Netbeans顯示我在這一行錯誤:

arr = new long[y+1]` and `arr[j] = 0` 

「從長到int可能有損轉換」。 這裏是我的代碼: -

public static void main(String[] args) throws IOException  
{  
    BufferedReader s = new BufferedReader(new InputStreamReader(System.in));   
    String[] xe = s.readLine().split(" ");   
    int x = Integer.parseInt(xe[0]);   
    long y = Long.parseLong(xe[1]); 
    long []arr;  
    arr = new long[y+1];  
    for(long j=0;j<=y;j++)  
    arr[j] = 4;  
} 
+0

的一個十億可以存儲爲一個'int'爲極限是2.1〜十億。注意:十億個「長」值使用8 GB內存。如果你只有幾個值可以設置,那麼'Map '可能會更好。 –

回答

6

數組索引在Java中的整數,編譯器會建議你。所以最大數組大小(大致)爲Integer.MAX_VALUE。對於更大的數組,你應該使用ArrayList。

去走一走這條土&快速

arr = new long[(int)y+1]; 
+0

所以當我們從1000000000的類型轉換到int ...我想我們以這種方式丟失了一些位.. – ranaarjun

+0

一個'ArrayList'在內部存儲一個數組,所以它將不能保持大量的元素。 – Marco13

+0

@ranaarjun是的,你可能會遇到一個runntime錯誤。 – PeterMmm

1

你需要轉換/施放Ÿ和j爲int。 同樣,當你剛加1時,你的增量var不應該太長。

1

數組的大小隻能是int。那就是你,不能創建大於Integer.MAX_VALUE(2147483647)的數組,可能只有少數幾個元素(取決於VM)。您可以將您的值轉換爲int

arr = new long[(int)(y+1)]; 

但這會產生無效的結果時的y值實際上比允許的最大尺寸。

+0

如果MAX_VALUE是10^11或更大。那麼我們如何聲明一個Array ... – ranaarjun

+0

沒有自己的數據結構或專用庫,這是不可能的,例如, http://code.google.com/p/vanilla-java/wiki/HugeCollections(這是第一個網絡搜索結果 - 不是建議,只是提示) – Marco13

+0

Okayee sir ... thanx .. @Macro – ranaarjun

1
  1. 不能創建擁有超過2^31-1條目的數組,因此,當你這樣做(編譯器僅僅是警告你的尺寸將被截斷從longint應該使用int值)。 1000000000是足夠小,以適應int,所以你基本上沒有理由使用long y爲了存儲這個值在第一位。

  2. 根據你的描述,數組本身被指定爲存儲int的值,所以它不需要是數組的long值。

總之,你可以和應該在你的代碼改變每longint

1

我想你對這裏的類型轉換有一些誤解。在Java中已經提到您可以向下它轉換成整數

arr = new long[(int)(y+1)]; 

但這裏的主要問題是,數組分配應取整數值,以使同樣數量的同質空間可分配下來鑄造是允許的。 如果你想要比整數範圍更多的空間,那麼你應該使用ArrayList,它是可動態增長的數組,因爲如果我們給用戶很大的責任來聲明大量的數組內存,那麼我們的系統可能會耗盡內存作爲數組是一個靜態內存分配數據結構。 同爲

arr[j]=4; 

代表真正的它應該是:

arr[(int)j]=4;