有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

Java返回错误

我需要为一个糟糕的化学示例编写一个代码,因此,当我尝试使用数组将化合物字符串拆分为元素,元素旁边有数字时,它会返回此错误。请注意,“jelibroj”和“element”是我在文章中没有包含的方法,但它们都可以工作

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]);
    }
}

共 (1) 个答案

  1. # 1 楼答案

    我注意到,在三个地方,您:

    j = poc;
    

    其中poc为0。但在循环中没有任何地方设置poc。这将产生创建一个无休止循环的效果,直到内存耗尽

    在这里,使用调试器的会话可能会有所帮助。我记不清有多少次我盯着代码看,遗漏了一个明显的问题,然后用调试器适当地敲了一下脑门发现了它