Hallo zusammen,
ich habe folgende Aufgabe zu bewältigen:
Entwickeln Sie eine rekursive Java-Methode int rmeth(int left, int right, int z);
die in einem Array von Integer-Zahlen mit Hilfe des Teile-und-herrsche-
Prinzips alle Zahlen, die durch z teilbar sind, durch 0 ersetzt und die Anzahl,
wieviele Ersetzungen durchgefÄuhrt worden sind, als RÄuckgabewert zurÄucklie-
fert.
Folgend mein Code, leider ist aber die Aussgabe nicht richtig, da er einfach alle Feldkomponenten ausgibt. Die System.out.println Anweisungen in der while-Schleife dienen nur zum manuellen Debuggen. Leider bis her ohne Erfolg.
In der Konsole wird ausgeben:
Was ich nicht verstehe??? Wahrscheinlich sehe ich den Wald vor lauter Bäumen nicht mehr, aber ich find da keinen grundsätzlichen Fehler.
Es wäre wirklich hilfreich wenn mich jemand bei der Fehlersuche unterstützt, denke es ist ein Anfängerfehler!
Daher greenhorn ;-)
Gruß und danke im Voraus
ich habe folgende Aufgabe zu bewältigen:
Entwickeln Sie eine rekursive Java-Methode int rmeth(int left, int right, int z);
die in einem Array von Integer-Zahlen mit Hilfe des Teile-und-herrsche-
Prinzips alle Zahlen, die durch z teilbar sind, durch 0 ersetzt und die Anzahl,
wieviele Ersetzungen durchgefÄuhrt worden sind, als RÄuckgabewert zurÄucklie-
fert.
Folgend mein Code, leider ist aber die Aussgabe nicht richtig, da er einfach alle Feldkomponenten ausgibt. Die System.out.println Anweisungen in der while-Schleife dienen nur zum manuellen Debuggen. Leider bis her ohne Erfolg.
Java:
public class Main {
public Main (int z, int... array) {
this.array = array;
rmeth(0, array.length-1, z);
System.out.println("Ersetzungen: " +count);
System.out.println("Array: " + java.util.Arrays.toString(array));
}
private final int[] array;
private int count = 0;
public int rmeth(int left, int right, int z) {
int i = 0;
int j = array.length-1;
i = left;
j = right;
//Quick sort
int pivot = array[(left + right)/2];
System.out.println("vor"); //zum Debuggen
while(i <= j){
while(array[i] < pivot && i < j){
i++;
System.out.println("array[i]: " +array[i]); //zum Debuggen
System.out.println("pivot: " +pivot); //zum Debuggen
}
while(array[j] >= pivot && j > i){
j--;
System.out.println(array[j]);
System.out.println(pivot);
}
if(i < j){
if(((pivot/z)%2)==0){
pivot = 0;
count++;
}
i++;
j--;
}
}
System.out.println("nach2"); //zum Debuggen
//Rekursion
if(left < j){
rmeth(left, j, z);
}
if(i < right){
rmeth(i,right, z);
}
return count;
}
public static void main(String... args) {
new Main(3, 6,9,12,5,7,5,3,14);
}
}
In der Konsole wird ausgeben:
Code:
vor
3
5
7
5
5
5
12
5
9
5
Was ich nicht verstehe??? Wahrscheinlich sehe ich den Wald vor lauter Bäumen nicht mehr, aber ich find da keinen grundsätzlichen Fehler.
Es wäre wirklich hilfreich wenn mich jemand bei der Fehlersuche unterstützt, denke es ist ein Anfängerfehler!
Daher greenhorn ;-)
Gruß und danke im Voraus
Zuletzt bearbeitet: