Java - "null" in Ausgabe?

  • Hallo ich sollte fuer die Schule ein Javaprogramm schreiben, welches max.5 Zahlen einliest und dann die größte und kleinste eingegebene Zahl ausgibt, sowie zahlenfolge ausgibt. Sobald eine "0" eingegeben wird, soll das Programm ebenfalls stoppen.
    Das funktioniert auch alles nur bei der Ausgabe steht am Anfang der eingegeben Zahlenfolge "null". Warum erscheint das da bzw. was bedeuted es?

    Hier ist der Quellcode:

    Danke im voraus!

    Computer lösen Probleme, die man vorher nicht hatte.

  • Hi bitterlemoncola,

    die grundsätzliche Denkweise scheinst du verstanden zu haben, allerdings machst du hast ein paar Sachen noch nicht ganz korrekt, zumindest nicht in diesem Kontext.


    Code
    while(zahl!=0&i<=6) // fehlt ein &
    
    
    while(zahl!=0 && i<=6)  // ich glaube du meintest diese Bedingung und die andere

    Dabei ist es aber so, dass du trotzdem die "0" als Zahl in eine deiner Werte schreibst, was so nicht gewollt ist - du willst ja mit 0 immer abbrechen, daher musst du vor dem switch diesen Fall abfangen.

    Nun zu deiner eigentlichen Frage, schau dir zReihe an, woraus wird es gebildet? - Aus zReihe = zReihe+varT . Wenn du allerdings in zReihe noch nichts geschrieben hast, ist zReihe = null und daher wird dir beim ersten mal auch null vorgeschrieben.


    Noch ein letzter Tip, lass vor und nach den Gleichheitszeichen auch noch jeweils ein leerzeichen frei (statt var=var2 z.B. var = var2 , aber nicht bei == , <= oder >= )

    LG

    Sämtlicher Code erhebt keinen Anspruch auf syntaktische Korrektheit geschweige denn Ausführbarkeit und ist für die Implementation außerhalb der Beispiele nicht geeignet.
    [Blockierte Grafik: http://www.snippr.de/social/img/logo.png]
    Kein Support für kommerzielle Scripts | Kein kostenloser Support via ICQ

  • Danke erstmal!
    Wenn ich die 0 eintippe bevor ich 5 andere zahlen eingetippt habe, soll diese auch angezeigt werden, also das ist schon richtig.
    Mein Problem hast du trotzdem gelöst, danke.
    Nur verstehe ich nicht warum ich in der Bedingung zwei "&&" verwenden muss.

    Computer lösen Probleme, die man vorher nicht hatte.

  • Das mit dem einfachen & und dem doppelten (&& ist eine etwas komplizierte Sache am Anfang.
    (Und für viele erschließt es sich auch später nicht, weil sie nie damit arbeiten).

    Ich weiß jetzt nicht in wie weit dir einzelne Datentypen was sagen, nehmen wir einfach mal an du weißt schon was Bit sind.
    Ein Bit kann entweder 0 oder 1 sein, so, nun ist das einfache & ist wie ein einfacher "und" Widerstand , sprich es wird geprüft , ob die eine Seite 0 oder 1 und die andere Seite 0 oder 1 ist
    also
    0 & 0 = 0
    1 & 0 = 0
    0 & 1 = 0
    1 & 1 = 1

    So, dies unterscheidet das aber noch nicht vom &&, der entscheidende Punkt liegt darin, wie das einfache & den Vergleich macht.
    So wird die wirklich bit-Weise verglichen, was aber nicht unbedingt immer gewünscht ist.

    Ich habe hier eine tiefergehende Erläuterung aus einem anderen forum nochmal kopiert

    if (( A & B ) == 0)

    ist eine binäre Bedingung. Sie ist erfüllt, wenn die Bits an der gleichen Stelle verunded werden und dabei null rauskommt.
    Diese Bedingung ist erfüllt, wenn A oder B oder beide null (0) sind.
    Aber auch, wenn z.B. A = 4 und B = 2 ist:
    A = 4 = ...0100
    B = 2 = ...0010
    A & B = 0 = ...0000 == 0 -> True, Bedingung erfüllt.

    Sämtlicher Code erhebt keinen Anspruch auf syntaktische Korrektheit geschweige denn Ausführbarkeit und ist für die Implementation außerhalb der Beispiele nicht geeignet.
    [Blockierte Grafik: http://www.snippr.de/social/img/logo.png]
    Kein Support für kommerzielle Scripts | Kein kostenloser Support via ICQ

    Einmal editiert, zuletzt von K.Y.L.T. (17. Dezember 2008 um 08:56)

  • Danke fuer die Antworten!
    Das mit dem "&" lass ich mir am besten noch mal von meinem Lehrer etwas genauer erklaeren.
    ...Will jetzt auch mit c++ anfangen, allerdings privat durch tutorials&etc.

    Computer lösen Probleme, die man vorher nicht hatte.

  • Hallo,

    das mit & und dem && ist eigentlich ganz einfach.

    Es werden zwei Bedingungen verknüpft.

    Beispiel

    Code
    Integer i = new Integer(5);
    if(i != null && i ==5){
    //irgendwas wird gemacht
    }



    In diesem Beispiel wird geprüft, ob die Variable i nicht null ist und dann, ob sie gleich 5 ist.

    Die Reihenfolge wie geprüft wird ist

    Code
    i != null

    und dann

    Code
    i == 5

    .

    Bei einer &-Verknüpfung, egal ob mit & oder mit &&, es müssen immer beide Bedingungen True sein, damit die komplette Bedingung True ist.

    Das heißt wenn i != null == false, also ist i == null, braucht ja die zweite Bedingung (i == 5) nicht mehr getestet zu werden, da die komplette Bedinung ja nicht mehr True zurückliefern kann, weil die erste Bedingung ja False ist.

    Verknüpfst du jetzt beide Bedinungen nur mit &, werden in jedem Fall beide Bedingungen getestet, obwohl es ja unnötig ist, da der erste Teil ja schon false ist und die Bedinung nicht mehr true werden kann. Normal ist es ja nicht schlimm, aber wenn du eine solche Bedinung hast, bei der getestet wird, ob die Variable nicht null ist, wird eine NullPointer Exception geworfen.
    Werden beide Bedinungen mit && verknüpft wird die zweite Bedinung nicht mehr getestet, da die erste false ist.



    Ausgabe

    Zitat

    Bedinung mit &&
    Bedinung mit &

    Exception in thread "main"

    java.lang.NullPointerException

    at UndExample.main(

    UndExample.java:14)


    Gruß


    Sascha

  • danke sashs du hast es sehr einleuchtend erklaert, nur warum gibts dann ueberhaupt die möglichkeit nur ein & zu schreiben, so dass dann in jedem Fall beide Bedingungen ueberprueft werden?

    Computer lösen Probleme, die man vorher nicht hatte.

  • Ich hab zwar ein Beispiel mit einem boolischen Ausdruck gebracht, aber & ist ein Bit-Operator und sollte auch nur bei Bit-Operationen verwendet werden. Deshalb werden auch immer beide Seiten des Ausdruckes ausgewertet.

    && ist ein Boolischer Operator und ist wie oben gezeigt für boolische Ausdrücke.

    Ich hab beides an boolischen Ausdrück gezeigt, weil mein meiner Meinung nach den Unterschied besser zeigen kann.

    Gruß

    Sascha