我需要为一个糟糕的化学示例编写一个代码,所以当我尝试将一个化合物的字符串分成带有它们的数字的元素时,使用数组,它会返回此错误。请注意" jelibroj"和"元素"是我在帖子中没有包含的方法,但它们都有效。
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)
这是代码。
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner sc=new Scanner(System.in);
String s= sc.nextLine();
s=s.replace("+", " ");
String [] jedinjenja = new String [(s.split(" ").length)];
jedinjenja = s.split(" ");
ArrayList<String> elementi = new ArrayList<String>();
int poc=0;
for (int i=0; i<jedinjenja.length; i++){
for (int j=0;j<jedinjenja[i].length();j++){
if(j>1){
if(jelibroj(jedinjenja[i].charAt(j))==true && element(jedinjenja[i].charAt(j-3))==true){
elementi.add(jedinjenja[i].substring(poc, j-2));
elementi.add(jedinjenja[i].substring(poc+1, j));
j=poc;
} else if(jelibroj(jedinjenja[i].charAt(j))==true && element(jedinjenja[i].charAt(j-3))==false){
elementi.add(jedinjenja[i].substring(poc, j));
j=poc;
}
}
if(jelibroj(jedinjenja[i].charAt(j))==true){
elementi.add(jedinjenja[i].substring(poc, j));
j=poc;
}
}
}
String[] stockArr = new String[elementi.size()];
stockArr = elementi.toArray(stockArr);
for(int i=0;i<stockArr.length;i++){
System.out.println(stockArr[i]);
}
}
答案 0 :(得分:1)
我注意到,在三个地方,你:
j = poc;
其中poc为0.但是你在循环中没有设置poc。这会产生无限循环,直到你的内存不足为止。
使用调试器的会话在这里可能会有所帮助。我无法计算我盯着代码的次数,错过了一个明显的问题,并且使用调试器在前额上找到了适当的打击。