Java verwirrende Ausgabe

Status
Für weitere Antworten geschlossen.

Be_water

Registered +
Registriert
März 2008
Beiträge
66
HILFE

haben folgenden Quellcode
natürlich mit main und so nen bla und vieles mehr aber das interessiert:

int i3 = 111222333;
System.out.println(i3);

Ausgabe: 7741

warum? wieso nicht einfach 111222333 als Ausgabe versteh ich nicht??
 
Ich habe grad den "Code" ausprobiert und rate mal, was er mir ausgegeben hat...
Richtig:
Was sonst. -.-

Somit liegt der Fehler (selbstverstaendlich) nicht an diesem Schnipsel sondern an etwas anderem.
Bloeder Weise hast du das wichtigste weggelassen. :rolleyes:

PS: Es gibt hier auch ein Forum extra fuer Java...
 
Zuletzt bearbeitet von einem Moderator:
ich dachte so wär es übersichtlicher aber wenn das besser ist :
Code:
class Versuch2a
{
static public void main(String [] args)
{
int i1 = 50;
int i2 = 70;
int i3 = 111222333;
char c1 = 'e';
char c2 = 'K';
char c3;
String s1 = "HELLO";
String s2 = " WORLD";
c3 = (char) i3;
i3 = (int) c3;
System.out.println(i1+i2); 
System.out.println((char)(i1+i2) + "\n" + (char)i1+(char)i2); 
System.out.println((char)i1+i2 + "\t" + (char)i2 + i1+"\t"+((int)c1-i1)); 
System.out.println((char)i2+i1 + "\t" + (char)i1 + i2+"\t"+((int)c1-i1)); 
System.out.println(""+(char)i2+i1 + "\t" + (char)i1 + i2+"\t"+((int)c1-i2)); 
System.out.println(c1+"t"+((int)c1)+i2+c2); 
System.out.println(s1+s2); 
System.out.println(i3); 
}
}

Ausgabe:
Code:
120
x
2F
120 F50 51
120 270 51
F50 270 31
et10170K
HELLO WORLD
7741
sind schon einige andere knifflge sachen drin aber das letzte hat mich halt völlig fertig gemacht mit i3 wär nett wenne da noch ma drüber gucken könntest
vielen dank schonma
MFG
 
Zuletzt bearbeitet von einem Moderator:
Ha ha, von wegen
Code:
int i3 = 111222333;
System.out.println(i3);

In Wirklichkeit war es das:

Code:
int i3 = 111222333;
char c3;
c3 = (char) i3;
i3 = (int) c3;
System.out.println(i3);

Bei "i3 = (int) c3" nimmt i3 den Wert 7741 an.
 
Das kommt übrigens deshalb weil der Datentyp char in java einen Wertebereich von 0 ... 65.535 unterstützt. Der Wert den du da eingegeben hast ist deutlich größer, durch den cast zu char kommt deshalb der Wert 7741 raus wenn du die Eingabe zurück in Integer castest. Durch den cast in char gehen also informationen verloren
 
ach ******** ja bin ich blöd hab ich das einfach überlesen^^ sry danke aber!!


ach und dann ist da noch das mit F50 und 270 warum einma das und einma das andere?
 
Be_water schrieb:
[...]überlesen[...]

ach und dann ist da noch das mit F50 und 270 warum einma das und einma das andere?
Gewoehn dir mal an genauer hinzukucken, hast schonwieder was ueberlesen!

Code:
System.out.println((char)i1+i2 + "\t" + (char)i2 + i1+"\t"+((int)c1-i1));
System.out.println((char)i2+i1 + "\t" + (char)i1 + i2+"\t"+((int)c1-i1));

Einmal

Und einmal

(char)i2 ist 'F' und (char)i1 ist '2'.
 
@Skyte
Vermutlich wollte Be_water eine Erklärung warum es unterschiedliche Ausgaben gibt und nicht einen Hinweis was der Unterschied zwischen den beiden Zeilen ist...

Das + konkatiniert in diesem Zusammenhang die verschiedenen Variablen in diesem Aufruf zu einem String, welcher anschließend ausgegeben wird.
Durch den cast zu einem char wird aus dem int wert 70 der char wert F (ascii code). "F" + "50" (strings werden konkatiniert) = F50, Der int wert 50 ist der char wert 2 (ascii code). Daraus ergibt sich nach dem konkatinieren "2" + "70" = 270
 
@Skyte
Vermutlich wollte Be_water eine Erklärung warum es unterschiedliche Ausgaben gibt und nicht einen Hinweis was der Unterschied zwischen den beiden Zeilen ist...
Hm... kann sein. Aber dann find ich die Frage extrem unlogisch.
Wenn er davon ausgeht, dass "(char)i1 + i2" die gleiche Ausgabe gibt wie "(char)i2 + i1", dann stellt sich doch gleichzeitig noch die Frage, warum es nicht das gleiche ist wie "(char)(i1 + i2)". Die Frage kam aber nicht.


Viel spannender find ich allerdings, dass hier

Code:
System.out.println([COLOR='Blue'](char)[/COLOR]i1+i2 + "\t" + (char)i2 + i1+"\t"+((int)c1-i1));
System.out.println([COLOR='Blue'](char)[/COLOR]i2+i1 + "\t" + (char)i1 + i2+"\t"+((int)c1-i1));

die markierten "(char)" scheinbar komplett ignoriert werden.

Edit: Ok, ich habs jetzt. Das erste i wird zum char gecastet (wegen (char) halt), aber der + Operator addiert in dem Fall und bei "char + int" wird der char zum int gecastet und so auch das i wieder.
 
Zuletzt bearbeitet von einem Moderator:
System.out.println((char)i2+i1 + "\t" + (char)i1 + i2+"\t"+((int)c1-i1));
System.out.println(""+(char)i2+i1 + "\t" + (char)i1 + i2+"\t"+((int)c1-i2));


120 270 51
F50 270 31

Was ich mich auch frage ist wiese der Ausdruck in Blau also ein simpler string der noch nichma was ausgibt die Ausgabe in Rot so verändert also F50 ist schon logisch und 120 kann ich auch herleiten aber warum steht nach den "" das eine und bei dem vorher das andere da??

danke für die Hilfe morgen hab wieder Grundlagen Informatik Praktikum
 
Na ganz einfach.
Code:
""+(char)i2+i1
Der geht von links nach rechts.
""+(char)i2 = "F", weil ein + mit einem String immer eine Konkatenation ist.

Und dann halt "F"+i1 = "F50".

Also da find ich es wesentlich schwieriger die 120 herzuleiten... (und wie das geht, steht ja im letzten Post)
 
Zuletzt bearbeitet von einem Moderator:
Status
Für weitere Antworten geschlossen.

Ähnliche Themen

Zurück
Oben Unten