[英]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.