Java Quiz

… und trotzdem habe ich schon (in Produktivcode!) Dinge gesehen wie

if (someFloat == Float.NaN) reportSomeError();

(Sowas wie FindBugs kreidet sowas an, aber das nur nebenbei…) :wink:

[QUOTE=Natac]Der Code müsste heißen

if (x != x) System.out.println("Hallo");```
Geht natürlich auch mit float.

Begründung: NaN-Werte sind darüber definiert, dass sie ungleich zu sich selbst sind. Wird einem spätestens dann bewusst, wenn man sich mal die Implementierung von `Double.isNaN(double v)` anguckt:```static public boolean isNaN(double v) {
	return (v != v);
    }```[/QUOTE]

Und wer ist bitte auf diese kranke Idee gekommen? Um zu ueberpruefen ob eine Wert a ist, muss ich ueberpruefen ob er nicht a ist. Das ist aber wirklich nicht sehr intuitiv

[QUOTE=AmunRa]Und wer ist bitte auf diese kranke Idee gekommen? Um zu ueberpruefen ob eine Wert a ist, muss ich ueberpruefen ob er nicht a ist. Das ist aber wirklich nicht sehr intuitiv[/QUOTE]So ist es eben definiert. Genau genommen ist NaN zu NICHTS gleich, nichtmal sich selbst. Das war schon in C so und hat sich bis Java nicht geändert. Darum gibt es ja Methoden wie Double.isNaN(), die einem das Leben vereinfachen (und den Code leserlicher machen).

Jede Zahl ist gleich zu sich selbst. Und wenn etwas NICHT gleich zu sich selbst ist, dann ist das … keine Zahl (not a number) :smiley:

Wie nennt man diese implementierung:

for (int i = 0; i < 1; i++){...}

Tipp: hat etwas mit minecraft zu tun ^^

Sinnfreien Code? Warum sollte man so eine unsinnige Schleife tippen, da kann man sie auch gleich weg lassen …

Würde auch behaupten, dass es eine Zeile sinnloser Code ist, da sie nie ausgeführt wird.

Doch, der Block wird ausgeführt, aber nur genau einmal, daher kann man die Schleife so wie sie da steht auch gleich weg lassen und die Anweisungen so hintippen. Einzig Scoping fiele mir als möglichen Grund ein, aber dann kann man diese auch durch einen anonymen Block { foobar(); } umschließen, dafür braucht man keine Schleife, welche nur einmal durchlaufen wird.

Endlosschleife :stuck_out_tongue:

for (int i = 0; i < 1; i++){ i = -1; }

[QUOTE=schlingel]Endlosschleife :stuck_out_tongue:

Java Code:

[ol]
[li]for (int i = 0; i < 1; i++){ i = -1; }[/li][/ol]

[/QUOTE]

Die würde ich aber so programmieren
while(true){}

Ohhhhhh Endlosschleifen hrhr
while (true) ;

haha nein, das ganze nennt man notchcoding ^^
weil der typ in minecraft so richtig dumme sachen eingebaut hate :stuck_out_tongue:

wenn ich die seite nochmal finde poste ich sie mal ^^

Bist du dir sicher, dass das Notch war oder nicht vielleicht der Obfuscator? Soweit ich weiß, wurde der Code von Minecraft nie veröffentlicht, sondern nur irgendwelche Dekompilate, die oft mehr schlecht als recht “leserlich” gemacht wurden und wenn Obfuscator Müll-Code generieren, dann kommt da gut und gerne sowas bei rum und noch viel schlimmeres (ist ja Sinn der Sache). Ich kann mir nicht vorstellen, dass Notch und sein Team Zeit damit verschwenden Müll-Code zu produzieren, das wäre mir neu.

Denke auch nicht, dass sowas von Notch kommt. Wer sowas wie Minecraft programmiert wird das Prinzip von for-schleifen verstanden haben.

Tja so stand es in diesem artikel ^^
Srz, wenns ne fehlinformation war. :frowning:

@mymaksimus
Ein Link wäre interessant :slight_smile:

(Es ist übrigens sehr interessant, ihm mal beim Coden über die Schulter zu schauen: http://www.youtube.com/watch?v=rhN35bGvM8c)

wie gesagt, ich find ihn leider nicht mehr :frowning:

Wie viele Supertypen hat Integer.class? D.h. was kann hier

Integer a = 0;
??? b = a;

anstelle der ??? alles stehen, ohne dass es einen Compilierfehler gibt? (Eine explizite Aufzählung ist nicht notwendig)

Number, object?
Haette jetzt an alle primitives gedacht, aber das ist ja die wrapperklasse ^^

Diese

und diese

[QUOTE=Marco13;74086]D.h. was kann hier

Integer a = 0;
??? b = a;

anstelle der ??? alles stehen, ohne dass es einen Compilierfehler gibt?[/QUOTE]
Frage sind für mich unterschiedlich.

Echte Supertypen gibt es zwei. An Stelle der Fragezeichen können da aber einige Dinge mehr stehen. Denn da kommen dann noch die Interfaces (Comparable und Serializable) hinzu sowie die primitiven Datentypen mit mindestens 32 Bit Breite (also ohne char / byte).
Oder ist „Supertyp“ anders definiert, als „Vorfahre in der Vererbungshierarchie“?