Boolean in einer Methode um 2 Objekte zu vergleichen

K

Krischan

Mitglied
Ich möchte mit einer Methode vergleichen, ob eine Box von den Werten (Breite, Höhe, Länge) in eine andere Box passt.

Java:
class Box
{
    // Variablen
    private double breite;
    private double länge;
    private double höhe;
   
    // Konstruktoen
    Box (double breite, double länge, double höhe)
    {
        this.breite = breite;
        this.länge = länge;
        this.höhe = höhe;
    }
   
    Box (double seite)
    {
        breite = seite;
        länge = seite;
        höhe = seite;
    }
    Box (Box altebox)
    {
        this.breite = altebox.getBreite();
        this.länge = altebox.getLänge();
        this.höhe = altebox.getHöhe();
    }
   
    // Methoden
       
    public double getLänge()
    {
        return länge;
    }
    public double getHöhe()
    {
        return höhe;
    }
    public double getBreite()
    {
        return breite;
    }
   
    public double berechneVolumen()
    {
        return breite * höhe * länge;
    }
    private double berechneOberflaecheVorn()
    {
        return breite * höhe;
    }
    private double berechneOberflaecheOben()
    {
        return breite * länge;
    }
    private double berechneOberflaecheSeitlich()
    {
        return höhe * länge;
    }
   
   
    public double berechneOberflaeche( )
     {
        return 2 * berechneOberflaecheVorn() +
               2 * berechneOberflaecheOben() +
               2 * berechneOberflaecheSeitlich() ;
     }
    public Box großeBox()
    {
        return new Box(1.25*breite, 1.25* länge, 1.25* höhe);
       
    }
    public Box kleineBox()
    {
        return new Box(0.75*breite, 0.75* länge, 0.75* höhe);
    }
    public boolean passtIn (Box äußereBox)
    {
        if (this.breite <  ??? )
        {
            System.out.println("Die Box passt");
            return true;
        }
        System.out.println("Die Box passt nicht");
        return false;
    }
}

class BoxTester
{

  public static void main ( String[] args )
  {
    Box box = new  Box(2.5, 5.0, 6.0 );
   
     System.out.println( "Flaeche: "  + box.berechneOberflaeche( ) +
                         " Volumen: " + box.berechneVolumen( ) );

     System.out.println( "Laenge: " + box.getLänge() +
                         " Hoehe: " + box.getHöhe() +
                         " Breite: " + box.getBreite());
     System.out.println("");
   
     Box boxneu = new Box(box);
   
     System.out.println( "Flaeche: "  + boxneu.berechneOberflaeche( ) +
             " Volumen: " + boxneu.berechneVolumen( ) );

     System.out.println( "Laenge: " + boxneu.getLänge() +
             " Hoehe: " + boxneu.getHöhe() +
             " Breite: " + boxneu.getBreite());
     System.out.println("");
   
     box = box.großeBox();
   
     System.out.println( "Flaeche: "  + box.berechneOberflaeche( ) +
             " Volumen: " + box.berechneVolumen( ) );

     System.out.println( "Laenge: " + box.getLänge() +
             " Hoehe: " + box.getHöhe() +
             " Breite: " + box.getBreite());
     System.out.println("");
   
     boxneu = boxneu.kleineBox();
   
     System.out.println( "Flaeche: "  + boxneu.berechneOberflaeche( ) +
             " Volumen: " + boxneu.berechneVolumen( ) );

     System.out.println( "Laenge: " + boxneu.getLänge() +
             " Hoehe: " + boxneu.getHöhe() +
             " Breite: " + boxneu.getBreite());
     System.out.println("");
   
     boxneu.passtIn(box);
   }
}

Ich hänge an der if Bedingung fest.

Java:
 public boolean passtIn (Box äußereBox)

    {
        if (this.breite <  ??? ())
        {
            System.out.println("Die Box passt");
            return true;
        }
        System.out.println("Die Box passt nicht");
        return false;
}

Ich weiß hier nicht wo ich den richtigen Wert für die "äußereBox" herbekomme. Die Methode getBreite() scheint ja nur den selben Wert wie this.breite zu fiefern wodurch immer false zurückgegeben wird.
 
O

Oneixee5

Aktives Mitglied
Du kannst 2 double Variablen nicht mit <, >, == vergleichen. Das führt u.U. nicht zum richtigen Ergebnis. Als Anfänger empfehle ich dir den Umweg über BigDecimal.

Java:
     BigDecimal a = new BigDecimal(...);
     BigDecimal b = new BigDecimal(...);
     a.compareTo(b) == 0;
     a.compareTo(b) > 0;
     a.compareTo(b) < 0;
 
K

Krischan

Mitglied
Kannst du das erläutern? Wann führt es denn zum falschen Ergebnis?
BigDecimal wurde in dem Tutorial was ich durcharbeite bisher nicht behandelt. Deshalb gehe ich mal davon aus, dass es damit wahrscheinlich funktioniert (du wirst schon wissen was du schreibst ;-) aber in diesem Fall nicht für die Lösung vorgesehen ist.
 
T

thecain

Top Contributor
Du kannst 2 double Variablen nicht mit <, >, == vergleichen. Das führt u.U. nicht zum richtigen Ergebnis. Als Anfänger empfehle ich dir den Umweg über BigDecimal.

Java:
     BigDecimal a = new BigDecimal(...);
     BigDecimal b = new BigDecimal(...);
     a.compareTo(b) == 0;
     a.compareTo(b) > 0;
     a.compareTo(b) < 0;
Wieso? Ich sehe in dem Beispiel kein Problem.
 
X

Xyz1

Gast
Wieso? Ich sehe in dem Beispiel kein Problem
Ich auch nicht.

Aber wann passt eine Box in eine andere? Wenn jeweils Länge,Breite,Höhe sortiert kleiner oder größer ist

Beweis:
Sei l1,b1,h1,l2,b2,h2, wobei l1>b1>h1 und l2>b2>h2.
Wenn h1 < h2 dann gilt auch h1 < b2 und h1 < l2 (Transitivität).
Wenn b1 < b2 analog.
Wenn l1 < l2 trivial.
h1 !< h2 ^ b1 !< b2 ^ b1 !< b2 muss gelten, wenn eine Box in eine andere passt.
 
mihe7

mihe7

Top Contributor
Kannst du das erläutern? Wann führt es denn zum falschen Ergebnis?
Es geht um Rundungsfehler, die allerdings nur eine Rolle spielen, wenn gerechnet wird -> hier also irrelevant.

Das ist wie im Dezimalen: rechnerisch wäre 1/3 + 1/3 + 1/3 == 1. Da Du aber zur Darstellung von 1/3 nicht ausreichend viele Dezimalstellen zur Verfügung hast, wird gerundet, so dass plötzlich 1/3 + 1/3 + 1/3 < 1 gilt. Genau das gleiche passiert bei double auch: 0,1 (dezimal) lässt sich binär nicht exakt darstellen und muss daher gerundet werden. Addierst Du zehnmal 0,1, gilt für das Ergebnis, dass es kleiner als 1 ist:

Java:
public class Test {
    public static void main(String[] args) {
        double a = 0;
        for (int i = 0; i < 10; i++) { a += 0.1; }
        if (a < 1.0) {
            System.out.printf("%f < 1.0\n", a);
        }
    }
}
 
Blender3D

Blender3D

Top Contributor
Du kannst 2 double Variablen nicht mit <, >, == vergleichen. Das führt u.U. nicht zum richtigen Ergebnis. Als Anfänger empfehle ich dir den Umweg über BigDecimal.
Als Anfänger befasst man sich nicht unbedingt mit Rundungsfehlern. Hier geht es in erster Linie um Objektorientierung. Dafür sollte double ausreichend sein.
Außerdem kommt bei einem Vergleich von 2 double Werten die Rundungsproblematik gar nicht zu tragen.
Java:
if (breite <  äußereBox.getBreite() )
 
O

Oneixee5

Aktives Mitglied
Es funktioniert einfach nicht:
Java:
public final class Test {

    static class Box {

        private double breite;
        private double länge;
        private double höhe;

        Box(double breite, double länge, double höhe) {
            this.breite = breite;
            this.länge = länge;
            this.höhe = höhe;
        }

        public boolean passtIn(Box äußereBox) {
            if (this.breite < äußereBox.breite) {
                System.out.println("Die Box passt");
                return true;
            }
            System.out.println("Die Box passt nicht");
            return false;
        }

    }

    public static void main(String[] args) throws Exception {

        double a = 1d;
        double b = 0d;
        for (int i = 0; i < 10; i++) {
            b += 0.1;
        }
       
        Box box1 = new Box(a, 1d, 1d);
        Box box2 = new Box(b, 1d, 1d);
       
        System.out.println(box2.passtIn(box1)); // funktioniert nicht
    }

}
 
Zuletzt bearbeitet:
O

Oneixee5

Aktives Mitglied
Als Anfänger befasst man sich nicht unbedingt mit Rundungsfehlern. Hier geht es in erster Linie um Objektorientierung. Dafür sollte double ausreichend sein.
Außerdem kommt bei einem Vergleich von 2 double Werten die Rundungsproblematik gar nicht zu tragen.
Java:
if (breite <  äußereBox.getBreite() )
Es geht ja auch gar nicht um Rundung.
 
T

thecain

Top Contributor
Du kreierst ein Problem das in seinem Fall nicht existiert/irrelevant ist. Einem Anfänger zu BigDecimal statt double zu raten ist in seinem Fall unsinn.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
K Boolean in einer erstellten Klasse verwenden Java Basics - Anfänger-Themen 14
Z Boolean Abfrage in einer for each Schleife Java Basics - Anfänger-Themen 2
G Wie kann man den Erfolg einer Zuweisung als Boolean Wert verwenden? Java Basics - Anfänger-Themen 12
S Variablen Prüfen, ob einer von vielen boolean true ist Java Basics - Anfänger-Themen 8
E Boolean wert innerhalb einer Tabelle ändern Java Basics - Anfänger-Themen 4
J Boolean[] teilen Java Basics - Anfänger-Themen 13
S public static boolean Java Basics - Anfänger-Themen 4
R Boolean Methode Rückgabewert if() Java Basics - Anfänger-Themen 1
G Rekursive Methode liefert augenscheinlich keinen boolean-Wert zurück. Java Basics - Anfänger-Themen 4
kazzam94 Methode soll Array von Boolean zurückgeben Java Basics - Anfänger-Themen 5
L Überschriebene Boolean Statements Java Basics - Anfänger-Themen 2
L boolean-Abfrage enumeration Java Basics - Anfänger-Themen 3
A Ausgabe mit boolean Java Basics - Anfänger-Themen 3
R Boolean value ohne Kontrollstrukturen ändern Java Basics - Anfänger-Themen 5
F boolean stellt sich auf true Java Basics - Anfänger-Themen 15
V Boolean Wert nicht richtig erkannt Java Basics - Anfänger-Themen 4
Kirby.exe ArrayOutOfBoundsException bei boolean Array Java Basics - Anfänger-Themen 19
C Ganzzahlige Werte in Boolean ausgeben und überprüfen ob Primzahl oder nicht, wenn es keine Primzahl ist soll es die Primfaktorzerlegung ausgeben Java Basics - Anfänger-Themen 4
I converting boolean Array to String Array Java Basics - Anfänger-Themen 10
C Java Boolean reagiert nicht Java Basics - Anfänger-Themen 18
A Alle true Werte eines boolean Arrays herausfiltern Java Basics - Anfänger-Themen 19
G Ratlosigkeit zur Aufgabe im Anhang (boolean, equals.) Java Basics - Anfänger-Themen 20
F Boolean Methode Wert ausgeben. Java Basics - Anfänger-Themen 2
X Erste Schritte boolean wert ändert sich nicht? Java Basics - Anfänger-Themen 6
W Problem mit dem Wert von boolean-Variable Java Basics - Anfänger-Themen 3
P Array Sortieren mit boolean? Java Basics - Anfänger-Themen 33
A Boolean in String Java Basics - Anfänger-Themen 2
S Operatoren Boolean Vergleichsoperator Java Basics - Anfänger-Themen 7
Queiser Super boolean Java Basics - Anfänger-Themen 11
E ISBN Nummer mit boolean Java Basics - Anfänger-Themen 5
W In Methode boolean array zurückgeben Java Basics - Anfänger-Themen 3
B Math.random mit Boolean array? Java Basics - Anfänger-Themen 17
T Methoden Boolean wird nicht gesetzt Java Basics - Anfänger-Themen 1
H boolean Array Problem Java Basics - Anfänger-Themen 7
S boolean Wert von mehreren int Möglichkeiten abfragen ? Java Basics - Anfänger-Themen 4
J Problem mit Boolean bei Funktion! Java Basics - Anfänger-Themen 5
O boolean Array Frage! Java Basics - Anfänger-Themen 4
? Methoden Boolean Wert vergleichen und einlesen Java Basics - Anfänger-Themen 1
M Erste Schritte while boolean=false läuft nur bei true??? Java Basics - Anfänger-Themen 23
D Boolean Array initialisieren Java Basics - Anfänger-Themen 4
M Datentypen Byte, Float und Boolean Java Basics - Anfänger-Themen 13
A Problem beim Deklarieren von einem BOOLEAN Java Basics - Anfänger-Themen 4
W Interpreter-Fehler boolean nur eins darf wahr sein Java Basics - Anfänger-Themen 11
K Problem mit Methode(Array,Boolean,ForSchleife) Java Basics - Anfänger-Themen 6
V Methode erstellen für ein Boolean Array Java Basics - Anfänger-Themen 13
T Boolean by Reference Java Basics - Anfänger-Themen 6
L Wertebereich von boolean Java Basics - Anfänger-Themen 4
D Erklärung static boolean Java Basics - Anfänger-Themen 6
T Eine String Matrix erstellen die eine boolean Funtion verwendet Java Basics - Anfänger-Themen 10
J Datentypen Boolean Refferenz Objekt Java Basics - Anfänger-Themen 2
A boolean Methode ohne If und else Java Basics - Anfänger-Themen 1
fLooojava Laufender Thread | Boolean ändern Java Basics - Anfänger-Themen 9
T Boolean Missing return Statement?! Java Basics - Anfänger-Themen 2
A Boolean aus dem ActionlListener Java Basics - Anfänger-Themen 1
T hashCode mit boolean Java Basics - Anfänger-Themen 1
T boolean, was passiert hier? Java Basics - Anfänger-Themen 4
M Sind solche boolean Anweisen empfehlenswert? Java Basics - Anfänger-Themen 3
N Boolean Werte - immer "false" Java Basics - Anfänger-Themen 5
J GUI per Boolean steuern Java Basics - Anfänger-Themen 3
F Effizientes Lesen von 65 Datein mit Boolean Werten Java Basics - Anfänger-Themen 6
K Viergewinnt - boolean Problem Java Basics - Anfänger-Themen 2
S Best Practice Boolean mit IF verbinden Java Basics - Anfänger-Themen 7
D Boolean mit String Java Basics - Anfänger-Themen 2
K Methode ohne Rückgabewert in boolean Methode ändern Java Basics - Anfänger-Themen 6
E 2 dimensionales Boolean Array Java Basics - Anfänger-Themen 5
B assertArrayEquals nicht für boolean[]? Java Basics - Anfänger-Themen 2
M !boolean das selbe wie boolean == false? Java Basics - Anfänger-Themen 3
L Boolean Methode wirft Fehler aus Java Basics - Anfänger-Themen 12
M Erste Schritte boolean: ist Zahl Hexadezimal - Lösung verwirrend Java Basics - Anfänger-Themen 6
F Datentypen Frage nach Boolean Java Basics - Anfänger-Themen 11
C Sieb des Eratosthenes ohne boolean Java Basics - Anfänger-Themen 20
B Boolean abfrage Java Basics - Anfänger-Themen 3
L The operator && is undefined for the argument type(s) String, boolean Java Basics - Anfänger-Themen 8
L Methoden Boolean-Methode Java Basics - Anfänger-Themen 16
S Setter Methode von Boolean Java Basics - Anfänger-Themen 11
W Datentypen Zweidimensionales Boolean Array Java Basics - Anfänger-Themen 13
P Compiler-Fehler Boolean: Missing Return Statement Java Basics - Anfänger-Themen 4
M int & boolean Java Basics - Anfänger-Themen 12
feardorcha boolean array false - true - Abfrage Java Basics - Anfänger-Themen 10
R boolean, if-else Java Basics - Anfänger-Themen 7
J Variablen Boolean true "übersetzen" in String Java Basics - Anfänger-Themen 10
M Meldung "cannot convert flom boolean to boolean[]" Java Basics - Anfänger-Themen 3
S Name eines boolean ausgeben (nicht den Wert) Java Basics - Anfänger-Themen 43
D boolean te wird nicht verwendet Java Basics - Anfänger-Themen 2
M Bedingte Anweisung mit Boolean Java Basics - Anfänger-Themen 2
C cannot convert from int to boolean Java Basics - Anfänger-Themen 3
T Variablen boolean-wert wird nicht gesetzt Java Basics - Anfänger-Themen 6
A In Methode boolean ändern Java Basics - Anfänger-Themen 2
D Java Einsteiger (boolean, if-else etc.) Java Basics - Anfänger-Themen 7
E Wieso funktioniert Boolean.parseBoolean(s) nicht? Java Basics - Anfänger-Themen 9
M Problem mit boolean. Return nicht erkannt Java Basics - Anfänger-Themen 10
B Ausgabe eines boolean wertes Java Basics - Anfänger-Themen 10
R Switch Abfrage: Found boolean but expected int? Java Basics - Anfänger-Themen 7
A Boolean, Girokonto-Programm Java Basics - Anfänger-Themen 30
R Erste Schritte Arrays vergleichen und boolean Java Basics - Anfänger-Themen 5
P Variablen static final boolean Java Basics - Anfänger-Themen 9
T Array und Boolean ? Java Basics - Anfänger-Themen 6
S Datentypen Problem mit Boolean Java Basics - Anfänger-Themen 19
B Zweidimensionales Array mit boolean Werten Java Basics - Anfänger-Themen 3
C Über Boolean Static, String ausgeben Java Basics - Anfänger-Themen 3

Ähnliche Java Themen

Anzeige

Neue Themen


Oben