Brüche kürzen

Kirby.exe

Top Contributor
Ich bin gerade etwas verwirrt xD In der Aufgabenstellung steht dass die "kuerze()" Methode eine private void Methode sein muss, jedoch verstehe ich nicht wie ich dass kürzen soll, ich könnte natürlich dass kürzen sowohl aus der Additions Methode und den Konstruktiven ziehen und in die Methode schieben, aber ist das eine gute Idee?

Jedoch das eigentlich Problem in meinen Augen ist, dass ich der Methode keine Parameter übergeben darf :(

Hier einfach mal die komplette Aufgabenstellung:

12857

Java:
public class Bruch {

    private int zaehler;
    private int nenner;
 
    public Bruch(int _zaehler, int _nenner){
        int temp = kuerze(_zaehler, _nenner);
        this.zaehler = (_zaehler/temp);
        this.nenner = (_nenner/temp);
        toString();
    }
 
    public Bruch(String fraction){
         String [] parts = fraction.split("/");
        int _zaehler = Integer.parseInt(parts[0]);
        int _nenner = Integer.parseInt(parts[1]);
        int temp = kuerze(_zaehler, _nenner);
        this.zaehler = (_zaehler/temp);
        this.nenner = (_nenner/temp);
        toString();
    }
 
    @Override
    public String toString(){
        return this.zaehler + "/" + this.nenner;
    }
 
    public Bruch addiere(Bruch a) {
        Bruch c = new Bruch(1, 1);
        c.zaehler = ((this.zaehler*a.nenner) + (a.zaehler*this.nenner));
        c.nenner = (this.nenner*a.nenner);
        int temp = kuerze(c.zaehler, c.nenner);
        c.zaehler = (c.zaehler/temp);
        c.nenner = (c.nenner/temp);
        return c;
    }
 
    private int kuerze(int a, int b) {
        if(a < b) {
            return kuerze(b, a);
        }
        if(0 == b) {
            return a;
        }
        return kuerze(a % b, b);
    }
}
 
Zuletzt bearbeitet:

httpdigest

Top Contributor
Die kuerze() Methode soll eine Hilfsmethode sein, die den aktuellen Bruch `this` (über Zugriff auf die Instanzvariablen) kürzt.
Es wird wohl reichen, diese Methode einmal im Konstruktor aufzurufen, sodass der erzeugte Bruch immer gekürzt ist.
 

Kirby.exe

Top Contributor
Wenn ich es richtig verstehe bedeutet dies hier:
java.lang.ArithmeticException: / by zero
das bei irgendeiner Iteration durch 0 geteilt wird, was nicht definiert ist, jedoch blicke ich den Fehler in meinem Code nicht

Java:
public class Bruch {
 
    private int zaehler;
    private int nenner;
   
    public Bruch(int _zaehler, int _nenner){
        this.zaehler = _zaehler;
        this.nenner = _nenner;
        System.out.println("Zaehler: " + this.zaehler);
        System.out.println("Nenner: " + this.nenner);
        kuerze();
        System.out.println("Zaehler gekürzt: " + this.zaehler);
        System.out.println("Nenner gekürzt: " + this.nenner);
        /*int temp = kuerze(_zaehler, _nenner);
        this.zaehler = (_zaehler/temp);
        this.nenner = (_nenner/temp);*/
        toString();
    }
   
    public Bruch(String fraction){
        String [] parts = fraction.split("/");
        this.zaehler = Integer.parseInt(parts[0]);
        this.nenner = Integer.parseInt(parts[1]);
        kuerze();
        toString();
    }
   
    @Override
    public String toString(){
        return this.zaehler + "/" + this.nenner;
    }
   
    public Bruch addiere(Bruch a) {
        Bruch c = new Bruch(1, 1);
        this.zaehler = ((this.zaehler*a.nenner) + (a.zaehler*this.nenner));
        this.nenner = (this.nenner*a.nenner);
        kuerze();
        c.zaehler = this.zaehler;
        c.nenner = this.nenner;
        return c;
    }
   
    private void kuerze() {
        int result = 0;
        int a = this.zaehler, b = this.nenner;
        int h = (a > b) ? b : a;
        // Der GGT wird hier berechnet.
        for (int i = h; i > 1; i--) {
            if ((a % i) == 0 && (b % i) == 0) {
                System.out.println(result = i);
                break;
            }
        }
        this.zaehler = (this.zaehler/result);
        this.nenner = (this.nenner/result);
    }
}

Java:
public static void main(String[] args) {
        //Bruch s = new Bruch("34/561");
        //Bruch s1 = new Bruch("65/273");
        Bruch a = new Bruch(4, 2);
        Bruch a1 = new Bruch(21, 14);
        Bruch k = a.addiere(a1);
        System.out.println(k.toString());
        //Bruch k = s.addiere(s1);
        //System.out.println(k.toString());
    }
 

httpdigest

Top Contributor
In solchen Fällen immer einfach einen Debugger verwenden. Jede IDE hat einen integriert.
Und bei dir ist der Fehler, dass wenn der GGT = 1 ist, schlägt dein Code fehl, da result in kuerze() niemals auf 1 gesetzt wird, sondern immer 0 bleibt, da deine Schleife nur bis i > 1 geht.
Der konkrete Fall tritt bei addiere() auf, da du dort (warum auch immer) den Bruch (1, 1) erzeugst.
 

Kirby.exe

Top Contributor
In solchen Fällen immer einfach einen Debugger verwenden. Jede IDE hat einen integriert.
Und bei dir ist der Fehler, dass wenn der GGT = 1 ist, schlägt dein Code fehl, da result in kuerze() niemals auf 1 gesetzt wird, sondern immer 0 bleibt, da deine Schleife nur bis i > 1 geht.
Der konkrete Fall tritt bei addiere() auf, da du dort (warum auch immer) den Bruch (1, 1) erzeugst.
Ich erzeuge den Bruch(1,1) weil ich keinen Schimmer habe wie ich sonst einen return vom Typ Bruch machen soll xD
 

httpdigest

Top Contributor
Java:
public Bruch addiere(Bruch a) {
  return new Bruch(
    (zaehler * a.nenner) + (a.zaehler * nenner),
     nenner * a.nenner);
}
 

Kirby.exe

Top Contributor
@httpdigest Ich hatte mal noch eine Frage zum einlesen von einem Textdokument :) Ich habe folgenden Code zum einlesen der Datei:

Java:
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;

public class ReadFileExample {

public static void main(String[] args) {
  BufferedReader objReader = null;
  try {
   String strCurrentLine;

   objReader = new BufferedReader(new FileReader("blablabla"));

   while ((strCurrentLine = objReader.readLine()) != null) {

    System.out.println(strCurrentLine);
   }

  } catch (IOException e) {

   e.printStackTrace();

  } finally {

   try {
    if (objReader != null)
     objReader.close();
   } catch (IOException ex) {
    ex.printStackTrace();
   }
  }
}
}

Jedoch wird nicht nur der Inhalt der Datei eingelesen, sondern auch irgendwelche Parameter, wie kann ich dies unterbinden?

So sieht es nach dem einlesen aus:

Java:
Konsolen Output:

{\rtf1\ansi\ansicpg1252\cocoartf2511
\cocoatextscaling0\cocoaplatform0{\fonttbl\f0\fswiss\fcharset0 Helvetica;}
{\colortbl;\red255\green255\blue255;}
{\*\expandedcolortbl;;}
\paperw11900\paperh16840\margl1440\margr1440\vieww10800\viewh8400\viewkind0
\pard\tx566\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\pardirnatural\partightenfactor0

\f0\fs24 \cf0 O#O\
OO#\
#OO\
#O#}

Was ich ausgegeben haben möchte:

Java:
O#O
OO#
#OO
#O#
 

httpdigest

Top Contributor
Deine Datei "blablabla" ist ganz offensichtlich ein RichTextFile Dokument und nicht einfach nur Text. Du brauchst einen Parser für rtf Dateien.
Du kannst ja auch keine Word .doc Datei mit einem BufferedReader einlesen und dann erwarten, nur den Text angezeigt zu bekommen.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
thefastandcurious Brüche kürzen Java Basics - Anfänger-Themen 70
J Brüche kürzen Java Basics - Anfänger-Themen 11
B Brüche kürzen Java Basics - Anfänger-Themen 7
S [HILFE] Brüche addieren, multiplizieren, kürzen Java Basics - Anfänger-Themen 17
M OOP Brüche nicht richtig berechnen Java Basics - Anfänger-Themen 3
L Brüche in java Java Basics - Anfänger-Themen 7
G OOP- Brüche addieren Java Basics - Anfänger-Themen 3
O Methoden implementieren, Sichtbarkeiten, Brüche Java Basics - Anfänger-Themen 104
S Zahlenformat für unendliche Brüche? Java Basics - Anfänger-Themen 7
Eileen Brüche addieren in Zwei Klassen mit JOptionPane Java Basics - Anfänger-Themen 4
kb interface / Brüche in java übergeben Java Basics - Anfänger-Themen 3
S Brüche, Fließkommazahlen Java Basics - Anfänger-Themen 3
H Zahlen kürzen Java Basics - Anfänger-Themen 2
Zeppi OOP Bruch kürzen im Konstruktor Java Basics - Anfänger-Themen 2
J Dezimalzahl in Bruch Umwandeln und Kürzen Java Basics - Anfänger-Themen 8
G Code kürzen Java Basics - Anfänger-Themen 5
G code kürzen Java Basics - Anfänger-Themen 16
F String auf E-Mail kürzen Java Basics - Anfänger-Themen 11
F Code kürzen Java Basics - Anfänger-Themen 9
E Methoden Math.Random() kürzen ? Java Basics - Anfänger-Themen 2
J Code kürzen Java Basics - Anfänger-Themen 11
E Arrayeintrag nach Index löschen und Array kürzen Java Basics - Anfänger-Themen 3
E String komprimieren - Kürzen ohne Informationsverlust? Java Basics - Anfänger-Themen 13
A String kürzen Java Basics - Anfänger-Themen 12
K taschenrechner - Fehler beim Kürzen eines Bruches finden Java Basics - Anfänger-Themen 20
J kürzen von brüchen Java Basics - Anfänger-Themen 9
N Datentypen Double nach 2 stellen kürzen Java Basics - Anfänger-Themen 4
D String kürzen, nich abschneiden Java Basics - Anfänger-Themen 9
M Text kürzen Java Basics - Anfänger-Themen 7
M Quelltext kürzen Java Basics - Anfänger-Themen 8
E Interface einfügen und Code kürzen Java Basics - Anfänger-Themen 15
M Programmierung kürzen??? Java Basics - Anfänger-Themen 5
E Kürzen des Quelltextextes Java Basics - Anfänger-Themen 16
U Code kürzen Java Basics - Anfänger-Themen 4
G bruch soweit es geht kürzen Java Basics - Anfänger-Themen 12
A String um 1 Zeichen kürzen ? Java Basics - Anfänger-Themen 6
S String kürzen auf bestimmte Länge Java Basics - Anfänger-Themen 5

Ähnliche Java Themen

Neue Themen


Oben