Hallo zusammen!
Ich habe eine Frage und zwar zu folgendem Code, bei welchem ich die maximale Summe eines arrays ausrechnen möchte:
Beim compile erhalte ich folgenden Error bei der Konsole:
Was mache ich falsch?
Ich hoffe mir kann jemand weiterhelfen...
Grüsse
Default
Ich habe eine Frage und zwar zu folgendem Code, bei welchem ich die maximale Summe eines arrays ausrechnen möchte:
Code:
import java.util.concurrent.ForkJoinPool;
import java.util.concurrent.RecursiveTask;
public class MaxSubArraySum extends RecursiveTask<Integer> {
private static final long serialVersionUID = 1L;
int start;
int length;
int[]input;
final int CUTOFF;
public MaxSubArraySum(int start, int length, int[] input, int CUTOFF) {
this.CUTOFF = CUTOFF;
this.start = start;
this.length = length;
this.input = input;
}
public static class MaxSumHelper {
public static Integer MaximumSum(int[] input, int start, int i) {
int max = 0;
for (int j = 0; j < input.length-1; j++) {
if (input[i] + input[i + 1] > input[i]) {
max = input[i] + input[i + 1];
}
}
return max;
}
}
@Override
public Integer compute() {
if (length <= CUTOFF) {
return MaxSumHelper.MaximumSum(input, start, input.length);
}
// Split work:
int mid = length / 2;
MaxSubArraySum lm = new MaxSubArraySum(start, mid, input, CUTOFF);
MaxSubArraySum rm = new MaxSubArraySum(start+mid, length, input, CUTOFF);
// Run subtasks:
lm.fork();
int max2 = rm.compute();
// Find maximum subarray sum crossing right middle border
int rightMax = 0;
int sumright = 0;
for (int i = start+mid; i < input.length-1; i++) {
sumright += input[i];
if(sumright > rightMax)
rightMax = sumright;
}
// Find maximum subarray sum crossing left middle border
int leftMax = 0;
int sumleft = 0;
for (int i = start+mid - 1; i >= start; i--) {
sumleft += input[i];
if(sumleft > leftMax)
leftMax = sumleft;
}
// Combine results:
try {
return Math.max(leftMax + rightMax, Math.max(lm.join(), max2));
} catch (Exception e) {
return 0;
}
}
public static void main(String[] args) {
int[]input = new int[]{2,-4,1,9,-6,7,-3};
MaxSubArraySum top = new MaxSubArraySum(0, input.length, input, 4);
ForkJoinPool maxsum = new ForkJoinPool();
int result = maxsum.invoke(top);
try {
System.out.println(result);
} catch (Exception e) {
}
}
}
Beim compile erhalte ich folgenden Error bei der Konsole:
Code:
Exception in thread "main" java.lang.StackOverflowError
at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
at java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:490)
at java.base/java.util.concurrent.ForkJoinTask.getThrowableException(ForkJoinTask.java:603)
at java.base/java.util.concurrent.ForkJoinTask.reportException(ForkJoinTask.java:678)
at java.base/java.util.concurrent.ForkJoinTask.join(ForkJoinTask.java:722)
at java.base/java.util.concurrent.ForkJoinPool.invoke(ForkJoinPool.java:2423)
at ForkJoin.MaxSubArraySum.main(MaxSubArraySum.java:82)
Caused by: java.lang.StackOverflowError
Was mache ich falsch?
Ich hoffe mir kann jemand weiterhelfen...
Grüsse
Default