Wort als Int funktioniert nicht

Status
Nicht offen für weitere Antworten.

materthron

Mitglied
Hi!
Hab folgenden Code:

Code:
    public static final int MALE = 0;
    public static final int FEMALE = 1;
    
    
    /** @return BMI in KG*/
    public double getBMIinKG(double weight, double heigth, int sex) {

        if(sex != MALE && sex != FEMALE) throw new IllegalArgumentException();
        ...
        return bmi;
    }

Wenn ich aber jetzt aufrufe
Code:
bmi.getBMIinKG( 75, 171, MALE )
, dann funkt des ned.


Warum?

Wie immer hoherfreut über jedwedige Antwort.


:!:
Für den ders gemerkt hat: dieser Code gehört auch zum if oder verschiedene getter-Thema.

Das Programm kann dann und wann auf der Website BMICalc.sf.net heruntergeladen werden.
 

materthron

Mitglied
Is
Code:
public final boolean MALE = true;
public final boolean FEMALE = false;

ned irgendwie sexistisch?

:D
 

meez

Top Contributor
Code:
public final String FEMALE = "Kueche";

wäre sexistisch...;)
 

meez

Top Contributor
Reality hat gesagt.:
Code:
public double getBMIinKG(double weight, double heigth, String sex)

Liebe Grüße
Reality

Warum...Das braucht nur sinnlos Speicher, und bei den Vergelcihen auch noch mehr Rechenzeit...
 

Reality

Top Contributor
meez hat gesagt.:
Reality hat gesagt.:
Code:
public double getBMIinKG(double weight, double heigth, String sex)

Liebe Grüße
Reality

Warum...Das braucht nur sinnlos Speicher, und bei den Vergelcihen auch noch mehr Rechenzeit...
Hatte ich ganz vergessen! :shock:

Mal im Ernst. Wenn noch jemand anders mitprogrammiert oder einfach nur wegen der Übersichtlichkeit, dann schreibt man in einer Zeile.

Code:
getBMIinKG(80, 1.80, "Male");

anstatt

Code:
getBMIinKG(80, 1.80);
BMI.Male = true;

Wenn man das bei jeder Variable machen würde, hat man erst mal mehr Zeilen, was unübersichtlich ist und andere Mitprogrammierer haben es schwerer.
Oder findest du es krass, dass z.B. das Wort "Male" 4 Bytes belegt?!

Vergleichen musst du übrigens so oder so, wenn du herausfinden willst, ob Male oder Female! :p

Liebe Grüße
Reality
 

akira

Bekanntes Mitglied
Man könnte auch einen eigenen Typ entwerfen: :D

Code:
public class Gender {

    public final static Gender MALE = new Gender();
    public final static Gender FEMALE = new Gender();

    private Gender(){}
}
 

Reality

Top Contributor
Du hast eine eigene Klasse und kein eigenen Typ entworfen. ;)
Ausserdem hat materthron schon eine eigene Klasse entworfen (aber eben nicht für jede zweite Variable).

Liebe Grüße
Reality
 

akira

Bekanntes Mitglied
Du hast eine eigene Klasse und kein eigenen Typ entworfen.

Natürlich ist es eine Klasse, eigene Typen gibt es ja in Java nicht.
Jedoch erfüllt die Klasse die Funktion eines Typs. Es können von ihr nur die zwei Instanzen MALE und FEMALE existieren, auf die man mit == testen kann.
Damit hat man eine gewisse Typsicherheit geschaffen. Außerdem verbrauchen die beiden Instanzen KEINEN Speicher, da sie keine Member haben.


Ausserdem hat materthron schon eine eigene Klasse entworfen (aber eben nicht für jede zweite Variable).

Wie eigene Klasse, er hat doch int-Konstanten definiert. ???:L
 

meez

Top Contributor
Das was er da macht ist schon OK...Eigene Klassen sind sinnlos...
MALE und FEMALE sollen ja Felder sein...
 

akira

Bekanntes Mitglied
Eigene Klassen sind sinnlos...
MALE und FEMALE sollen ja Felder sein...

Diese Klasse ist doch quasi ein Feld. Statt:

Code:
public double getBMIinKG(double weight, double heigth, int sex) {

        if(sex != MALE && sex != FEMALE) throw new IllegalArgumentException();
        ...
        return bmi;
    }

würde man schreiben:

Code:
public double getBMIinKG(double weight, double heigth, Gender sex) {

        //if(sex != MALE && sex != FEMALE) throw new IllegalArgumentException(); // kann es nicht geben!
        ...
        if(sex==Gender.MALE) {
        // Mann-Code
        }
        else { // eine andere Möglichkeit kann es nicht geben.
        // Frau-Code
        }
        return bmi;
}
 

Reality

Top Contributor
akira hat gesagt.:
Ausserdem hat materthron schon eine eigene Klasse entworfen (aber eben nicht für jede zweite Variable).

Wie eigene Klasse, er hat doch int-Konstanten definiert. ???:L

In diesem Punkt gebe ich dir Recht, dass ich mich versehen hab und man nicht rauslesen kann, ob er eine eigene Klasse entworfen hat.

Liebe Grüße
Reality
 

Reality

Top Contributor
akira hat gesagt.:
würde man schreiben:

Code:
public double getBMIinKG(double weight, double heigth, Gender sex) {

        //if(sex != MALE && sex != FEMALE) throw new IllegalArgumentException(); // kann es nicht geben!
        ...
        if(sex==Gender.MALE) {
        // Mann-Code
        }
        else { // eine andere Möglichkeit kann es nicht geben.
        // Frau-Code
        }
        return bmi;
}

Mir fällt gerade auf, dass dein oberer Code keinen Sinn ergibt:

Code:
public class Gender {

    public final static Gender MALE = new Gender();
    public final static Gender FEMALE = new Gender();

    private Gender(){}
}

Du hast Objekte namens MALE und FEMALE von der Klasse Gender erstellt (Dein Konstruktor ist übrigens unnötig, da er nichts macht). Das bringt dir jedoch überhaupt nichts, da du keine Variablentypen wie String, int, boolean oder ähnliches hast, die das Geschlecht definieren!. Wie kannst du also vergleichen?! Geht in deinem Fall nicht.

Ausserdem vergleichst du die Inhalte der Objekte mit == , was bei Objekten nicht geht. Das musst du mit equals machen. Und wegen 2 Variablen legt man normalerweise keine Klasse an.

Liebe Grüße
Reality
 

Illuvatar

Top Contributor
Das Problem scheint gelöst zu sein, das Offtopic geht weiter... :wink: :gaen:

Akira hat gesagt.:
Natürlich ist es eine Klasse, eigene Typen gibt es ja in Java nicht.
Jedoch erfüllt die Klasse die Funktion eines Typs. Es können von ihr nur die zwei Instanzen MALE und FEMALE existieren, auf die man mit == testen kann.
Damit hat man eine gewisse Typsicherheit geschaffen. Außerdem verbrauchen die beiden Instanzen KEINEN Speicher, da sie keine Member haben.

1. Doch, bissle Speicher brauchen sie, ich glaub 4 byte oder so braucht jede Instanz.

2. Doch, gibt es, Java 1.5:
Code:
enum Genders{
    male,
    female
}
Code:
public double getBMIinKG(double weight, double heigth, Genders sex) { 
        if (sex == Genders.MALE) { 
            //Mann-Code 
        } 
        else{
            //Frau-Code 
        } 
        return bmi; 
}
und dann aufrufen:
Code:
double d = getBMIinKG (65., 1.8, Genders.male);
:bae:

@Reality Doch das stimmt so, und kommt auch oft in der API vor.
Durch den privaten Konstruktor gibt es nämlich nur die zwei Instanzen der Klasse.
 

akira

Bekanntes Mitglied
Doch, bissle Speicher brauchen sie, ich glaub 4 byte oder so braucht jede Instanz.

Ok, es werden 8 Byte statischer Speicher verbraucht, jedoch kein Platz auf dem Heap.

Ausserdem vergleichst du die Inhalte der Objekte mit == , was bei Objekten nicht geht
.

Wieso kann ich Objekte nicht mit == vergleichen?

Und wegen 2 Variablen legt man normalerweise keine Klasse an.

Ok, in diesem Falle würde auch ein boolean genügen, aber ab 3 Werten macht so ein Pattern durchaus Sinn.
 
B

Beni

Gast
akira hat gesagt.:
Ausserdem vergleichst du die Inhalte der Objekte mit == , was bei Objekten nicht geht
.

Wieso kann ich Objekte nicht mit == vergleichen?

@Reality
Das ist ja gerade der Witz der Sache: es gibt genau zwei Gender-Objekte. Sie unterscheiden sich einzig und alleine durch ihre Speicheradresse, und genau die wird mit == verglichen.

Ich finde akiras Lösung ziemlich elegant :applaus:
 

Reality

Top Contributor
Hi,
Beni hat gesagt.:
@Reality
Das ist ja gerade der Witz der Sache: es gibt genau zwei Gender-Objekte. Sie unterscheiden sich einzig und alleine durch ihre Speicheradresse, und genau die wird mit == verglichen.
dann müsste man, wenn ich das richtig verstehe von einer anderen Klasse ein neues GenderObjekt erstellen und dann dieses z.B. mit dem Male-Objekt referenzieren:

Code:
class A{
  public static void main(String args[]){
  Gender gender = new Gender().Male;
  }
}

Stimmt braucht weniger Speicher und man kann so mit == vergleichen, aber bei mehreren Variablen unübersichtlich.

@Illuvatar:
Danke für den Link! :)

Liebe Grüße
Reality
 

akira

Bekanntes Mitglied
Code:
class A{ 
  public static void main(String args[]){ 
  Gender gender = new Gender().Male; 
  } 
}

So geht das ja gerade nicht, da der Konstruktor private ist. Du brauchst auch keine neue Instanz, sondern benutzt einfach Gender.MALE. So, wie Du z.B. auch Color.black benutzt.
 

Reality

Top Contributor
Ach stimmt, deine Objekte sind ja static. Das mit dem private wusste ich nicht...

Liebe Grüße
Reality
 

Jaraz

Bekanntes Mitglied
Hi,

akira hat gesagt.:
Doch, bissle Speicher brauchen sie, ich glaub 4 byte oder so braucht jede Instanz.

Ok, es werden 8 Byte statischer Speicher verbraucht, jedoch kein Platz auf dem Heap.

typsichere Enums haben diverse Vorteile, aber mit Sicherheit nicht im Bezug auf Speicherplatz.

Es muss ja erst einmal die komplette Klasse geladen werden, und das alleine kann schon ein paar KByte kosten. Je nach JVM.

Gruß Jaraz
 

akira

Bekanntes Mitglied
typsichere Enums haben diverse Vorteile, aber mit Sicherheit nicht im Bezug auf Speicherplatz.

Es muss ja erst einmal die komplette Klasse geladen werden, und das alleine kann schon ein paar KByte kosten. Je nach JVM.

Ja, Du hast recht mit dem Laden, jedoch wäre die Gender-Klasse sicher nur ein paar hundert Bytes groß und muß nur einmal geladen werden. Ich meine eigentlich eher die Tatsache, daß sie keine Member hat und quasi zur "Laufzeit", also nachdem sie geladen und die beiden Meber instanziiert wurden, keinen weiteren Speicher belegt.
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
F Arraylist<String>Ein Wort pro Zeile Java Basics - Anfänger-Themen 6
J Schlüsselworte Prüfen, ob ein bestimmtes, ganzes Wort in einem String enthalten ist. Java Basics - Anfänger-Themen 6
JavaBeginner22 Wort mit der größten Länge ausgeben Java Basics - Anfänger-Themen 4
O Regex bei ReplaceAll ersetzt Wort und Sonderzeichen nicht. Java Basics - Anfänger-Themen 9
R Hangman-Spiel-zufälliges Wort ermitteln Java Basics - Anfänger-Themen 4
S Wort einlesen Array ausgeben Java Basics - Anfänger-Themen 4
I String nach Wort suchen Java Basics - Anfänger-Themen 6
I Java-Wort einlesen und ausgeben Java Basics - Anfänger-Themen 7
O zufälliges Wort aus einer Datei einlesen Java Basics - Anfänger-Themen 32
J Ein Wort aus einer Datei zufällig ermitteln Java Basics - Anfänger-Themen 3
B Umbruch nach bestimmten Wort Java Basics - Anfänger-Themen 5
S Wort suchen und ersetzen in einer Datei Java Basics - Anfänger-Themen 6
M Programm, das ein Wort einliest Java Basics - Anfänger-Themen 3
P Zufälliges Wort direkt aus einer Liste ausgeben Java Basics - Anfänger-Themen 9
F Wort nach String ausgeben Java Basics - Anfänger-Themen 5
L Mit java ein wort mehrfach versetzt darstellen Java Basics - Anfänger-Themen 14
T Zeilen des ListArray nach einem Wort durchsuchen und diese Zeile ausgeben Java Basics - Anfänger-Themen 4
V Ein Wort einlesen und dann jede Buchstabe ausgeben Java Basics - Anfänger-Themen 10
H Erste Schritte Längstes Wort eines Strings herausfinden Java Basics - Anfänger-Themen 7
S Wort in Text suchen und ersetzen Java Basics - Anfänger-Themen 3
Ananaskirsche Variablen Gucken ob Wort in Datei exisitert Java Basics - Anfänger-Themen 6
L Wort in String ersetzen Java Basics - Anfänger-Themen 11
X Methoden Wort aus String löschen und richtige Verschachtelung Java Basics - Anfänger-Themen 17
W Vergleich ob Buchstabe in einem Wort enthalten ist Java Basics - Anfänger-Themen 3
M Methoden String methoden ,Häufigkeit einm wort in der Zeichenkette Java Basics - Anfänger-Themen 14
N RegEx Wort anzeigen Java Basics - Anfänger-Themen 6
B CSV auslesen > Wort bilden > CSV ausgeben Java Basics - Anfänger-Themen 7
K Klassen String - nach Wort durchsuchen Java Basics - Anfänger-Themen 6
D 1 Wort aus TextDatei auslesen Java Basics - Anfänger-Themen 3
J Ein Wort einlesen und dann jede Buchstabe ausgeben Java Basics - Anfänger-Themen 25
D Das 1. Wort aus einem String herauslesen Java Basics - Anfänger-Themen 6
W Zahl/Wort in ein Array zerlegen Java Basics - Anfänger-Themen 6
D Wort nach Leerzeichen - String Java Basics - Anfänger-Themen 10
I Wie kann ich ein Wort in einem String suchen Java Basics - Anfänger-Themen 3
I Wort aus String löschen Java Basics - Anfänger-Themen 11
S Wort in zwei farben aufleuchten lassen Java Basics - Anfänger-Themen 2
Ollek Bestimmtes Wort aus einem Dokument lesen Java Basics - Anfänger-Themen 7
T Ersten Buchstaben in einem Wort groß schreiben. Java Basics - Anfänger-Themen 6
I Schriftart für einzelnes Wort in der JTextArea auswählen Java Basics - Anfänger-Themen 3
G Wort suchen Java Basics - Anfänger-Themen 4
L Was bedeutet das Wort "this" ? Java Basics - Anfänger-Themen 2
B a > n ? "wort" : "blub" << was Java Basics - Anfänger-Themen 3
B Char kommt 2 mal im Wort vor (indexOf) Java Basics - Anfänger-Themen 5
M Wort in einem String suchen und ausschneiden Java Basics - Anfänger-Themen 2
M Bestimmtest Wort aus einer Textdatei löschen Java Basics - Anfänger-Themen 3
L Gezielte Infos aus Datei holen - Suche nach Position/Wort Java Basics - Anfänger-Themen 22
E Wort in Datei suchen Java Basics - Anfänger-Themen 5
T Deutsches Wort für WindowClosingAdapter :) Java Basics - Anfänger-Themen 9
D wort rückwärts Java Basics - Anfänger-Themen 9
D Ein Wort einlesen über Tastatur und wieder ausgeben Java Basics - Anfänger-Themen 6
J Datenüberwachung funktioniert nicht Java Basics - Anfänger-Themen 9
mo13 JTextField funktioniert nicht Java Basics - Anfänger-Themen 4
J .jar datei öffnen funktioniert nicht Java Basics - Anfänger-Themen 17
G Mit jPackage erstellte EXE funktioniert nicht Java Basics - Anfänger-Themen 2
G Robot funktioniert nicht bei SelectionListener Java Basics - Anfänger-Themen 6
R RegEx funktioniert nicht Java Basics - Anfänger-Themen 14
S 2 Reihen ratio-btn, eine Reihe funktioniert andere nicht Java Basics - Anfänger-Themen 4
monsterherz Punkt Notation funktioniert nicht Java Basics - Anfänger-Themen 4
N Programm Funktioniert mit .txt Datei aber nicht mit .rtf Datei Java Basics - Anfänger-Themen 2
D Quellcode für cmd funktioniert nicht Java Basics - Anfänger-Themen 9
ms_cikar Bin to Float convertieren funktioniert nicht Java Basics - Anfänger-Themen 24
B Schrankensystem mit Farberkennung für Flashgame funktioniert nicht wie geplant Java Basics - Anfänger-Themen 4
I Greenscreen, funktioniert nicht zu 100%... nicht alle Pixel werden geändert Java Basics - Anfänger-Themen 1
JordenJost char variable funktioniert irgendwie nicht a+b ergibt nicht à Java Basics - Anfänger-Themen 4
M Operatoren Strings mit Vergleichsoperatoren, funktioniert das? Java Basics - Anfänger-Themen 9
Garrit1994 Continue funktioniert nicht wie geplant Java Basics - Anfänger-Themen 4
B Methoden Übergebe Variabel funktioniert nicht Java Basics - Anfänger-Themen 17
P exportiertes Programm funktioniert nur teilweise Java Basics - Anfänger-Themen 7
Agent4nobody Programmstart durch aufruf des interpreters funktioniert nicht Java Basics - Anfänger-Themen 14
Fugover Programm funktioniert nicht Java Basics - Anfänger-Themen 11
X Datentypen String.equals funktioniert nicht Java Basics - Anfänger-Themen 5
berserkerdq2 wie funktioniert contenthandler, was muss ich bei der Methode startElement und endElement tun? Java Basics - Anfänger-Themen 11
Alen123 Warum funktioniert mein Code nicht? Java Basics - Anfänger-Themen 64
sserio Array funktioniert nicht Java Basics - Anfänger-Themen 2
sserio Wieso funktioniert mein Programm nicht Java Basics - Anfänger-Themen 2
A String split funktioniert nicht, wenn mehr als 1 Ziffer vor dem Zeichen steht nach dem er trennen soll? Java Basics - Anfänger-Themen 4
sserio Größtes Palindrom-Produkt Programm funktioniert nur halb Java Basics - Anfänger-Themen 23
sserio Rekursion größten Primfaktor finden funktioniert nicht Java Basics - Anfänger-Themen 8
sserio Wieso funktioniert mein TableView nicht /JavaFX. Java Basics - Anfänger-Themen 4
Avalon Warum funktioniert eine Bedingung und eine andere nicht? Java Basics - Anfänger-Themen 2
J Datentypen String in File konvertieren funktioniert nicht Java Basics - Anfänger-Themen 4
U Wie genau funktioniert der ! Operator Java Basics - Anfänger-Themen 3
stormyark 4 Bit in einer for-schleife funktioniert nicht Java Basics - Anfänger-Themen 3
J Nach dem Exportieren funktioniert mein Programm nicht mehr Java Basics - Anfänger-Themen 8
M Java printf(Locale.... funktioniert nicht Java Basics - Anfänger-Themen 3
N Wieso funktioniert die Deklaration nicht Java Basics - Anfänger-Themen 3
C Long value an Stringbuilder übergeben, equals Methode funktioniert nicht Java Basics - Anfänger-Themen 2
districon Backtracking funktioniert nicht ganz Java Basics - Anfänger-Themen 3
H Array rückwärts auslesen funktioniert nicht Java Basics - Anfänger-Themen 3
S Math.random funktioniert nicht Java Basics - Anfänger-Themen 5
S Schleife funktioniert nicht Java Basics - Anfänger-Themen 2
B Ausgabe in TextArea funktioniert nicht Java Basics - Anfänger-Themen 2
Henri Webservice Delete und Update Methode funktioniert nicht Java Basics - Anfänger-Themen 27
J ActionListener von JCheckBox im Knoten von JTree funktioniert nicht Java Basics - Anfänger-Themen 2
C System.out.println - Parameterübergabe funktioniert nicht Java Basics - Anfänger-Themen 2
JD_1998 Hilfsmethode if return funktioniert nicht Java Basics - Anfänger-Themen 2
C JButton Text 2 Mal ändern funktioniert nicht Java Basics - Anfänger-Themen 8
T % funktioniert nicht Java Basics - Anfänger-Themen 2
D e(fx)clipse installieren funktioniert nicht Java Basics - Anfänger-Themen 3
D GPIO Nutzung mit Pi4J Library auf Raspberry funktioniert nicht Java Basics - Anfänger-Themen 3

Ähnliche Java Themen

Neue Themen


Oben