![]() |
[Java] Problem mit rekusiver Methode
Hallo,
Ich studiere Informatik und heute mussten wir in einem Testat eine rekusive Methode entwickeln, die das hier leistet: Grundgerüst der Methode:
Code:
Aufgabe:
public static int b(int[] arr, int i){...}
Zitat:
Meine Lösung (glaube ich nicht ganz richtig):
Code:
public static int b(int[] arr, int i)
{ if ((i >= 0) && (i < arr.length)) { if (arr[i] > 0) { return 1 + b(arr, i + 1); } else { return 0; } } else { if (arr.length > 1) { return -1; } else { return 0; } } } |
AW: [Java] Problem mit rekusiver Methode
Was möchtest du denn mit dieser Zeile erreichen? Überlege dir einmal genau was dort passiert...
Code:
Was du eigentlich willst ist doch an der Stelle 1 zurückzugeben, wenn auch die restlichen Elemente positiv sind. Das musst du dann aber auch prüfen und je nach Rückgabewert den passenden Wert zurückliefern.
return 1 + b(arr, i + 1);
Das einfache Addieren wird in der derzeitigen Form nicht funktionieren. Denn dann würdest du z.B. bei einem array mit drei positiven Zahlen 1 + 1 + 1 + (-1) zurückliefern, also nicht 1, obwohl alle drei Werte positiv sind. Das solltest du am besten einmal im Debugger ausprobieren was passiert. |
AW: [Java] Problem mit rekusiver Methode
Das ist mir im Testat dann auch aufgefallen, deshalb ja auch die Ergbniskosmetig im äußersten else-Block. :stupid:
Damit stimmt das Ergebnis dann für b({8}, 0) zum Beispiel wieder... Ich habe zwar grundlegend einen Ansatz nur fehlt mir ein Teil davon:
Code:
So irgendwie muss das doch klappen, oder?
public static int b(int[] arr, int i)
{ if ((i >= 0) && (i < arr.length)) { if ((arr[i] > 0) && (na eben der Rest)) { return 1; } else { return 0; } } else { return -1; } } Nur ich komme nicht drauf, wie ich den Rest ausdrücke... doch nicht als b(arr, i + 1) > 0 :gruebel: |
AW: [Java] Problem mit rekusiver Methode
Größer als Null reicht ja nicht, nein. Denn wenn das Array zu Ende ist, kommt ja -1 zurück, auch das wäre ja ok. Wie wäre es also mit "ungleich Null"? ;-)
|
AW: [Java] Problem mit rekusiver Methode
Nein! :oops:
Ich wusste dass ich nur ein kleines Stück daneben lag, nur wollte mir das einfach nicht einfallen. Aber vielen Dank für deine Hilfe, jetzt leuchtet es mir ein... |
AW: [Java] Problem mit rekusiver Methode
Zitat:
Denn deine Methode (so wie sie jetzt dastehen würde), würde nur für i=0 als Startwert funktionieren, da sonst Elemente ignoriert werden. Ansonsten kann man das Ganze auch noch ein bisschen zusammenfassen:
Code:
:mrgreen:
public static int positive(int[] array, int i)
return (i >= array.length || i < 0) ? -1 : (array[i] > 0 && positive(array, i+1) != 0) ? 1 : 0; } |
AW: [Java] Problem mit rekusiver Methode
Wie froh bin ich doch, dass es den Konditionaloperator so in Delphi nicht gibt... ;-)
Das ist wie bei Perl oder anderen absichtlich kryptisch entwickelten Sprachen: Einmal den Code schreiben und bei nötigen Änderungen geht es schneller es neu zu schreiben als sich in den alten Code einzulesen... Solche Konstrukte sind nur für Wettbewerbe um den kryptischsten Code oder zum Angeben sinnvoll. ;-) |
AW: [Java] Problem mit rekusiver Methode
Zitat:
Vor allem in einer IDE mit vernünftigem Syntax-Highlighting hatte ich fast noch nie Probleme, diese ?: Statements zu lesen. Und zum Angeben taugt der schon gar nicht. Meine Nicht-IT-affine Freundin hat z.B. komischerweise den Konditionaloperator in php eher verstanden als das normale if-klammer-Konstrukt :-) Zugegebenermaßen ist allerdings die Zeile von patti nicht soooo gut zu lesen :-)..mehrere Konditionaloperatoren in einer Zeile verabscheue ich auch, da trifft das Gesagte von jaenicke dann doch zu :-D |
AW: [Java] Problem mit rekusiver Methode
Zitat:
Aber prinzipiell finde ich die Idee des Operators wirklich an manchen Stellen gar nicht so schlecht ;) |
AW: [Java] Problem mit rekusiver Methode
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:08 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz