2017-09-29 47 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在所有情况下都不能保证给出错误,但那又如何?这显然是发生了什么。 –