2017-09-29 44 views
0
ArrayList<Integer> digitList = new ArrayList<Integer>(); 
ArrayList<Integer> newBase = new ArrayList<Integer>(); 

public void toX(int base, int oNum) { 
    while(base > 0) { 
     digitList.add(base % 10); 
     base /= 10; 
    } 
    int[] digits = digitList.stream().mapToInt(i->i).toArray(); 
    for(int i = 0; i<digits.length/2; i++) { 
     int a = digits[i]; 
     digits[i] = digits[digits.length -i -1]; 
     digits[digits.length -i -1] = a; 
    } 
    System.out.println(Arrays.toString(digits)); 
    for(int i = 0; i < digits.length; i++) { 
     total += digits[i]; 
    } 
    System.out.println(total); 
    while(total >= 0) { 
     if(total >= oNum) { 
     newBase.add(total - oNum); 
     total -= oNum; 
     System.out.println(total); 
     } 
     else { 
      newBase.add(total); 
     } 
    } 
    int[] ans = newBase.stream().mapToInt(i->i).toArray(); 
    System.out.println(Arrays.toString(ans)); 
} 

此方法用於將基數10中的數字轉換爲baseX中的數字。它畫完了,我不斷收到多個錯誤:java.lang.OutOfMemoryError:stream.mapToInt()/ ArrayLists上的Java堆空間

Exception in thread "main" java.lang.OutOfMemoryError: Java heap space 
    at java.util.Arrays.copyOf(Unknown Source) 
    at java.util.Arrays.copyOf(Unknown Source) 
    at java.util.ArrayList.grow(Unknown Source) 
    at java.util.ArrayList.ensureExplicitCapacity(Unknown Source) 
    at java.util.ArrayList.ensureCapacityInternal(Unknown Source) 
    at java.util.ArrayList.add(Unknown Source) 
    at BaseConverter.toX(BaseConverter.java:34) 

線33-35是:

else { 
    newBase.add(); 
} 

我覺得現在的問題從陸續建成,但是我非常缺乏經驗與流的ArrayList 。

+1

我發現'oNum = 0'的無限循環問題。此外,你可以這麼一些'mapToInt'技巧來反轉數字而不需要循環:https://stackoverflow.com/questions/24010109/java-8-stream-reverse-order –

+0

想想如果total> = 0會發生什麼但小於oNum;) –

回答

0
while(total >= 0) { 
    if(total >= oNum) { 
     newBase.add(total - oNum); 
     total -= oNum; 
     System.out.println(total); 
    } 
    else { 
     newBase.add(total); 
    } 
} 

如果碰到else分支,它會繼續增加項目newBase不改變total,導致一個無限循環。

+0

對於大多數情況,這是不正確的,因爲如果total> = oNum'條件得到滿足,則總數減去'oNum'。 – CrazySabbath

+1

@CrazySabbath在所有情況下都不能保證給出錯誤,但那又如何?這顯然是發生了什麼。 –