2017-04-08 82 views
2

我試圖分離出長整數的數字,以便它可以表示爲整數數組 Java中的長整型轉換給出不正確的結果

12345......888  as [1,2,3,4,......8,8,8] 

在通常的方式,我取N%10取出最後一位數字和n/10的人數減少,即

public static void main(String[] args) { 
    long temp = 111111111111111110L; 
    while(temp>0){ 
     System.out.println("----------"); 
     System.out.println(temp%10); 
     System.out.println((int)temp%10); 
     temp=temp/10; 
    } 
} 

TEMP%10給出正確的結果。但它不能直接添加到int列表中。如果我嘗試鍵入強制轉換,則在前幾次迭代中會得到不正確的結果。 輸出

---------- 
0 
-2 
---------- 
1 
9 
---------- 
1 
-5 
---------- 
1 
1 
---------- 
1 
9 
---------- 
1 
-3 
---------- 
1 
-5 
---------- 
1 
-7 
---------- 
1 
1 
---------- 
1 
1 
---------- 
1 
1 
---------- 
1 
1 
---------- 
1 
1 
---------- 
1 
1 
---------- 
1 
1 
---------- 
1 
1 
---------- 
1 
1 
---------- 
1 
1 

我使用的解決辦法是

int digitArray[] = new int[somenumber]; 
String s = Long.toString(n); 
for(int i=0;i<s.length();i++){ 
    digitArray[i]=Integer.parseInt(""+s.charAt(i)); 
} 

但我很好奇,爲什麼類型轉換並不在第一種方式工作時數爲型鑄造是個位數,即井內的長距離。

回答

8

表達式評估規則導致此問題。

你這麼做的時候

(int)temp%10 

其實大long價值temp被強制轉換爲int導致integer溢出,

你的意思

(int)(temp%10) 
+0

感謝。我很愚蠢!這樣愚蠢的事情;我爲自己感到羞恥,我在第一時間犯了這個錯誤,而且我甚至無法弄清楚。 –

相關問題