Hi, ich hatte schon einmal ein Thema eröffnet, es ging darum, dass zu einem Array, welches Integerzahlen enthält, die jeweiligen Fibonacci-Zahlen berechnet werden sollen. Zwar in einem separaten Thread für jede Fibozahl
Hier einmal der Code:
Mal davon abgesehen, dass ich nicht weiß, wie das ohne Klassenvariablen gehen soll und das noch nicht synchronisiert ist ...
Wenn ich an die Methode ein Array mit Integerzahlen wie hier in der Testklasse übergebe
, dann passiert da rein garnix
Er gibt mir 40,40,40,40,40,40 aus anstatt irgendne Zahl > 1 Mio ...
Liegt es evtl an der ersten Zeile in der fibMT?
mtArray = new int[numberArray.length]; ? Kann es sein, dass hier ein IntArray Objekt angelegt wird, welches rein garnix mit meinem mtArray zu tun hat?
Wie schaffe ich es dann, den übergebenen Array in mtArray zu kopieren?
Wäre echt super, wenn mir jemand helfen könnte
MFM[/code]
Hier einmal der Code:
Code:
public class FibCalc {
// tmp-Array für die MultiThreadingMethode
static int[] mtArray;
// Thread/Feldcounter für die MultiThreadingMethode
static int cnt;
public static int fib(int n) throws FibException {
// Fehlerbehandlung
if (n < 0 || n > 40) {
throw new FibException(n);
}
int fibonacci;
// AbbruchBedingungen
if (n == 0) {
return 0;
}
if (n == 1) {
return 1;
}
// Rekursionsschritt
else {
return fibonacci = fib(n - 1) + fib(n - 2);
}
}
public static int[] fibMT(int numberArray[]) {
mtArray = new int[numberArray.length]; // <<<--- Liegt hier der Hund begraben??
// kopiere das übergebene Array in das statische mtArray
System.arraycopy(numberArray, 0, mtArray, 0, numberArray.length);
for (int i = 0; i < mtArray.length; i++) {
cnt = i;
new Thread(new Runnable() {
public void run() {
try {
mtArray[cnt] = FibCalc.fib(mtArray[cnt]);
} catch (FibException e) {
mtArray[cnt] = -1;
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}).start();
}
return mtArray;
}
}
Mal davon abgesehen, dass ich nicht weiß, wie das ohne Klassenvariablen gehen soll und das noch nicht synchronisiert ist ...
Wenn ich an die Methode ein Array mit Integerzahlen wie hier in der Testklasse übergebe
, dann passiert da rein garnix
Code:
public class TestKlasse {
public static void main(String[] args) {
int[] array = {40,40,40,40,40,40};
array = FibCalc.fibMT(array);
for (int i=0; i<array.length; i++){
System.out.println(array[i]);
}
}
}
Er gibt mir 40,40,40,40,40,40 aus anstatt irgendne Zahl > 1 Mio ...
Liegt es evtl an der ersten Zeile in der fibMT?
mtArray = new int[numberArray.length]; ? Kann es sein, dass hier ein IntArray Objekt angelegt wird, welches rein garnix mit meinem mtArray zu tun hat?
Wie schaffe ich es dann, den übergebenen Array in mtArray zu kopieren?
Wäre echt super, wenn mir jemand helfen könnte
MFM[/code]