Datentyp Parameter

Status
Nicht offen für weitere Antworten.
Kurze Frage:

Ist es nötig, die set-methode zweimal zu definieren, nur wegen des Datentyps des Parameters?

Code:
	public void setEinheitanzahl(int zahl)
	{
		String text;
		text = String.valueOf(zahl);
		einheitanzahl.setText(text);
	}
	
	public void setEinheitanzahl(double zahl)
	{
		String text;
		text = String.valueOf(zahl);
		einheitanzahl.setText(text);
	}


Und als Zusatzfrage ;) :

Wird das JLabel "einheitanzahl" auf dem Bildschirm nach Aufrufen der set-Methode direkt aktualisiert, oder muss ich dazu das JLabel erst noch an den Frame weitergeben (o.ä)?

Schonmal danke im Vorraus

MfG Mister Fabulous
 

hdi

Top Contributor
zu 2) das aktualisiert sich selber, musst also nix mehr machen. Es kann aber beim Arbteiten mit Swing-Elementen
zu Problemen kommen. Kommt drauf an wie dein Programm aussieht

EDIT:
ich seh grad du machst ja in den Methoden das selbe. Also das Ding ist, du kannst int nach double casten, sprich:

Code:
void set(double d){}
kann auch int-Werte annehmen, weil Java automatisch von int nach double castet.

PS: übrigens castet Java auch automatisch immer einen Ausdruck in etwas, was gefordert ist (soweit das geht).
Das gilt also auch für double->String zB.

D.h. du kannst einfach machen:


Code:
void set(double d){
     label.setText(d);
}

weil setText() einen String als Parameter erwartet. Wenn du ihm einen double gibst, dann wandelt er
ihn automatisch in einen String um, macht also nix anderes als das, was du jetzt per Hand gemacht hast.
 

Zed

Bekanntes Mitglied
Du könntest natürlich gleich sowas benutzen
Code:
void set(String aString){
einheitanzahl.setText(text); 

}

Musst halt dafür sorgen das da ein String übergeben wird.

Wenn du es oft setzen musst loht es sich zwei Setter zu schreiben um nicht immer casten zu müssen.

Zu deiner Zusatzfrage:
Es wird gleich aktuallisiert. Da durch benutzen der setText Methode Listener aufgerufen werden die schon dafür sorgen das der Wert auf dem Bildschirm erscheint. Was spricht dagenen das einfach mal zu testen ob es wirklich so funktioniert wie du es dir vorstellst
 
Zed hat gesagt.:
Du könntest natürlich gleich sowas benutzen
Code:
void set(String aString){
einheitanzahl.setText(text); 

}

Musst halt dafür sorgen das da ein String übergeben wird.

Wenn du es oft setzen musst loht es sich zwei Setter zu schreiben um nicht immer casten zu müssen.

Zu deiner Zusatzfrage:
Es wird gleich aktuallisiert. Da durch benutzen der setText Methode Listener aufgerufen werden die schon dafür sorgen das der Wert auf dem Bildschirm erscheint. Was spricht dagenen das einfach mal zu testen ob es wirklich so funktioniert wie du es dir vorstellst

Diese Variante hätte den Nachteil, dass ich ja den int oder double in der anderen Klasse dort in einen String casten muss. Für meine Zwecke in diesem Programm wäre das nicht so praktisch.
 

hdi

Top Contributor
Nein Moment, du verstehst das falsch.

Casten heisst nicht, dass er permanent den Datentyp verändert!

Code:
System.out.println(d) // d = double

heisst nur, er sieht dass er einen String will, aber einen double hat. Jetzt kuckt er kann er einen double
vernünftig nach String casten. Da wird er fündig, denn jedes Object hat in Java eine vordefinierte
Methode

Code:
toString();

(Bei eigenen Objekten muss man die Implementierung evtl ändern weil sonst nix sinnvolles rauskommt)

Ich weiss jetzt gar nicht wie das bei double etc ist, weil das sind ja keine Objekte sondern Primitiven.
Aber es wird wohl ähnlich sein.

Also langer Rede kurzer Sinn: Er castet sich das Objekt/Primitive nur temporär für diese Methode, erstellt
sich also schnell ein neues Objekt, das vom Typ her passt.
Da wird nix an deinen Typen geändert, wie ich schon sagte:

Code:
double zahl = 2.3;
String text;
text = String.valueOf(zahl);
einheitanzahl.setText(text);

ist das gleiche wie:

Code:
einheitanzahl.setText(zahl);

Bei der zweiten Version macht Java automatisch genau das, was du per Hand in der ersten machst.
Ist also nicht falsch, aber es sind einfach 2 unnötige Zeilen.
 
Joa, danke für die Erklärung.

Aber kann es sein, dass, ich bring jetzt einfach mal ein CodeBeispiel:

Code:
private double d;
private JLabel label = new JLabel(d);

,dass er das dann nicht casten kann? Ich könnte mir sonst nicht die Fehlermeldung "expect String" erklären, die ich bei sowas bekommen habe.
 

Zed

Bekanntes Mitglied
Code:
private Double d;
private JLabel label = new JLabel(d.toString());

Das Label erwartet ein Object vom Typ String. double,int,float etc. sind primitive datentypen, dass sind keine instanzen von klassen. Darum frisst er er das nicht.

double wird mit == vergliechen und besitzt keine Methode wie toString etc.

Double ist eine Instanz einer Klasse die null sein kann und mit equals verglichen wird. Sie besitz Methoden wie toString etc.
 

hdi

Top Contributor
Hoppla :oops:
Jetz bin ich auch etwas durcheinander. Das geht tatsächlich nicht, und weiterhin war es schlichtweg falsch,
als ich sagte:

Code:
setText(d);

geht...Das geht auch nicht.

In beiden Fällen musst du es per Hand casten, am schnellsten macht man das so;

Code:
setText(d+"");

Das heisst meine Erklärung war wohl etwas falsch. Aber

Code:
System.out.println(d);

geht schon ohne casten. Das heisst wohl, die Methode println() vom out-Objekt ist überladen,
d.h. es muss da wohl tatsächlich mehrere Varianten von geben, mit double, String etc.

Also sorry für die Verwirrung jetzt ;)

Musst es schon per Hand casten! Aber es geht eben auch ganz umkompliziert indem man
nur "" anfügt, er interpretiert das dann als String-Konkatenation, nicht als Addition:

Code:
double d = 2.3;
String s1 = d; // <- fehler!
String s2 = d+""; // <- okay! Hier castet er d nach STring automtaisch
 

Zed

Bekanntes Mitglied
Wenn du einen String aus einem primitiven Datentyp haben willst ist der richtige Weg String.valueOf(). So wie du es am Anfgang gemacht hast.

So würde ich es schreiben
Code:
public void setEinheitanzahl(int zahl)
   {
      einheitanzahl.setText(String.valueOf(zahl));
   } 
public void setEinheitanzahl(double zahl)
   {
      einheitanzahl.setText(String.valueOf(zahl));
   } 
public void setEinheitanzahl(float zahl)
   {
      einheitanzahl.setText(String.valueOf(zahl));
   }

Simpel und gut.
 
EDIT: Zeds Beitrag erübrigt diesen hier.


Jetzt bin ich in der Tat ein wenig verwirrt.

Ich versuche es grad nochmal zusammenzufassen:

Code:
public void setLabel(double d) {
String text = d.toString();
label.setText(text);
}

ist möglich.


Code:
public void setLabel(double d) {
label.setText(""+d);
}

ist möglich.

Der eingegebene Parameter kann nicht integer sein, da dies keine Instanz ist und keine Methode toString besitzt.


Folge (auf mein oberes Beispiel bezogen):

Ich muss es so machen, wie ich es oben geschrieben habe, bis auf dass ich auch

Code:
public void setLabel(double d) {
label.setText(""+d);
}

benutzen könnte.


Richtig?[/code]
 

Zed

Bekanntes Mitglied
Das geht nicht double hat kein toString!
public void setLabel(double d) {
String text = d.toString();
label.setText(text);
}



In Java wird "" als String Object interpretiert "" + double hängt den double an den String. Als Ergebnis bekommst du einen String.

Ob das geht das kann ich gerade nicht Testen double + "". Meiner Meinung nach wird versucht an einen double einen String anzuhängen. Und das geht meiner Meinung nach nicht.
 

Fu3L

Top Contributor
Mister Fabulous hat gesagt.:
Der eingegebene Parameter kann nicht integer sein, da dies keine Instanz ist und keine Methode toString besitzt.[/code]

Da wo du double als Parameter verwendest, kannst du auch ein int übergeben, das ist kein Problem (wie oben schon erwähnt wird nach double hin gecastet). Also reicht eine Methode, die nur double erwartet, die kann mit allen Zahlen umgehen.
double besitzt auch keine toString Methode, weil double, wie int, schlicht kein Objekt ist. Du könntest auch schreiben
Code:
String s = "" + 5;
Obwohl 5 ein int ist, würdest du einen String "5" erhalten...
 
Ok, danke.

Also toString() nur bei Objekten der Java-Klassen.

valueOf(zahl) bei primitiven Datentypen.

Und primitive Datentypen an den String anhängen (dann ist man zumindestens auf der sicheren Seite) und nicht den String an den primitiven Datentyp.


Danke, ihr habt mir einige Programmierzeit gespart, wo ich letztendlich doch wieder in jeder Methode was hätte ändern müssen ;)

MfG Mister Fabulous

EDIT:

Ihr antwortet alle so schnell, immer, wenn ich meine Antwort poste, hat schon ein anderer wieder was gepostet ;)
 

hdi

Top Contributor
Und primitive Datentypen an den String anhängen (dann ist man zumindestens auf der sicheren Seite) und nicht den String an den primitiven Datentyp.

Was meinst du jetzt? Die Reihenfolge ist egal.


Die Konkatenation von Strings mit "+" bindet in Java stärker als die Addition mit "+", d.h. sobald eine der Seiten
ein String ist, interpretiert er den ganzen Ausdruck als String und wandelt andere Datentypen nach String um.

Ansonsten stimmt alles, was du gesagt hast. Sorry nochmal dass ich das etwas verplant hab.
 

Zed

Bekanntes Mitglied
Ich kanns an der Maschine wo ich bin gerade nicht testen darum war ich mir nicht sicher.
 
O

otti

Gast
int a = 4;
char c = 'b';

a= 2*c


als Ergebnis folgt dann --> 196 (wenn ich "a" in der Konsole ausgeben lasse)

Warum gibt der Compiler keinen Fehler an?? Denn ich weise einer Integervariablen eine Charactervariable zu!!??
Oder sehe ich das falsch??

gruß otti
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
F Datentypen Wertebereiche passender Datentyp Java Basics - Anfänger-Themen 5
K Warum wird mir hier nach dem ersten Durchlauf zwei mal "welchen Datentyp wollen sie übergeben?" ausgegeben ? Java Basics - Anfänger-Themen 1
MiMa Probleme mit Datentyp long ?? Java Basics - Anfänger-Themen 2
D Arraylist mit Komplexen Datentyp Java Basics - Anfänger-Themen 3
Igig1 Welche Werte sind als default Werte in einem Array, der als Datentyp eine Klasse hat? Java Basics - Anfänger-Themen 1
B Datentyp für Einzelnes Objekt oder Liste Java Basics - Anfänger-Themen 9
C initialisieren eines arrays richtiger Größe und mit geeignetem Datentyp Java Basics - Anfänger-Themen 26
H Datentyp mit 3 Zuständen Java Basics - Anfänger-Themen 42
javaluke Erste Schritte Array nach Datentyp sortieren Java Basics - Anfänger-Themen 16
Kanaska Datentyp für Zahlenbereiche Java Basics - Anfänger-Themen 7
A Datentyp char Java Basics - Anfänger-Themen 27
I Klassen als Datentyp nutzen? Java Basics - Anfänger-Themen 11
C unverständlicher Code Attribute ohne Datentyp, wie geht das? Java Basics - Anfänger-Themen 8
T Datentyp mit Anführungszeichen drinnen Java Basics - Anfänger-Themen 3
R Datentypen Datentyp String lenght & charAT Java Basics - Anfänger-Themen 4
M Array mit eigenem Datentyp probleme beim übergeben Java Basics - Anfänger-Themen 6
C Interface als Datentyp eines Attributes? Java Basics - Anfänger-Themen 6
B Datentypen Datentyp welcher den gleichen Namen wie die Klasse trägt? Java Basics - Anfänger-Themen 1
D Datentypen Welcher ist der beste Datentyp? Java Basics - Anfänger-Themen 28
F Datentypen Missverständnis Datentyp Java Basics - Anfänger-Themen 2
D Rechnen mit numerischen Datentyp Frage Java Basics - Anfänger-Themen 16
E Klassename als Datentyp??? Java Basics - Anfänger-Themen 4
F Wertebereich/Datentyp Java Basics - Anfänger-Themen 26
M Datentypen Java Datentyp Definition Java Basics - Anfänger-Themen 6
MiMa Datentyp Short Wert zuweisen über Methode Java Basics - Anfänger-Themen 2
Z Was habe ich davon mit einem Datentyp verschiedene Instanzen zu haben? Java Basics - Anfänger-Themen 6
D Klassen Gesucht: Einfache Beispiel-Klasse für einen Datentyp Java Basics - Anfänger-Themen 7
E Datentypen Benutzerdefinierten Datentyp verwenden Java Basics - Anfänger-Themen 1
ms_cikar Java Datentyp unwandlung Java Basics - Anfänger-Themen 7
G Datentypen Tipps, Ratschläge erwünscht bzgl. Datentyp bestimmen über Wertebereich Java Basics - Anfänger-Themen 5
Y Warum void statt Datentyp + return Java Basics - Anfänger-Themen 4
M Interface als Datentyp Java Basics - Anfänger-Themen 12
R Variablen Datentyp erst während Laufzeit festlegen Java Basics - Anfänger-Themen 6
1 Neuen Datentyp für rationale Zahlen als Klasse entwickeln Java Basics - Anfänger-Themen 20
R Datentypen Datentyp eines Werts in einer Textdateizeile abfragen und ändern Java Basics - Anfänger-Themen 4
R Interface Datentyp bei Erzeugung eines Objekts, dessen Klasse eine Schnittstelle implementiert Java Basics - Anfänger-Themen 18
B Collections Collection soll nur einen bestimmten Datentyp aufnehmen Java Basics - Anfänger-Themen 12
V Datentypen Frage zum Datentyp Byte Java Basics - Anfänger-Themen 11
B datentyp in binär umwandeln Java Basics - Anfänger-Themen 5
S Primitiver Datentyp Short , Vorteil/Nachteil Betrachtung Java Basics - Anfänger-Themen 6
J Field auf Datentyp prüfen Java Basics - Anfänger-Themen 8
D Datentyp Object Java Basics - Anfänger-Themen 2
A Datentypen Mehrdimensionaler Datentyp gesucht Java Basics - Anfänger-Themen 4
D Datentypen Abstrakter Datentyp lässt sich nicht casten Java Basics - Anfänger-Themen 7
F Klassenorganisation: Datentyp in Datentyp anlegen Java Basics - Anfänger-Themen 3
N Unerklärlich: Rekursiver Algorithmus gibt falschen Datentyp zurück... Java Basics - Anfänger-Themen 4
J Datentypen Was ist der Sinn vom Datentyp "char" ? Java Basics - Anfänger-Themen 11
G Eigener Autoboxing Datentyp Java Basics - Anfänger-Themen 3
Binary.Coder Welcher Datentyp für den Simplex Algorithmus Java Basics - Anfänger-Themen 3
Guybrush Threepwood Effizientester Datentyp zur Speicherung einer ungeordneten Menge von ints Java Basics - Anfänger-Themen 8
B Datentyp für +,-,*,/ Java Basics - Anfänger-Themen 5
D Datentypen Rekursiver Datentyp Java Basics - Anfänger-Themen 8
GianaSisters Auf Datentyp überprüfen Java Basics - Anfänger-Themen 13
W Datentypen Operatoren für eigenen Datentyp nutzen Java Basics - Anfänger-Themen 2
M Array mit komplexem Datentyp Java Basics - Anfänger-Themen 9
M 2 Arrays mit komplexen Datentyp vergleichen Java Basics - Anfänger-Themen 8
G Datentypen Welcher Datentyp Java Basics - Anfänger-Themen 2
F Datentypen Welchen Wert hat ein einfacher Datentyp nach der Deklaration? Java Basics - Anfänger-Themen 6
J Datentypen Datentyp für Datum Java Basics - Anfänger-Themen 23
B Java Bean, JSP, Komplexer Datentyp Java Basics - Anfänger-Themen 3
I Datentypen Eigener DatenTyp Java Basics - Anfänger-Themen 2
E Datentyp Array Java Basics - Anfänger-Themen 10
M Datentypen Eigenen Datentyp toArray() Java Basics - Anfänger-Themen 4
A Datentyp Char wird in BlueJ nur als leerer weißer Kasten dargestellt Java Basics - Anfänger-Themen 1
N Frage zu Datentyp byte Java Basics - Anfänger-Themen 14
F Datentyp Number???? Java Basics - Anfänger-Themen 2
A einlesen, schreiben, umwandlung datentyp Java Basics - Anfänger-Themen 10
A Datentyp mit String festlegen? Java Basics - Anfänger-Themen 13
D Generischer Datentyp Java Basics - Anfänger-Themen 2
D Datentyp: Liste von String->Double dingern Java Basics - Anfänger-Themen 4
K Datentyp vs. Datenstruktur - Unterschiede Java Basics - Anfänger-Themen 13
C Datentyp von einer Variablen ermitteln. Java Basics - Anfänger-Themen 12
R Welchen Datentyp verwenden? Java Basics - Anfänger-Themen 12
B Datentyp anlegen Java Basics - Anfänger-Themen 6
M Eigene Klasse mit "Enumeration"-Datentyp verknüpfe Java Basics - Anfänger-Themen 16
K Datentyp Problem Java Basics - Anfänger-Themen 2
X Rekursion & Generischer Datentyp Java Basics - Anfänger-Themen 11
A neuen Datentyp (Digit) definieren Java Basics - Anfänger-Themen 12
A Datentyp String in char umwandeln Java Basics - Anfänger-Themen 3
J datentyp -objectTyp Rückgabe Java Basics - Anfänger-Themen 2
D Superinterface als Datentyp Java Basics - Anfänger-Themen 5
E Generischer Datentyp und Arrays Java Basics - Anfänger-Themen 3
Z ArrayList<Entry<Datentyp, Integer>> ? Java Basics - Anfänger-Themen 12
L Datentyp Problem Java Basics - Anfänger-Themen 7
F Datentyp eines Inputs überprüfen Java Basics - Anfänger-Themen 2
NightmareVirus Datentyp des Arrayinhalt abfragen Java Basics - Anfänger-Themen 4
S Probleme mit Datentyp beim Einlesen Java Basics - Anfänger-Themen 4
C Datentyp byte Java Basics - Anfänger-Themen 22
G Java Problem [Datentyp] Java Basics - Anfänger-Themen 10
B Datentyp char -> Zeichen um einen Wert erhöhen Java Basics - Anfänger-Themen 12
M long Datentyp effizient mit Daten füllen Java Basics - Anfänger-Themen 2
S Datentyp aus 3 longs Java Basics - Anfänger-Themen 3
M datentyp ausfindig machen Java Basics - Anfänger-Themen 2
C Eigenen Datentyp schreiben Java Basics - Anfänger-Themen 13
T Probleme mit Datentyp Double Java Basics - Anfänger-Themen 4
W Datentyp Zahlen sortieren Java Basics - Anfänger-Themen 12
B Datentyp gesucht Java Basics - Anfänger-Themen 5
J Datentyp einer Klasse bei Anwendung von implements Java Basics - Anfänger-Themen 4
R Datentyp Ring - zyklisch doppelt verkettete Liste - HILFE! Java Basics - Anfänger-Themen 12
M Linkedlist, wert auf datentyp prüfen Java Basics - Anfänger-Themen 3

Ähnliche Java Themen

Neue Themen


Oben