Java-Rätsel und Überraschungen ;)

Objektorientierte Programmiersprache auf Basis einer virtuellen Maschine (https://www.oracle.com/java/)
nufan
Wiki-Moderator
Beiträge: 2557
Registriert: Sa Jul 05, 2008 3:21 pm

Java-Rätsel und Überraschungen ;)

Beitrag von nufan » Do Apr 18, 2013 8:17 pm

Ich möchte hier ein paar kleine Java-Denkaufgaben sammeln.

Hier die erste:

Code: Alles auswählen

public class Test {

  public static void main(String[] args) {
    for(int i = 0, j = 0; Integer.valueOf(i) == Integer.valueOf(j); i++, j++) {
      System.out.println("num: " + i);
    }
  }

}
Wer erkennt die Ausgabe ohne das Programm auszuführen? :)

GilbertDur
Beiträge: 105
Registriert: Fr Mär 01, 2013 10:31 am

Re: Java-Rätsel und Überraschungen ;)

Beitrag von GilbertDur » Do Apr 18, 2013 8:55 pm

Ich würde jetzt mal auf "num: 1" tippen, obwohl ich nicht weiß, ob man Integer.valueOf(i) == Integer.valueOf(j) als Bedingung in einer Schleife angeben kann. Falls ja müsste es sich hierbei dann doch eigentlich um eine Endlos-Schleife handeln?

Benutzeravatar
Kerli
Beiträge: 1456
Registriert: So Jul 06, 2008 10:17 am
Wohnort: Österreich
Kontaktdaten:

Re: Java-Rätsel und Überraschungen ;)

Beitrag von Kerli » Fr Apr 19, 2013 8:50 am

Ich bin mir nicht ganz sicher ob Integer.valueOf mit int funktioniert, aber ansonsten könnte es noch sein das nichts ausgegeben wird, da in Java soweit ich weiß der Vergleichsoperator Objektidentitäten (also eigentlich Zeiger^^) vergleicht und nicht die eigentlichen Werte. Da müsste man dann compare oder so verwenden.
"Make it idiot-proof and someone will invent an even better idiot." (programmers wisdom)

OpenGL Tutorials und vieles mehr rund ums Programmieren: http://www.tomprogs.at

nufan
Wiki-Moderator
Beiträge: 2557
Registriert: Sa Jul 05, 2008 3:21 pm

Re: Java-Rätsel und Überraschungen ;)

Beitrag von nufan » Fr Apr 19, 2013 9:29 am

GilbertDur hat geschrieben:Ich würde jetzt mal auf "num: 1" tippen
Wie kommst du bitte auf 1?! ^^
Kerli hat geschrieben:Ich bin mir nicht ganz sicher ob Integer.valueOf mit int funktioniert
Tut es, und es liefert eigentlich auch ein Objekt mit dem Wert den man erwarten würde.
Kerli hat geschrieben:aber ansonsten könnte es noch sein das nichts ausgegeben wird, da in Java soweit ich weiß der Vergleichsoperator Objektidentitäten (also eigentlich Zeiger^^) vergleicht und nicht die eigentlichen Werte.
Damit hast du nicht ganz unrecht, aber sieh dir mal die Ausgabe an ;)
Kerli hat geschrieben:Da müsste man dann compare oder so verwenden.
Ich schätze mal du meinst equals() ^^ compareTo() wäre theoretisch auch möglich, aber nicht notwendig.

Benutzeravatar
Kerli
Beiträge: 1456
Registriert: So Jul 06, 2008 10:17 am
Wohnort: Österreich
Kontaktdaten:

Re: Java-Rätsel und Überraschungen ;)

Beitrag von Kerli » Fr Apr 19, 2013 9:48 am

nufan hat geschrieben:Damit hast du nicht ganz unrecht, aber sieh dir mal die Ausgabe an ;)
Höchst eigenartig. Dummer Cache^^ Da sieht man was es bringt keine Objekte auf den Stack legen zu können :P
nufan hat geschrieben:Ich schätze mal du meinst equals() ^^ compareTo() wäre theoretisch auch möglich, aber nicht notwendig.
Vermutlich. Ich hab Java schon länger nicht mehr verwendet :)
"Make it idiot-proof and someone will invent an even better idiot." (programmers wisdom)

OpenGL Tutorials und vieles mehr rund ums Programmieren: http://www.tomprogs.at

Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8858
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

Re: Java-Rätsel und Überraschungen ;)

Beitrag von Xin » Fr Apr 19, 2013 10:32 am

Ich würde keine Ausgabe erwarten.

Zwei Möglichkeiten:
1.) Zwei Objekte mit == zu vergleichen, vergleicht evtl. die Referenzen, aber nicht die Instanzen.
2.) String + Integer klingt für mich ungesund... ich habe da mal was drüber geschrieben als Begrüdung, warum Java kacke ist... wenn 1) nicht zutrifft kommt da "Num " und das Zeichen 1, also keine "1", sondern halt 1... wenn das Ding bei 32 ankommt ein Leerzeichen, bei 65 ein "a"... usw.

Da 2) aber kacke ist, würde ich erwarten, dass das Ding gar nicht kompiliert. Tut es aber, deswegen auch meine schlechte Note im Java Kurs, als ich an einer Hochschule mit Java-Vorliebe so begründete, dass Java eben... kacke ist.
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.

Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.

nufan
Wiki-Moderator
Beiträge: 2557
Registriert: Sa Jul 05, 2008 3:21 pm

Re: Java-Rätsel und Überraschungen ;)

Beitrag von nufan » Fr Apr 19, 2013 11:18 am

Kerli hat geschrieben:Ich hab Java schon länger nicht mehr verwendet :)
Glücklicher :P
Xin hat geschrieben:2.) String + Integer klingt für mich ungesund...

Warum String + Integer? Seit Java 1.5 gibt es auch ein valueOf() mit einem int als Parameter, falls du das meinst.
Xin hat geschrieben:wenn 1) nicht zutrifft kommt da "Num " und das Zeichen 1, also keine "1", sondern halt 1... wenn das Ding bei 32 ankommt ein Leerzeichen, bei 65 ein "a"... usw.
Gleiche Frage wie ein paar Beiträge darüber: Wieso bitte 1?! ^^ Ich verstehe auf was du hinaus willst, aber dann beginnt das ganze wenn überhaupt 0 ^^ So ist es aber nicht ;)

Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8858
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

Re: Java-Rätsel und Überraschungen ;)

Beitrag von Xin » Fr Apr 19, 2013 11:27 am

nufan hat geschrieben:
Xin hat geschrieben:2.) String + Integer klingt für mich ungesund...

Warum String + Integer? Seit Java 1.5 gibt es auch ein valueOf() mit einem int als Parameter, falls du das meinst.
Nö, ich meine "Num"+i. Links String, recht i.
Eine Addition von Text und Wert ergibt in meinen Augen semantisch einfach keinen Sinn.
nufan hat geschrieben:
Xin hat geschrieben:wenn 1) nicht zutrifft kommt da "Num " und das Zeichen 1, also keine "1", sondern halt 1... wenn das Ding bei 32 ankommt ein Leerzeichen, bei 65 ein "a"... usw.
Gleiche Frage wie ein paar Beiträge darüber: Wieso bitte 1?! ^^ Ich verstehe auf was du hinaus willst, aber dann beginnt das ganze wenn überhaupt 0 ^^ So ist es aber nicht ;)
Ähh... ja... es beginnt bei 0... ^^

Aber so ist es nicht, auch wenn es bei 0 beginnt?

Ansonsten sagt mir der Quelltext auch nix mehr an möglichen Ungereimtheiten, die sich mit Java erklären ließen.
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.

Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.

nufan
Wiki-Moderator
Beiträge: 2557
Registriert: Sa Jul 05, 2008 3:21 pm

Re: Java-Rätsel und Überraschungen ;)

Beitrag von nufan » Fr Apr 19, 2013 11:30 am

Xin hat geschrieben:
nufan hat geschrieben:
Xin hat geschrieben:2.) String + Integer klingt für mich ungesund...

Warum String + Integer? Seit Java 1.5 gibt es auch ein valueOf() mit einem int als Parameter, falls du das meinst.
Nö, ich meine "Num"+i. Links String, recht i.
Eine Addition von Text und Wert ergibt in meinen Augen semantisch einfach keinen Sinn.
Zugegeben das ist etwas komisch, aber es funktioniert. Du kannst das "+ i" auch gerne weglassen, es geht vor allem darum wie oft die Schleife durchläuft.
Xin hat geschrieben:Aber so ist es nicht, auch wenn es bei 0 beginnt?
Nein, so ist es nicht ^^
Xin hat geschrieben:Ansonsten sagt mir der Quelltext auch nix mehr an möglichen Ungereimtheiten, die sich mit Java erklären ließen.
Du kannst das Programm ja mal starten und dich überraschen lassen ;)

Benutzeravatar
Kerli
Beiträge: 1456
Registriert: So Jul 06, 2008 10:17 am
Wohnort: Österreich
Kontaktdaten:

Re: Java-Rätsel und Überraschungen ;)

Beitrag von Kerli » Fr Apr 19, 2013 11:44 am

"Make it idiot-proof and someone will invent an even better idiot." (programmers wisdom)

OpenGL Tutorials und vieles mehr rund ums Programmieren: http://www.tomprogs.at

Antworten