繁体   English   中英

使用字符串缓冲区时如何解决Java堆空间错误?

[英]How to resolve Java Heap Space error while using String Buffer?

尝试执行此代码时出现以下错误,但我不知道为什么。 它似乎与使用StringBuffer并附加到它有关。

代码:

class Stock {

    static String findStock(int[] arr) {
        int flag = 0;
        int begin = 0;
        int start = 0;
        int endIndex = 0;

        boolean foundStart = false;

        StringBuffer op = new StringBuffer();

        while (flag != 1) {

            //find start
            for (int i = begin; i < arr.length - 1; i++) {
                if (arr[i + 1] > arr[i]) {
                    start = arr[i];
                    endIndex = i;
                    foundStart = true;
                    break;
                }
                if (i == arr.length - 1) {
                    flag = 1;
                }
            }
            //find string

            while (arr[endIndex + 1] > arr[endIndex]) {
                endIndex++;
                if (endIndex == arr.length - 1) break;
            }
            int end = arr[endIndex];
            op.append("()");

        }
        return op.toString();
    }

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);

        int n = sc.nextInt();
        int[] arr = new int[n];

        for (int i = 0; i < n; i++) {
            arr[i] = sc.nextInt();
        }

        String output = findStock(arr);
        System.out.println(output);
    }
}

错误:

Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
    at java.util.Arrays.copyOf(Arrays.java:3332)
    at java.lang.AbstractStringBuilder.ensureCapacityInternal(AbstractStringBuilder.java:124)
    at java.lang.AbstractStringBuilder.append(AbstractStringBuilder.java:448)
    at java.lang.StringBuffer.append(StringBuffer.java:270)
    at Stock.findStock(Stock.java:43)
    at Stock.main(Stock.java:61)

您的while循环永远不会结束,因为flag永远不会是1

请参见for循环中的条件: i<arr.length-1

i==arr.length-1将永远不会为真。

您的StringBuffer会不断添加内容,直到出现OutOfMemoryError为止。

for(int i=begin; i<arr.length-1; i++){
...
 if(i==arr.length-1){
    flag = 1;
 } 

}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM