• Wir präsentieren Dir heute ein Stellenangebot für einen Frontend-Entwickler Angular / Java in Braunschweig. Hier geht es zur Jobanzeige

Bruchklasse erstellen

JaVaN0oB

JaVaN0oB

Mitglied
Hallo an alle :)
Ich habe da leider ein Problem...
Ich soll in der Uni eine Bruchklasse schreiben mit folgenden Aufgaben:
  • Einen Konstruktor, der als Parameter den Zähler und Nenner als ganze Zahl erhält.
  • Einen Konstruktor, welcher eine Zeichenkette erhält. Diese Zeichenkette repräsentiert einen Bruch, wobei garantiert ist, dass die übergeben Zeichenkette immer im Format 123/456 ist.
  • Eine (überschreibende) toString-Methode, welche einen Bruch 3434 im Format 3/4 als String zurückgibt (ohne Leerzeichen und Zeilenumbruch!).
  • Eine Instanzmethode addiere, welche als Parameter den zweiten Bruch erhält und als Rückgabewert den Ergebnisbruch zurückgibt (weder der aktuelle noch der übergebene Bruch werden verändert).
  • Eine von außen nicht zugreifbare Methode kuerze, welche den aktuellen Bruch kürzt und zudem sicherstellt, dass der Bruch immer im gekürzten Zustand vorliegt.
Leider stelle ich mich etwas blöd an mit bzw. durch die vorgegebene Klasse (siehe unten).

Könnt ihr mir helfen?

Das habe ich bereits:
Bruch.java:
public class Bruch {
    private int zaehler;
    private int nenner;

    public Bruch(int a, int b){
        this.zaehler = a;
        this.nenner = b;
        kuerze();
    }

    public String toString() {
        String buffer = zaehler + "/" + nenner;
        return buffer;
    }

    public void kuerze() {

        int limit = Math.min(zaehler, nenner);
        for (int i = 2; i <= limit; i++) {
            if (zaehler % i == 0 && nenner % i == 0) {
                zaehler /= i;
                nenner /= i;
            }
        }
    }

    public int getZaehler(){
        return zaehler;
    }
    public int getNenner(){
        return nenner;
    }

    public Bruch addiere(Bruch br){

        int z1 = zaehler  * br.getNenner();
        int z2 = nenner * br.getZaehler();
        int n= nenner*br.getNenner();
        return new Bruch(z1+z2, n);
    }

}

Wichtig ist allerdings die vorgegebene Klasse, die ist nicht veränderbar....:

TestBruch.java [READONLY]:
import java.io.*;
import java.lang.reflect.*;

public class TestBruch {
    public static void main(String args[]) throws IOException {
        Bruch a, b;
        BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
        int zaehler, nenner;
        if(args.length == 2) {
            a = new Bruch(args[0]);System.out.println(a);
            b = new Bruch(args[1]);System.out.println(b);
        }
        else if(args.length == 0) {
            zaehler = Integer.parseInt(in.readLine());
            nenner = Integer.parseInt(in.readLine());
            a = new Bruch(zaehler, nenner);
            System.out.println(a);
            zaehler = Integer.parseInt(in.readLine());
            nenner = Integer.parseInt(in.readLine());
            b = new Bruch(zaehler, nenner);
            System.out.println(b);
        }
        else {
            try { codeVerification(Bruch.class); }
            catch(SecurityException e) {
                e.printStackTrace(System.out);
            }
            return;
        }
        Bruch c;
        switch(in.readLine().charAt(0)) {
//            case '*':
//                c = a.multipliziere(b);
//                System.out.println(a+"\n"+b+"\n"+c);
//                break;
            case '+':
                c = a.addiere(b);
                System.out.println(a+"\n"+b+"\n"+c);
                break;
            default:
                System.out.println("not supported");
       }
    }
    private static void codeVerification(Class<?> cls) throws
    SecurityException {
        for(Field f : cls.getDeclaredFields()) {
            if(Modifier.isStatic(f.getModifiers()))
                System.out.println("Es werde keine Klassenvariablen benötigt, aber die folgende gefunden: " + f.getName());
            if(!Modifier.isPrivate(f.getModifiers())) {
                System.out.println("Alle Attribute dürfen von außerhalb der Klasse nicht zugreifbar sein, das folgende Attribut ist aber von außen zugreifbar: " + f.getName());
            }
        }
        Method kuerze = null;
        for(Method m : cls.getDeclaredMethods()) {
            switch(m.getName()) {
                case "toString":
                case "addiere":
                case "multipliziere":
                    if(!Modifier.isPublic(m.getModifiers()))
                        System.out.println(m.getName() + " ist nicht public!");
                    break;
                case "kuerze":
                    kuerze = m;
                default:
                    if(!Modifier.isPrivate(m.getModifiers()))
                        System.out.println(m.getName() + " ist nicht private!");
            }
            if(Modifier.isStatic(m.getModifiers()))
                System.out.println("Es werden keine static-Methoden benötigt aber die folgende gefunden: " + m.getName());
        }
        if(kuerze == null) {
            System.out.println("Es fehlt eine von außen nicht zugreifbare Methode kuerze!");
        }
        else {
             if(!kuerze.getReturnType().equals(Void.TYPE))
                System.out.println("Für die Verwendung der kuerze-Methode wird kein Rückgabetyp benötigt!");
            if(kuerze.getParameterCount()!=0) {
                System.out.println("Die kuerze-Methode benötigt keine Parameter, da sie direkt auf die Attribute zugreifen soll.");
            }
        }
        
        for(Constructor<?> constr : cls.getDeclaredConstructors()) {

            if(!Modifier.isPublic(constr.getModifiers()))
                System.out.println("In dieser Aufgabe sollten alle Konstruktoren von außen zugreifbar sein, was auf " + constr.toGenericString() + " nicht zutrifft.");
        }
    }
}

Ich danke euch im voraus für die Hilfe!
 
JaVaN0oB

JaVaN0oB

Mitglied
@mrBrown Was @fhoffmann sagt
Allerdings tu ich mich dabei ein bisschen schwer und stehe völlig auf dem Schlauch🤦‍♂️

Ansonsten sind das die auftretenden Fehler:
TestBruch.java:10: error: constructor Bruch in class Bruch cannot be applied to given types;
a = new Bruch(args[0]);System.out.println(a);
^
required: int,int
found: String
reason: actual and formal argument lists differ in length
TestBruch.java:11: error: constructor Bruch in class Bruch cannot be applied to given types;
b = new Bruch(args[1]);System.out.println(b);
^
required: int,int
found: String
reason: actual and formal argument lists differ in length

2 errors
 
Zuletzt bearbeitet:
L

LimDul

Top Contributor
Welche String-Funktionen dürft/sollt ihr den verwenden?

Einen Konstruktor mit einem String zu definieren sollte ja möglich sein, wenn du den Konstruktor mit den zwei Ints hinbekommen hast.

Jetzt musst du den String auseinandernehmen. Es ist garantiert laut Aufgabe, dass der String immer das Format "ziffern/ziffern" hat.
Jetzt gibt es mehrere Möglichkeiten, die einfachste ist vermutlich mittels String.split: https://docs.oracle.com/en/java/jav...java/lang/String.html#split(java.lang.String)

Alternativ kann man sich mittels indexOf die position des / holen und dann mittels substring den Teil vor dem / und den Teil hinter dem / holen.
Egal wie man es man macht - dann hat man zwei Strings, den Teil vor dem / und den Teil dahinter.
Und die kann man jetzt mittels Integer.parseInt in zwei Ints umwandeln, die du dann nur noch in nenner & zaehler speichern musst https://docs.oracle.com/en/java/jav.../lang/Integer.html#parseInt(java.lang.String)

Zwei Anmerkungen zu dem Code:
* Deine kuerze Methode hat einen Fehler, sie betrachtet jeden Divisor nur 1x. Erzeug mal den Bruch 4/4 - da kommt nicht das richtige raus.
* Bzgl. kuerze steht noch dabei, dass sie nicht von außen zugreifbar sein soll
 
JaVaN0oB

JaVaN0oB

Mitglied
Welche String-Funktionen dürft/sollt ihr den verwenden?

Einen Konstruktor mit einem String zu definieren sollte ja möglich sein, wenn du den Konstruktor mit den zwei Ints hinbekommen hast.

Jetzt musst du den String auseinandernehmen. Es ist garantiert laut Aufgabe, dass der String immer das Format "ziffern/ziffern" hat.
Jetzt gibt es mehrere Möglichkeiten, die einfachste ist vermutlich mittels String.split: https://docs.oracle.com/en/java/jav...java/lang/String.html#split(java.lang.String)

Alternativ kann man sich mittels indexOf die position des / holen und dann mittels substring den Teil vor dem / und den Teil hinter dem / holen.
Egal wie man es man macht - dann hat man zwei Strings, den Teil vor dem / und den Teil dahinter.
Und die kann man jetzt mittels Integer.parseInt in zwei Ints umwandeln, die du dann nur noch in nenner & zaehler speichern musst https://docs.oracle.com/en/java/jav.../lang/Integer.html#parseInt(java.lang.String)

Zwei Anmerkungen zu dem Code:
* Deine kuerze Methode hat einen Fehler, sie betrachtet jeden Divisor nur 1x. Erzeug mal den Bruch 4/4 - da kommt nicht das richtige raus.
* Bzgl. kuerze steht noch dabei, dass sie nicht von außen zugreifbar sein soll
Wäre das zum Kürzen besser? (Abgesehen von dem Zugreifen von außen)

Kürzen:
 public void kuerze() {
        int m = Math.abs(zaehler);
        int n = Math.abs(nenner);
        int r;
        do {
            r = m % n;
            m = n;
            n = r;
        }
        while(n != 0);
        if(m > 1) {
            zaehler /= m;
            nenner /= m;
        }
    }

Zum Konstruktor, entweder denke ich da gerade zu kompliziert oder ich bin doch einfach zu "doof" dafür 🤦‍♂️
 
Zuletzt bearbeitet:
kneitzel

kneitzel

Top Contributor
Ja, das ist viel besser - außer dass Du die Variablen sinnvoller benennen könntest.

Und an was scheitert es beim Konstruktor? Du musst erst einmal einen weiteren Konstruktor einfügen, der einen String nimmt:
Java:
    public Bruch(String bruch){
        this.zaehler = ...;
        this.nenner = ...;
        kuerze();
    }

Jetzt ist nur die Frage, wie Du die ... ersetzen könntest. Ihr habt doch bestimmt schon diverse Dinge mit Strings gemacht, oder? Das müsstest Du Dir einfach noch einmal ansehen ...
 
JaVaN0oB

JaVaN0oB

Mitglied
Ja, das ist viel besser - außer dass Du die Variablen sinnvoller benennen könntest.

Und an was scheitert es beim Konstruktor? Du musst erst einmal einen weiteren Konstruktor einfügen, der einen String nimmt:
Java:
    public Bruch(String bruch){
        this.zaehler = ...;
        this.nenner = ...;
        kuerze();
    }

Jetzt ist nur die Frage, wie Du die ... ersetzen könntest. Ihr habt doch bestimmt schon diverse Dinge mit Strings gemacht, oder? Das müsstest Du Dir einfach noch einmal ansehen ...
Ach, ich verstehe. Ich hatte da echt einen kompletten Aussetzer.

Mein Code sieht jetzt so aus:

Bruch.java:
public class Bruch {
    private int zaehler;
    private int nenner;

    public Bruch(int a, int b){
        this.zaehler = a;
        this.nenner = b;
        kuerze();
    }
    
    public Bruch(String bruch){
        this.zaehler = zaehler;
        this.nenner = nenner;
        kuerze();
    }
    
    public String toString() {
        String buffer = zaehler + "/" + nenner;
        return buffer;
    }

     private void kuerze() {
        int m = Math.abs(zaehler);
        int n = Math.abs(nenner);
        int r;
        do {
            r = m % n;
            m = n;
            n = r;
        }
        while(n != 0);
        if(m > 1) {
            zaehler /= m;
            nenner /= m;
        }
    }

    private int getZaehler(){
        return zaehler;
    }
    private int getNenner(){
        return nenner;
    }

    public Bruch addiere(Bruch br){

        int z1 = zaehler  * br.getNenner();
        int z2 = nenner * br.getZaehler();
        int n= nenner*br.getNenner();
        return new Bruch(z1+z2, n);
    }

}
 
H

httpdigest

Top Contributor
Mein Code sieht jetzt so aus:

Bruch.java:
public class Bruch {
    public Bruch(String bruch){
        this.zaehler = zaehler;
        this.nenner = nenner;
        kuerze();
    }
}
Hier solltest du nochmal nachdenken. :)
Dieser Konstruktor ist gerade äquivalent zu:
Java:
public Bruch(String bruch){
  this.zaehler = this.zaehler;
  this.nenner = this.nenner;
  kuerze();
}
Die Variable `bruch` (der Parameter) wird ja letztlich überhaupt nicht verwendet. Hier soll ja (laut Aufgabenstellung) z.B. sowas wie "123/456" als String stehen. Damit musst du natürlich was tun.
 
JaVaN0oB

JaVaN0oB

Mitglied
Ich dank euch vielmals für eure Hilfe, ich hab es jetzt endlich gerafft und geschafft. Das Testsystem gibt mir die grünen Häkchen.
So sieht mein Code nun aus:

Bruch.java:
public class Bruch {
    private int zaehler;
    private int nenner;

    public Bruch(int a, int b){
        this.zaehler = a;
        this.nenner = b;
        kuerze();
    }
    
    public Bruch(String bruch){
        String Cache[] = new String[2];
        Cache=bruch.split("/");
        this.zaehler = Integer.parseInt(Cache[0]);
        this.nenner = Integer.parseInt(Cache[1]);
        kuerze();
    }
    
    public String toString() {
        String buffer = zaehler + "/" + nenner;
        return buffer;
    }

     private void kuerze() {
        int m = Math.abs(zaehler);
        int n = Math.abs(nenner);
        int r;
        do {
            r = m % n;
            m = n;
            n = r;
        }
        while(n != 0);
        if(m > 1) {
            zaehler /= m;
            nenner /= m;
        }
    }

    private int getZaehler(){
        return zaehler;
    }
    private int getNenner(){
        return nenner;
    }

    public Bruch addiere(Bruch br){

        int z1 = zaehler  * br.getNenner();
        int z2 = nenner * br.getZaehler();
        int n= nenner*br.getNenner();
        return new Bruch(z1+z2, n);
    
    }
}
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
O Fehler in kuerzen()-methode in Bruchklasse Java Basics - Anfänger-Themen 3
F GSON file mit einer List erstellen Java Basics - Anfänger-Themen 2
Ray19941 Über BlueJ Textdatei selbstständig erstellen lassen Java Basics - Anfänger-Themen 2
J Java Queue mit default Werten erstellen Java Basics - Anfänger-Themen 4
N Kreismuster auf Bestehendem Kreis erstellen Java Basics - Anfänger-Themen 10
K Rahmen erstellen mit mehrdimensionalem Array Java Basics - Anfänger-Themen 1
B Hilfe bei Map Liste erstellen Java Basics - Anfänger-Themen 10
F Adjunkte Matrix erstellen Java Basics - Anfänger-Themen 3
J Objekt-Array dynamischer Länge aus Benutzereingaben erstellen Java Basics - Anfänger-Themen 6
T Startbildschirm für ein Spiel erstellen Java Basics - Anfänger-Themen 0
C Probleme mit dem Erstellen und Importieren von Packages Java Basics - Anfänger-Themen 6
GermanPie Discord Text Channel erstellen? Java Basics - Anfänger-Themen 1
K Objektdiagramm erstellen Java Basics - Anfänger-Themen 3
C Wie kann ich Versionen eines Projektes in Eclipse erstellen? Java Basics - Anfänger-Themen 3
D Klassen Klassendiagramm richtig erstellen Java Basics - Anfänger-Themen 20
S Objekte indiziert erstellen Java Basics - Anfänger-Themen 27
C eigene Methoden erstellen (Instanzmethoden) Java Basics - Anfänger-Themen 7
B Methode für jede beliebe Entity erstellen Java Basics - Anfänger-Themen 7
E Filmsammlung erstellen Java Basics - Anfänger-Themen 6
B Eine Methode erstellen Java Basics - Anfänger-Themen 3
M Erstellen eines insets Objekts, GridBagLayout Java Basics - Anfänger-Themen 13
I ArrayList erstellen innerhalb einer Zeile? Java Basics - Anfänger-Themen 3
N String N-Gramme mit Stream erstellen Java Basics - Anfänger-Themen 7
K Quersumme erstellen Java Basics - Anfänger-Themen 7
M Wie kann ich ein Objekt erstellen, wenn sich der Klassenname in einer Variablen befindet? Java Basics - Anfänger-Themen 10
D Input/Output Mehrzeiligen String aus Textdatei erstellen Java Basics - Anfänger-Themen 5
C Erstellen eines Widerstandsnetzwerks Java Basics - Anfänger-Themen 10
B Neue Liste erstellen, wenn Objekte bestimmte Referenz hat / Gruppierung von Einträgen Java Basics - Anfänger-Themen 12
A Taschenrechner mit Gui erstellen Java Basics - Anfänger-Themen 9
S Variablen Variablen in einer Schleife erstellen lassen Java Basics - Anfänger-Themen 11
S Hilfe : Unendlich viele Zufallszahlen erstellen? Java Basics - Anfänger-Themen 8
P Arrays "automatisch" erstellen lassen Java Basics - Anfänger-Themen 12
L Baum aus Integer Liste erstellen Java Basics - Anfänger-Themen 0
M Regex für bestimmte Wörter bzw. bestimmte Zeichen erstellen Java Basics - Anfänger-Themen 5
D Zusammenhängenden Graphen für Gleisnetz erstellen Java Basics - Anfänger-Themen 13
Y Unterschied zwischen WindowBuilder und herkömmlichen erstellen des GUI´s? Java Basics - Anfänger-Themen 9
M Writer für unterschiedliche Obj/inbt/double erstellen? Java Basics - Anfänger-Themen 1
Kirby.exe Generische Objekt Instanz erstellen Java Basics - Anfänger-Themen 14
P Fractal erstellen Java Basics - Anfänger-Themen 4
H Objekt mit Methode erstellen Java Basics - Anfänger-Themen 6
C Java Warenkorb erstellen Java Basics - Anfänger-Themen 10
L Queue mithilfe von 2 Stacks erstellen Java Basics - Anfänger-Themen 1
M Erstellen eines Stacks Java Basics - Anfänger-Themen 14
D java main methode kann nicht kompiliert werden (Erstellen eines Objekts) Java Basics - Anfänger-Themen 6
S Methode in der Klasse erstellen Java Basics - Anfänger-Themen 2
B Mit methode Objekt aus anderer Klasse erstellen Java Basics - Anfänger-Themen 6
G "Ladebalken" erstellen - Übung Java Basics - Anfänger-Themen 3
K Klassen Klasse erstellen, die Punkte eines Koordinatensystems repräsentiert? Java Basics - Anfänger-Themen 3
Tommy135 Event erstellen Java Basics - Anfänger-Themen 7
C Pyramide aus * erstellen Java Basics - Anfänger-Themen 23
Freshy Java Hyperlink erstellen Java Basics - Anfänger-Themen 11
D Ausführbare jar/exe aus JAVAFX Projekt erstellen (IntelliJ) Java Basics - Anfänger-Themen 14
O Anonyme Klasse einer Liste erstellen Java Basics - Anfänger-Themen 7
B Signatur erstellen - Bild ist nur weiß Java Basics - Anfänger-Themen 0
F Erstellen zweier Objekte mit dem selben Inhalt Java Basics - Anfänger-Themen 1
S Arrays erstellen Java Basics - Anfänger-Themen 6
D Algorithmus in Pseudocode mit log2(n) Operationen erstellen Java Basics - Anfänger-Themen 3
J ShortCut erstellen aber wie die dll einbinden Java Basics - Anfänger-Themen 3
D Methoden Textdokument erstellen und auslesen. Java Basics - Anfänger-Themen 46
H Bilddateien erstellen und beschreiben mit Java... Java Basics - Anfänger-Themen 3
A Mit Rekursion Zufallszahlen erstellen und größte finden Java Basics - Anfänger-Themen 5
J Eine Liste von Listen erstellen Java Basics - Anfänger-Themen 11
B HTML Code / Seite auslesen und JAVA Objekte erstellen Java Basics - Anfänger-Themen 12
UnknownInnocent Best Practice Klassendiagramm aus fertigen Klassen erstellen lassen Java Basics - Anfänger-Themen 2
B JUnit Test erstellen Java Basics - Anfänger-Themen 6
A Liste aus drei Strings erstellen Java Basics - Anfänger-Themen 5
F Abrechnungsprogramm erstellen Student (Anfänger) Java Basics - Anfänger-Themen 2
T Klassen Klassenübergreifende Objekte erstellen lassen Java Basics - Anfänger-Themen 5
D new arraylist (List) dynamisch erstellen Java Basics - Anfänger-Themen 1
S Runde Buttons erstellen Java Basics - Anfänger-Themen 10
UnknownInnocent Methoden JLabel erstellen & verschieben Java Basics - Anfänger-Themen 1
I Methode addCharacter erstellen Java Basics - Anfänger-Themen 34
J ArrayList Name mit String erstellen Java Basics - Anfänger-Themen 8
G Sequenzdiagramm erstellen Java Basics - Anfänger-Themen 1
N Sicherheitsnummer erstellen und verändern können Java Basics - Anfänger-Themen 1
F Referenz an ein Objekt in einer anderen Klasse erstellen(Nullpointer exception) Java Basics - Anfänger-Themen 6
C Erstellen eines Telefonbuchs Java Basics - Anfänger-Themen 1
B Termine (Datum erstellen), Abhängig von Intervallen Java Basics - Anfänger-Themen 0
J GUI wird direkt nach dem erstellen weiß übermalt Java Basics - Anfänger-Themen 3
UnknownInnocent mit javafx button erstellen Java Basics - Anfänger-Themen 1
B Canvas erstellen Java Basics - Anfänger-Themen 4
M Rekursive Dateiliste erstellen mit Dateiendung(en) ?? Java Basics - Anfänger-Themen 4
A "Gedankenlesen" Klasse Shape erstellen Java Basics - Anfänger-Themen 5
P MyButton erstellen Java Basics - Anfänger-Themen 2
D Methoden JButton und JLabel in einer Methode erstellen Java Basics - Anfänger-Themen 5
H Array mit Zahlen die durch 3 und 5 teilbar sind erstellen Java Basics - Anfänger-Themen 13
L B+Baum innere Knoten erstellen Java Basics - Anfänger-Themen 3
B Schleife erstellen mit String Format "001" bis "999" Java Basics - Anfänger-Themen 2
C Matrix erstellen Spaltensumme, Zeilensumme, Diagonale Java Basics - Anfänger-Themen 1
C Liste o.ä. erstellen mit <Integer, <Integer, String> Java Basics - Anfänger-Themen 7
T Variablen Beliebig viele Arrays in Schleife erstellen Java Basics - Anfänger-Themen 1
M Graphics2D Objekt mir der Maus erstellen Java Basics - Anfänger-Themen 5
A Zeitintervall erstellen: z.B. 4000 Sekunden = 01:06:40 Java Basics - Anfänger-Themen 21
JDimi Textdatei mit beliebig vielen Zeilenumbrüchen erstellen Java Basics - Anfänger-Themen 2
T Windows service erstellen Java Basics - Anfänger-Themen 1
E Bruch erstellen - Von Int zu Double Ergebnis Java Basics - Anfänger-Themen 24
E Bruch Klasse erstellen Java Basics - Anfänger-Themen 4
S Erste Schritte Java GUI - Rechner erstellen Java Basics - Anfänger-Themen 4
K Java JFrame mit Hintergrundbild erstellen Java Basics - Anfänger-Themen 1
N Vererbung Submatrix mit Verweis auf Matrix erstellen Java Basics - Anfänger-Themen 9

Ähnliche Java Themen

Anzeige

Neue Themen


Oben