Java verwirrende Ausgabe


  • Be_water
  • 948 Aufrufe 10 Antworten

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Java verwirrende Ausgabe

    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:
    111222333

    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...
    Wo ist der Discord Server

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von Skyte ()

  • ich dachte so wär es übersichtlicher aber wenn das besser ist :

    Quellcode

    1. class Versuch2a
    2. {
    3. static public void main(String [] args)
    4. {
    5. int i1 = 50;
    6. int i2 = 70;
    7. int i3 = 111222333;
    8. char c1 = 'e';
    9. char c2 = 'K';
    10. char c3;
    11. String s1 = "HELLO";
    12. String s2 = " WORLD";
    13. c3 = (char) i3;
    14. i3 = (int) c3;
    15. System.out.println(i1+i2);
    16. System.out.println((char)(i1+i2) + "\n" + (char)i1+(char)i2);
    17. System.out.println((char)i1+i2 + "\t" + (char)i2 + i1+"\t"+((int)c1-i1));
    18. System.out.println((char)i2+i1 + "\t" + (char)i1 + i2+"\t"+((int)c1-i1));
    19. System.out.println(""+(char)i2+i1 + "\t" + (char)i1 + i2+"\t"+((int)c1-i2));
    20. System.out.println(c1+"t"+((int)c1)+i2+c2);
    21. System.out.println(s1+s2);
    22. System.out.println(i3);
    23. }
    24. }
    Alles anzeigen


    Ausgabe:

    Quellcode

    1. 120
    2. x
    3. 2F
    4. 120 F50 51
    5. 120 270 51
    6. F50 270 31
    7. et10170K
    8. HELLO WORLD
    9. 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

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von Broken Sword ()

  • Ha ha, von wegen

    Quellcode

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


    In Wirklichkeit war es das:

    Quellcode

    1. int i3 = 111222333;
    2. char c3;
    3. c3 = (char) i3;
    4. i3 = (int) c3;
    5. System.out.println(i3);


    Bei "i3 = (int) c3" nimmt i3 den Wert 7741 an.
    Wo ist der Discord Server
  • 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
    [SIZE="1"]i'm a signature virus. copy me into your signature to help me spread. - smart questions[/SIZE]
  • 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!

    Quellcode

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


    Einmal
    (char)i2 + i1


    Und einmal
    (char)i1 + i2


    (char)i2 ist 'F' und (char)i1 ist '2'.
    Wo ist der Discord Server
  • @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
    [SIZE="1"]i'm a signature virus. copy me into your signature to help me spread. - smart questions[/SIZE]
  • Zerd schrieb:

    @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

    Quellcode

    1. System.out.println([COLOR='Blue'](char)[/COLOR]i1+i2 + "\t" + (char)i2 + i1+"\t"+((int)c1-i1));
    2. 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.
    Wo ist der Discord Server

    Dieser Beitrag wurde bereits 7 mal editiert, zuletzt von Skyte ()

  • Be_water schrieb:



    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.

    Quellcode

    1. ""+(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)
    Wo ist der Discord Server

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von Skyte ()