簡體   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