Brüche kürzen mittels Methoden und ggT

Hi Liebe Coder,
ich bin neu hier also verzeiht mir wenn es sowas schon einmal im Forum gab.
Meine Aufgabe lautet wie folgt: "Programmieren Sie eine Klasse Bruch mit den folgenden Methoden: - public static void kuerzen(int zaehler, int nenner), die den Bruch zaehler/nenner gekürzt auf der Konsole ausgibt, z.B. erzeugt kuerzen(6,15) die Ausgabe „2/5“ "
und hier mein Code:
public class Bruch {

public static void kuerzen(int zaehler1, int nenner1) {
zaehler1 = zaehler1/ggT(zaehler1, nenner1);
nenner1 = nenner1/ggT(zaehler1, nenner1);
System.out.println(zaehler1 + "/" + nenner1);
}

public static int ggT(int a, int b) {
while (a != b) {
if (a > b) {
a = a - b;
} else {
b = b - a;
}
}
return a;
}
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int x = 6;
int y = 15;
ggT(x, y);
kuerzen(x, y);
}
}
Erwartete Ausgabe wäre 2/5. Leider bekomme ich als Ausgabe nur 2/15 raus. Ich denke, dass der fehler in der Methode kuerzen liegt leider weiß ich nicht wo.
MfG euer Monti
p.s bitte verzeiht mir wenn der Code nicht ganz richtig ist, ich habe erst vor kurzem angefangen zu programmieren
 
Geh doch einmal die Methode von Hand durch.
zaehler1 = 6;
nenner1 = 15;
Was passiert in der ersten Zeile? Wie sehen die Variablen danach aus?
Was passiert in der zweiten Zeile? Wie sehen dann die Variablen aus?
Da sollte das Problem schnell deutlich werden denke ich mal.
 
In der ersten Zeile rechnet er den zaehler durch den ggt, das ist dann der neue Zehler dieser wird dann in der System.out ausgegeben. Das selbe bei dem nenner... ich sehe meinen fehler da leider nicht
 
Wie sehen die Werte nach der ersten Zeile aus? Oder speziell: Welchen Wert hat zaehler1 nach der ersten Zeile?
Und dann schau dir an, was er in der zweiten Zeile macht: Mit welchen Werten wird denn da ggt aufgerufen?
 
also muss ich bei dem aufrauf nur die einzelnen int's nehmen? Quasi so:
zaehler1 = zaehler1/ggT(zaehler1,);
nenner1 = nenner1/ggT( nenner1);
 
Nein, es geht darum:
Java:
zaehler1 = zaehler1/ggT(zaehler1, nenner1); 
nenner1 = nenner1/ggT(zaehler1, nenner1);
In der ersten Zeile wird zunächst der ggT von zaehler1 und nenner1 berechnet. Anschließend wird der zaehler1 um den ggT gekürzt. Das Ergebnis wird nun zaehler1 zugewiesen.

Jetzt kommt die zweite Zeile dran: dort wird wieder der ggT von zaehler1 und nenner1 berechnet. An der Stelle ist zaehler1 aber schon ein anderer Wert.

Du musst Dir also den ggT vorab merken.
 
Nein. Die Methode ggt will zwei Parameter und die musst du natürlich geben.

Aber wenn Du das im Kopf machst, dann berechnest du einmal den ggt von 6 und 15 (=3) und dann nutzt du diesen einmal berechneten ggt.

Wie kannst Du den ggt den ausrechnen und speichern?
 
Ich stehe gerade absolut auf dem Schlauch. Hab es jetzt bei der Methode kuerzen oben probiert aber da spuckt er mir leider nur Fehler aus.
 
Ich habe keine Ahnung, wie ich Dich da noch besser mit der Nase drauf stoßen kann....

Also kommt jetzt einfach eine kleine Abhandlung statt einfach nur die Lösung hin zu klatschen:

1. Parameter werden nicht geändert - das erzwingt man einfach per final Schlüsselwort. Das verhindert sowas dann schon recht schnell ...
Java:
public static void kuerzen(final int zaehler1, final int nenner1) {
2. Dann würde man den Code z.B. so schreiben können:
Java:
public static void kuerzen(final int zaehler1, final int nenner1) {
  int gekuerzterZaehler = zaehler1/ggT(zaehler1, nenner1);
  int gekuerzterNenner = nenner1/ggT(zaehler1, nenner1);
  System.out.println(gekuerzterZaehler + "/" + gekuerzterNenner);
}
Das Ergebnis wird hier in lokalen variablen gespeichert.

Wenn man das aber nicht wollte, dann könnte man auch einfach nur den ggt in einer lokalen Variablen sichern, was der Hinweis war, den man Dir gegeben hat:

Java:
public static void kuerzen(int zaehler1, int nenner1) {
  int ggt = ggT(zaehler1, nenner1);
  zaehler1 = zaehler1/ggt;
  nenner1 = nenner1/ggt;
  System.out.println(zaehler1 + "/" + nenner1);
}
Generell wäre aber mein Tipp, eben nicht mit Variablen zu sparen und Eingangswerte nicht mutwillig zu überschreiben!
 
Ich habe keine Ahnung, wie ich Dich da noch besser mit der Nase drauf stoßen kann....

Also kommt jetzt einfach eine kleine Abhandlung statt einfach nur die Lösung hin zu klatschen:

1. Parameter werden nicht geändert - das erzwingt man einfach per final Schlüsselwort. Das verhindert sowas dann schon recht schnell ...
Java:
public static void kuerzen(final int zaehler1, final int nenner1) {
2. Dann würde man den Code z.B. so schreiben können:
Java:
public static void kuerzen(final int zaehler1, final int nenner1) {
  int gekuerzterZaehler = zaehler1/ggT(zaehler1, nenner1);
  int gekuerzterNenner = nenner1/ggT(zaehler1, nenner1);
  System.out.println(gekuerzterZaehler + "/" + gekuerzterNenner);
}
Das Ergebnis wird hier in lokalen variablen gespeichert.

Wenn man das aber nicht wollte, dann könnte man auch einfach nur den ggt in einer lokalen Variablen sichern, was der Hinweis war, den man Dir gegeben hat:

Java:
public static void kuerzen(int zaehler1, int nenner1) {
  int ggt = ggT(zaehler1, nenner1);
  zaehler1 = zaehler1/ggt;
  nenner1 = nenner1/ggt;
  System.out.println(zaehler1 + "/" + nenner1);
}
Generell wäre aber mein Tipp, eben nicht mit Variablen zu sparen und Eingangswerte nicht mutwillig zu überschreiben!
vielen vielen Dank!!!! Habe ein bisschen zu kompliziert gedacht anscheinend.
 
Habe es so geschreieben:
ggT(zaehler1, nenner1) = new ggT();
Lokale Variablen werden immer Deklariert mit Typ und Variablenname. Also bei mir oben wäre es "int ggt". Dann kann optional noch eine Initialisierung kommen - das wäre dann der Funktionsaufruf....

Das Schlüsselwort new macht nur in Zusammenhang mit einer Klasse Sinn. Hättest Du eine Klasse mit Namen ggT, dann würde new ggT() eine Instanz von dieser Klasse erzeugen ...
 
Passende Stellenanzeigen aus deiner Region:

Neue Themen

Oben