在尝试执行此代码时出现以下错误,我无法弄清原因。它似乎与使用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)
答案 0 :(得分:5)
您的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;
}
}