Formfrage zu Funktionsrückgabe

Mirage

Mitglied
Wir sollten diesmal ein Programm schreiben was den ggT dreier Zahlen berechnet und auf dem Euklidischen Algorithmus basiert (Euklidischer Algorithmus ? Wikipedia).
Habe dafür folgenden Ansatz:

Java:
public class Rechencode {
	
	public static int EU1(int x, int y, int z){
		while(x>0){
			if(x<y){
				int t = y; y = x; x = t;
			}
			x = x-y;
			int erg = EU2(x,z);
                        return erg;
		}
	}
	
	public static int EU2(int x2, int y2){
		while(x2>0){
			if(x2<y2){
				int t = y2; y2 = x2; x2 = t;
			}
			x2 = x2-y2;
			return x2;
		}
	}

	public static void main(String[] args) {
		String xS = JOptionPane.showInputDialog("Bitte 1-te Zahl eingeben");
		String yS = JOptionPane.showInputDialog("Bitte 2-te Zahl eingeben");
		String zS = JOptionPane.showInputDialog("Bitte 3-te Zahl eingeben");
		
		int x = Integer.parseInt(xS);
		int y = Integer.parseInt(yS);
		int z = Integer.parseInt(zS);
		
		int EUggT = EU1(x, y, z);
		
		System.out.println("Der ggT ist:" + EUggT);

	}

}

Nun habe ich bei den Funktionen EU1 und EU2 das Problem das Eclipse mir bei hier beschriebener Form sagt das die Funktion kein int-Wert als return gibt, setze ich das return eine geschweifte Klammer weiter außerhalb, sagt mir Eclipse das die Variable nicht definiert ist. Ich vermute mal das ich einen relativ einfachen Fehler drin habe, aber ich komme gerade einfach nicht auf die Lösung. Bin für jede Hilfe dankbar.
 

njans

Top Contributor
Java:
    public static int EU1(int x, int y, int z){
        int erg = 0;
        while(x>0){
            if(x<y){
                int t = y; y = x; x = t;
            }
            x = x-y;
            erg = EU2(x,z);      
        }
        return erg;
    }
   
    public static int EU2(int x2, int y2){
        while(x2>0){
            if(x2<y2){
                int t = y2; y2 = x2; x2 = t;
            }
            x2 = x2-y2;
        }
         return x2;
    }

- Wenn der Skopus deiner Variable nicht groß genug ist, kann Java damit nichts anfangen
- Wenn du in deine Schleife einfach ein return am Ende machst, hast du nie mehr als einen Durchlauf
 

triplec0re

Mitglied
Java:
public class Rechencode {
	
	public static int EU1(int x, int y, int z){
		while(x>0){
			if(x<y){
				int t = y; y = x; x = t;
			}
			x = x-y;
			int erg = EU2(x,z);
                        return erg;
		}
	}

Du definierst die Variable erg erst innerhalb der Schleife, setzt du das return nun außerhalb der Schleife, gibt es den Wert erg dort nicht mehr, da er als lokaler Wert nur so lange existiert, wie die Schleife läuft. Also erg einfach vor der Schleife definieren und in der Schleife weiterhin die Zuordnung
Java:
erg = EU2(x,z);
vornehmen. Dann ist nach der Schleife auch die Rückgabe möglich.
Dass eine while-Schleife mit einem return nur einmal durchläuft, sagte njans ja bereits.
 
Zuletzt bearbeitet:


Schreibe deine Antwort... und nutze den </> Button, wenn du Code posten möchtest...

Neue Themen


Oben