AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Delphi-PRAXiS - Lounge Klatsch und Tratsch [Java] Problem mit rekusiver Methode
Thema durchsuchen
Ansicht
Themen-Optionen

[Java] Problem mit rekusiver Methode

Ein Thema von Xzeer · begonnen am 25. Nov 2011 · letzter Beitrag vom 27. Nov 2011
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von Xzeer
Xzeer

Registriert seit: 6. Jul 2007
106 Beiträge
 
#1

[Java] Problem mit rekusiver Methode

  Alt 25. Nov 2011, 19:20
Hallo,

Ich studiere Informatik und heute mussten wir in einem Testat eine rekusive Methode entwickeln, die das hier leistet:

Grundgerüst der Methode:
Code:
public static int b(int[] arr, int i){...}
Aufgabe:
Zitat:
Es soll geprüft werden, ob alle Elemente in arr positiv sind. Wenn ja soll 1 zurückgegeben werden, sonst 0. Die Methode MUSS rekusiv sein und für alle i funktionieren. Wird ein Wert für i übergeben, der außerhalb von arr liegt, soll -1 zurückgeben werden. Die Parameterliste von b DARF NICHT ergänzt werden.
Wie würde eine solche Methode bei euch aussehen?

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;
            }
        }
    }
Marvin
Xzeer
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.648 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: [Java] Problem mit rekusiver Methode

  Alt 25. Nov 2011, 19:34
Was möchtest du denn mit dieser Zeile erreichen? Überlege dir einmal genau was dort passiert...
Code:
return 1 + b(arr, i + 1);
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.

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.
Sebastian Jänicke
AppCentral
  Mit Zitat antworten Zitat
Benutzerbild von Xzeer
Xzeer

Registriert seit: 6. Jul 2007
106 Beiträge
 
#3

AW: [Java] Problem mit rekusiver Methode

  Alt 25. Nov 2011, 19:47
Das ist mir im Testat dann auch aufgefallen, deshalb ja auch die Ergbniskosmetig im äußersten else-Block.
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:
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;
        }
    }
So irgendwie muss das doch klappen, oder?
Nur ich komme nicht drauf, wie ich den Rest ausdrücke... doch nicht als b(arr, i + 1) > 0
Marvin
Xzeer

Geändert von Xzeer (25. Nov 2011 um 19:50 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.648 Beiträge
 
Delphi 11 Alexandria
 
#4

AW: [Java] Problem mit rekusiver Methode

  Alt 25. Nov 2011, 19:58
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"?
Sebastian Jänicke
AppCentral
  Mit Zitat antworten Zitat
Benutzerbild von Xzeer
Xzeer

Registriert seit: 6. Jul 2007
106 Beiträge
 
#5

AW: [Java] Problem mit rekusiver Methode

  Alt 25. Nov 2011, 20:02
Nein!

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...
Marvin
Xzeer
  Mit Zitat antworten Zitat
Benutzerbild von patti
patti

Registriert seit: 20. Okt 2004
Ort: Mittelfranken
665 Beiträge
 
Turbo Delphi für Win32
 
#6

AW: [Java] Problem mit rekusiver Methode

  Alt 25. Nov 2011, 21:32
und für alle i funktionieren
Was genau soll das heißen?

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:
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;
}
Patrick Kreutzer
[Informatik-Student im 4. Semester]
http://www.patti-k.de/
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.648 Beiträge
 
Delphi 11 Alexandria
 
#7

AW: [Java] Problem mit rekusiver Methode

  Alt 25. Nov 2011, 22:37
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.
Sebastian Jänicke
AppCentral
  Mit Zitat antworten Zitat
blackfin
(Gast)

n/a Beiträge
 
#8

AW: [Java] Problem mit rekusiver Methode

  Alt 26. Nov 2011, 01:07
Zitat:
Wie froh bin ich doch, dass es den Konditionaloperator so in Delphi nicht gibt...
Wie unterschiedlich hier Meinungen sein können...der Konditionaloperator ist eines der Features, die ich in Delphi vermisse...ich finde ihn teilweise besser lesbar ein ein Wust aus Klammern oder if-then-elses.
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

Geändert von blackfin (26. Nov 2011 um 01:20 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von patti
patti

Registriert seit: 20. Okt 2004
Ort: Mittelfranken
665 Beiträge
 
Turbo Delphi für Win32
 
#9

AW: [Java] Problem mit rekusiver Methode

  Alt 26. Nov 2011, 11:35
Zugegebenermaßen ist allerdings die Zeile von patti nicht soooo gut zu lesen
War auch nicht 100% ernst gemeint
Aber prinzipiell finde ich die Idee des Operators wirklich an manchen Stellen gar nicht so schlecht
Patrick Kreutzer
[Informatik-Student im 4. Semester]
http://www.patti-k.de/
  Mit Zitat antworten Zitat
Benutzerbild von BUG
BUG

Registriert seit: 4. Dez 2003
Ort: Cottbus
2.094 Beiträge
 
#10

AW: [Java] Problem mit rekusiver Methode

  Alt 26. Nov 2011, 15:10
Aber prinzipiell finde ich die Idee des Operators wirklich an manchen Stellen gar nicht so schlecht
Die Benennung ist nur etwas kryptisch. In einigen funktionalen Programmiersprachen (afaik Haskell) gibt es einen "if ... then ... else ..."-Operator der so funktioniert. Da ist dieses Konzept völlig einleuchtend.
Intellekt ist das Verstehen von Wissen. Verstehen ist der wahre Pfad zu Einsicht. Einsicht ist der Schlüssel zu allem.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:15 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz