Methoden warum macht die Methode nicht das was ich erwarte?

B

BigMemo007

Aktives Mitglied
Hallo liebes Forum,

klar, der Fehler liegt bei mir. Aber warum funktioniert dieser Code

Java:
static int erg = 0;
    
    public static int gcdWithIf(int a, int b) {
        int rest = a % b;
        
        if (rest == 0) {
            erg = b;
        } else {
            gcdWithIf(b, rest);
        }
    
        return erg;
    }

Mit Aufruf

Java:
System.out.println("GCD with-If:");

        System.out.println(gcdWithIf(20, 8));  // ergebnis 4

        System.out.println(gcdWithIf(60,96)); // ergebins 12

Und dieser nicht:

Java:
public static int gcdWithIfNotEqual(int a, int b) {
        int rest = a % b;
        
        if (rest != 0) {
            gcdWithIf(b, rest);
        }
    
        return b;
    }

Mit Aufruf

Java:
System.out.println("\nGCD with-IfNotEqual:");
        System.out.println(gcdWithIfNotEqual(20, 8)); //liefert falscherweise 8 zurück
        System.out.println(gcdWithIfNotEqual(60,96)); // liefert falscherweise 96 zurück

Ich wollte eigentlich Variablen spaaren, Aber grundsätliche Frage. Warum wird mein "int b" nicht angepasst. Es findet doch hier eine Rekursion statt. B behält die ursprünglichen Werte bei. In anderen Programmiersprachen scheint das zu klappen, dass Variablen bei Rekursionen ihre Werte verändertn / anpassen.
 
mihe7

mihe7

Top Contributor
Warum wird mein "int b" nicht angepasst.
Weil Dein b ein Parameter ist und somit jeder Methodenaufruf sein b bekommt. Der rekursive Aufruf erhält somit eine Kopie des b des vorangegangenen Aufrufs.

In anderen Programmiersprachen scheint das zu klappen
Ja, das ist durchaus möglich. Eine in JavaScript per var deklarierte Variable hat z. B. keinen Block-Scope. In anderen Sprachen kann man ggf. auch angeben, ob der Parameter als Referenz oder als Wert (Kopie) übergeben werden soll.
 
kneitzel

kneitzel

Top Contributor
Vor allem: Das erste Codestück funktioniert nur, weil Du
Java:
static int erg = 0;
zum Speichern des Ergebnises nutzt.

Und bei einem Aufruf von wegen
Java:
gcdWithIf(b, rest);
sollte es auch jedem kalt dem Rücken runter laufen ...

Das ist wie:
Jeder, der Dir Geld geben will, legt es einfach im Park auf die Parkbank. Das tolle ist: Wenn ich Dir 1€ zurück gebe und da liegen schon 10.000€, dann darf ich die 10.000€ mitnehmen ... Das ist echt geil!

Also wenn Dir jemand Geld geben soll, dann willst Du doch, dass er Dir das Geld in die Hand gibt. Und dann packst Du es auch gleich sicher weg.
==> Mach das auch bei Methodenaufrufen. Die Methode gdcWithIf gibt einen Wert zurück. Nimm diesen entgegen und mach was damit!

==> Pack Sachen nicht einfach auf irgendwelche Parkbänke! Auch wenn die Parkbank auf dem Deinem Grundstück ist und das Tor zu ist. Also schmeiß so static Variablen weg!

Die Methode mag als Hilfsmethode static sein - Designdinge muss man hier nicht noch weiter rein packen... aber dann sieht die Methode so aus:

Java:
    public static int gcdWithIf(int a, int b) {
        int rest = a % b;
        int erg;
        
        if (rest == 0) {
            erg = b;
        } else {
            erg = gcdWithIf(b, rest);
        }
    
        return erg;
    }

Erg ist eine rein lokale Variable und das Ergebnis vom Methodenaufruf wird gespeichert!
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
V Switch Methode macht Code kaputt Java Basics - Anfänger-Themen 18
J Was genau macht die Methode close() im InputStream? Java Basics - Anfänger-Themen 5
B Was macht diese Methode? Java Basics - Anfänger-Themen 9
P Was macht diese methode Java Basics - Anfänger-Themen 2
G Methoden Was genau macht die Methode light.setInfluencingBounds ? Java Basics - Anfänger-Themen 5
H Was macht diese Methode? Java Basics - Anfänger-Themen 3
alderwaran closed source jar, kein javadoc. was macht methode x eigentlich? ( oracle forms pjc beans ) Java Basics - Anfänger-Themen 2
T aufruf methode in methode macht probleme Java Basics - Anfänger-Themen 9
E Macht Java Rechenfehler beim Potenzieren und Mod? Java Basics - Anfänger-Themen 5
N Was macht die Klasse? Java Basics - Anfänger-Themen 3
T Was macht diese Zeile? Java Basics - Anfänger-Themen 9
R getUserProperties() macht für mich keinen Sinn Java Basics - Anfänger-Themen 8
L Was genau macht -> Java Basics - Anfänger-Themen 18
U Best Practice Fehleranalyse, welche Fehler macht Ihr beim Lernen bzw. auch später Java Basics - Anfänger-Themen 12
L Hilfe! Was macht dieser Code? Java Basics - Anfänger-Themen 1
C Was macht `public class ClassName<T extends Comparable<T>>`? Java Basics - Anfänger-Themen 14
M Was macht super (...)? Java Basics - Anfänger-Themen 1
Tommy135 Klassen jComboBox macht nicht was sie soll Java Basics - Anfänger-Themen 4
J JButton macht was er will Java Basics - Anfänger-Themen 3
R While-Schleife macht nicht was sie soll Java Basics - Anfänger-Themen 24
JavaNewbie2.0 Habe ein frage wie man etwas macht. Java Basics - Anfänger-Themen 13
Tacofan Was macht dieses "Stückchen Code"? Java Basics - Anfänger-Themen 3
F JSON null macht mir ein Problem Java Basics - Anfänger-Themen 3
L Was genau macht "public static void" ? Java Basics - Anfänger-Themen 12
C Hilfe - Kleines Programm macht mir Schwierigkeiten Java Basics - Anfänger-Themen 2
B Erste Schritte Way of life ohne import - Habe Beispiel, macht Unfug Java Basics - Anfänger-Themen 21
D Methoden Filewriter macht keine Zeilenumbrüche Java Basics - Anfänger-Themen 3
E Erste Schritte [Noob-Frage] Meine If-Abfrage macht nicht, was sie soll... Java Basics - Anfänger-Themen 2
H Tastatur.wurdeGedrueckt() macht nicht das, was ich will :/ Java Basics - Anfänger-Themen 2
K Was macht hier genau return? Java Basics - Anfänger-Themen 2
E Einfache For-Schleife macht nicht was sie soll Java Basics - Anfänger-Themen 2
J Shakersort, das Array macht Probleme! Java Basics - Anfänger-Themen 4
A scan.nextLine() - Wenn man zu lange nichts macht, soll etwas passieren Java Basics - Anfänger-Themen 3
C Scrollpanel autoscroll(false) macht nix Java Basics - Anfänger-Themen 2
M StringTokenizer macht Quatsch Java Basics - Anfänger-Themen 21
N Papaklasse macht Zicken mit Parameterkonstruktor Java Basics - Anfänger-Themen 7
K Datentypen double x als Bruch aus Integern macht x zu integer? Java Basics - Anfänger-Themen 3
C Erste Schritte was macht eigentlich "for (;;)" Java Basics - Anfänger-Themen 7
C JDK-Installer macht nichts Java Basics - Anfänger-Themen 11
A JApplet: einbinden von weiteren Jars macht Probleme Java Basics - Anfänger-Themen 2
B Variablen Wie macht man eine call by reference mit primitiven Datentypen in Java? Java Basics - Anfänger-Themen 2
I Für was macht man "deep Kopien" Java Basics - Anfänger-Themen 4
S Erste Schritte While do Schleife - macht nicht was sie soll Java Basics - Anfänger-Themen 7
9 Programm macht nicht was es soll Java Basics - Anfänger-Themen 6
S JApplet macht Probleme Java Basics - Anfänger-Themen 2
Y Was macht folgende Regular Expression Java Basics - Anfänger-Themen 2
M Was macht bzw. was bringt ein constructor? Java Basics - Anfänger-Themen 9
P orphaned case macht probs Java Basics - Anfänger-Themen 3
jmar83 System.err.print(ln) macht ein durcheinander??! Java Basics - Anfänger-Themen 8
X Selectionsort macht Probleme Java Basics - Anfänger-Themen 2
P was macht der code? Java Basics - Anfänger-Themen 4
M OOP for Schleife macht mir Probleme mit Arrays Java Basics - Anfänger-Themen 7
R Was macht...? Java Basics - Anfänger-Themen 4
M JavaEditor macht Probleme! Invalid Flag! Java Basics - Anfänger-Themen 9
P Was macht dieser Source code? Java Basics - Anfänger-Themen 5
R BufferedWriter macht komische Zeichen Java Basics - Anfänger-Themen 3
I KeyEvent macht nichts.^^ Java Basics - Anfänger-Themen 3
E new File macht den Pfad kaputt Java Basics - Anfänger-Themen 15
S Wie macht man sowas?? Ist da ne If-Schleife richtig?? Java Basics - Anfänger-Themen 22
Pithecanthropus Thread anhalten, der aber ein readObject() macht. Java Basics - Anfänger-Themen 4
I Was macht diese Funktion? Java Basics - Anfänger-Themen 4
0 Was macht eine IOException? Java Basics - Anfänger-Themen 4
0 Was ist ein GregorianCalender?(Was macht es etc.) Java Basics - Anfänger-Themen 2
T Calender / DateFormat macht plus ein Monat Java Basics - Anfänger-Themen 3
T "x hoch y" macht nur "x mal x"^^ Java Basics - Anfänger-Themen 3
M Objektorientierung - wie macht man's richtig? Java Basics - Anfänger-Themen 3
A Macht es Sinn Arraylisten mit Gettern zu übergeben? Java Basics - Anfänger-Themen 19
M JPanel und JTabbedPane macht probleme Java Basics - Anfänger-Themen 5
S Formatierter String macht Probleme Java Basics - Anfänger-Themen 9
G JComboBox macht Probleme Java Basics - Anfänger-Themen 7
G Warum das Prog mehrmals das gleiche macht wegen ItemListener Java Basics - Anfänger-Themen 4
S Eclipse macht 2 Fenster auf Java Basics - Anfänger-Themen 4
S was macht super() ? Java Basics - Anfänger-Themen 7
B replaceAll macht nix! :-( Java Basics - Anfänger-Themen 4
V .jar macht keine Datenbank abfragen Java Basics - Anfänger-Themen 3
S Was macht [Integer.toString(number, tarRadix)] Java Basics - Anfänger-Themen 3
T Möchte Charwert 23C° mit java.util.Scanner einlesen macht Pr Java Basics - Anfänger-Themen 2
S wie macht man aus einem int ein double? Java Basics - Anfänger-Themen 2
F Eingabe darf nur 1 oder 0 sein. Meine Lösung macht Probleme. Java Basics - Anfänger-Themen 8
D [DONE] JDK Installation: Compiler macht Probleme. Java Basics - Anfänger-Themen 3
A Was macht dieser Prgrammteil? Java Basics - Anfänger-Themen 2
H Key Listener macht nicht das was er soll Java Basics - Anfänger-Themen 4
G RadioButton in JTable macht Probleme Java Basics - Anfänger-Themen 5
M was macht Syncronized ? Java Basics - Anfänger-Themen 2
G Was bzw. wie macht man das, wenn man jar. datei hat Java Basics - Anfänger-Themen 6
G warum macht er das Java Basics - Anfänger-Themen 4
R BorderLayout macht meine Zeichnung kaputt Java Basics - Anfänger-Themen 14
G Was macht dieses Program ? Java Basics - Anfänger-Themen 13
G Was macht dieser Code? Java Basics - Anfänger-Themen 3
M renderer macht nur 1 spalte bunt Java Basics - Anfänger-Themen 5
U was macht "private" ? :) Java Basics - Anfänger-Themen 7
frau-u guter Stil - wie macht mans am Besten? Java Basics - Anfänger-Themen 8
E JOptionPane macht keine Ausgabe Java Basics - Anfänger-Themen 11
L Ausführung unter DOS macht Probleme Java Basics - Anfänger-Themen 2
K javac macht probleme...... Java Basics - Anfänger-Themen 2
J Problem mit einer Methode die gewissen Inhalt einer Array löschen soll Java Basics - Anfänger-Themen 2
J Problem mit einer Methode, die beliebig viele Objekte in Array speichern soll Java Basics - Anfänger-Themen 3
L Methode für Zweidimensionale Arrays Java Basics - Anfänger-Themen 4
H Methode mit Array als Rückgabe This method must return a result of Type int[] Java Basics - Anfänger-Themen 2
G Erste Schritte Array Mittelwert Methode Programmieren Java Basics - Anfänger-Themen 5

Ähnliche Java Themen

Anzeige

Neue Themen


Oben