Brüche kürzen mittels Methoden und ggT

X

xImMonti

Mitglied
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
 
kneitzel

kneitzel

Top Contributor
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.
 
X

xImMonti

Mitglied
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
 
kneitzel

kneitzel

Top Contributor
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?
 
F

fhoffmann

Top Contributor
Wenn du den ggt zum zweiten mal berechnest, hat sich der Zähler bereits geändert.
 
X

xImMonti

Mitglied
also muss ich bei dem aufrauf nur die einzelnen int's nehmen? Quasi so:
zaehler1 = zaehler1/ggT(zaehler1,);
nenner1 = nenner1/ggT( nenner1);
 
mihe7

mihe7

Top Contributor
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.
 
kneitzel

kneitzel

Top Contributor
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?
 
X

xImMonti

Mitglied
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.
 
kneitzel

kneitzel

Top Contributor
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!
 
X

xImMonti

Mitglied
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.
 
kneitzel

kneitzel

Top Contributor
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 ...
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
M Brüche und Näherungswerte Allgemeine Java-Themen 9
J Methoden Commands kürzen Allgemeine Java-Themen 6
K URL kürzen Allgemeine Java-Themen 19
X Textdatei auf gewünschte Anzahl der Zeilen kürzen Allgemeine Java-Themen 2
S Stringvariableninhalt kürzen Allgemeine Java-Themen 4
W PDFs signieren mittels IText / Lowagie Allgemeine Java-Themen 0
Zrebna Möglichkeit regelmäßige indentation mittels/innerhalb Stringbuilder Allgemeine Java-Themen 14
J RotSchwarzBaum: Löschen mittels insert-Methode Allgemeine Java-Themen 20
L Mittels Streams aus Strings A B C den String A, B und C machen Allgemeine Java-Themen 12
D HTTP Http-Link mittels GUI schreiben Allgemeine Java-Themen 5
B Java Sternchen ausgeben mittels Rekursion Allgemeine Java-Themen 3
J GUI-Einstellungen mittels Preferences Allgemeine Java-Themen 6
Todesbote JFileChooser im Vordergrund (*.jar wird mittels shell_exec in PHP aufgerufen) Allgemeine Java-Themen 1
E Videosequenz mittels Java aus Video schneiden Allgemeine Java-Themen 10
B Ordner öffnen mittels Java in Linux-Umgebung Allgemeine Java-Themen 7
I Webseite auslesen (welche mittels Javascript Inhalt einbindet) Allgemeine Java-Themen 4
T HTML Tag Position mittels Pattern ermitteln Allgemeine Java-Themen 7
RySa Variablenname mittels Reflexions rausbekommen (als String) ? Allgemeine Java-Themen 9
U Classpath DLLs mittels System.load() laden: Allgemeine Java-Themen 6
T Wie rufe ich mittels String-Inhalts eine Methode auf? Allgemeine Java-Themen 3
T Exif mittels Java auslesen Allgemeine Java-Themen 14
A Sudoku mittels Backtracking Problem Allgemeine Java-Themen 6
7 Webseiten mittels Java auslesen Allgemeine Java-Themen 7
H Zwei verschiedene Dateien mittels einem Binärstream übertragen? Allgemeine Java-Themen 13
dunhillone Mittels Annotations Methoden "erweitern"? Allgemeine Java-Themen 11
S Mittels eines Applets Bilder generieren die in einer Webseite angezeigt werden..? Allgemeine Java-Themen 8
X String zerlegen mittels regulärem Ausdruck Allgemeine Java-Themen 31
O Programm mittels Java installieren Allgemeine Java-Themen 15
S Array-Sort mittels Binärsuche Allgemeine Java-Themen 2
J Setter mittels invoice aufrufen Allgemeine Java-Themen 4
S Eingabeprüfung mittels Regexp Allgemeine Java-Themen 5
J Objekt in Datei speichern mittels Streams Allgemeine Java-Themen 6
D Einfaches Nutzen von Plugins mittels generischer Methode Allgemeine Java-Themen 3
E Aus mehreren PDFs eines machen, zusammenfügen mittels iText Allgemeine Java-Themen 1
G Graph mittels Punkte erstellen Allgemeine Java-Themen 27
M Problem bei PDF-Anzeige mittels Acrobat Viewer Bean Allgemeine Java-Themen 2
G HTML Code aus String mittels REGEX entfernen Allgemeine Java-Themen 2
spacegaier Performanceproblem beim Einlesen aus Datei mittels Threads Allgemeine Java-Themen 23
G Screenshot mittels robot ausführen Allgemeine Java-Themen 4
B Html Formulare mittels Java automatisch senden Allgemeine Java-Themen 5
E import mittels Eclipse Allgemeine Java-Themen 3
F mittels Collection<A> an A.class kommen? Allgemeine Java-Themen 7
T IF Abfrage + YES_NO Option mittels JOptionPane Allgemeine Java-Themen 3
F Zugriff mittels getObject() oder this.object ? Allgemeine Java-Themen 8
J Tonbalance mittels JMF regeln Allgemeine Java-Themen 3
G Font mittels ClassLoader in .jar wirft NotFoundException Allgemeine Java-Themen 10
R Interface mittels Reflection implementieren Allgemeine Java-Themen 8
G eigener logger mittels classe (dynamische logfilename) log4j Allgemeine Java-Themen 15
K Mittels Generics eine Methode verallgemeinern Allgemeine Java-Themen 2
A FTPS bzw. FTP over SSL mittels Java Allgemeine Java-Themen 9
Y komprimierung mittels Huffman-Algorithmus, bit-shifting. Allgemeine Java-Themen 2
G mysql datum umwandeln mittels jsp Allgemeine Java-Themen 10
F Hilfe: Adjazenzmatrix mittels JUnit testen. Allgemeine Java-Themen 2
Natorion Erkennen ob das Programm mittels Jar-Datei oder class . Allgemeine Java-Themen 9
P E-Mails mittels POP3 abrufen Allgemeine Java-Themen 2
S mail von server mittels mailapi löschen Allgemeine Java-Themen 2

Ähnliche Java Themen

Anzeige

Neue Themen


Oben