Java Rätsel

Thomas Darimont

Erfahrenes Mitglied
Hallo,

bei unseren Kollegen vom java-forum.org gibts nen interessanten Thread wo die User immer wieder neue Java Rätsel posten und lösen.

Hier mal eine Beispiel-Aufgabe:
http://www.java-forum.org/de/viewtopic.php?t=24333&postdays=0&postorder=asc&start=780
...
Aufgabe: Die Methode "get" ist so umzuschreiben, dass: In den geschweiften Klammern gibt es nur noch das return-Statement, mit einem mehr oder weniger komplizierten Ausdruck hinter dem "return". "get" setzt weiterhin "a" auf null und gibt den alten Wert von "a" zurück (anders gesagt: es gibt noch ein Semikolon ';' in "get" und "get" macht dasselbe wie vor der Änderung).
...

Als Lösungsvorschlag kam dann:
Java:
public Object get( Object... schummel ){
return ((schummel = new Object[]{ a }) != null ) ?
(((a = null) == null ) ? schummel[0] : null) : null;
}

Mein Vorschlag wäre hier:
Java:
        public Object get2() {
return (System.getProperties().put("XXX", a) == (a = null)) ? System
					.getProperty("XXX")
					: null;
        }

Jemand ein neues Rätsel parat?

Gruß Tom
 
Okay, was ist die Ausgabe von folgendem Codestück wenn man die main ausführt? Bitte nicht einfach ausführen ;)

Java:
package de.tutorials;

public class Instantiation {
	
	private interface InnerClass {}

	private static final InnerClass[] inner = { new Inner0() };

	private static final Singleton singleton1 = Singleton.getInstance();

	private static final class Inner0 implements InnerClass {
		public Inner0() {
			System.out.println(singleton1.getName());
		}
	}

	private static final class Singleton {
		private static final Singleton singleton = new Singleton();

		private Singleton() {
			System.out.println("Create SingletonInstance");
		}

		public String getName() {
			return "Name";
		}

		public static final Singleton getInstance() {
			return singleton;
		}
	}
	
	public static void main(String[] args) {
		System.out.println(inner.length);
	}
}


Lösungen bitte in [spoiler]...[/spoiler] einschließen. Dann können mehr mitraten ;)
 
Es wird eine Exception geworfen.

Natürlich kann man noch weiter Antworten für zejas Rätsel posten. :)
Ich hätte aber auch mal eins.

Wie lautet die Ausgabe und warum?

Java:
public class AusgabeParent
{

  public AusgabeParent()
  {
    initialize();
  }
  
  protected void initialize(){
    System.out.println("Initialize");
  }
}

Java:
public class AusgabeChild extends AusgabeParent
{

  private String ausgabeString = "Wird man dieses lesen?";
 
  public AusgabeChild()
  {
    super();
    System.out.println(ausgabeString);
  }
  
  protected void initialize()
  {
    super.initialize();
    ausgabeString = "Oder wird man doch dieses lesen?";
  }
  
  public static void main(String[] args)
  {
    new AusgabeChild();
  }
}

Bei mir gilt natürlich das gleiche wie bei zeja. Nicht die main-Methode ausführen und auch mit Spoiler antworten.

MFG

Sascha
 
Hallo,

was wird hier ausgegeben?
Java:
/**
 * 
 */
package de.tutorials;

import java.util.HashSet;
import java.util.IdentityHashMap;
import java.util.Map;

/**
 * @author Tom
 * 
 */
public class IdentiyHashMapExample {

    /**
     * @param args
     */
    public static void main(String[] args) {
        Map<String, Integer> m = new IdentityHashMap<String, Integer>();
        m.put("a", 1);
        m.put("b", 2);
        m.put("c", 3);
        m.put("a", 4);

        System.out
                .println(new HashSet<Map.Entry<String, Integer>>(m.entrySet()));
    }

}

Gruß Tom
 
Zu Sascha's Rätsel
es erfolgt die Ausgabe von "Wird man dies Lesen" da mit dem super() aufruf im Konstruktor lediglich der Konstruktor der der Vaterklasse aufgerufen wird der wiederum seine! initialize() Methode aufruft. Das überschreiben von initialize() in der Kindklasse ist somit keinen Effekt (zumindest in diesem Beispiel :) )
 
Das ist so nicht korrekt. Ein Prinzip der objectorientierten Programmierung ist ja Polimorphie und dieses garantiert ja, dass die überschriebene initialize-Methode aufgerufen wird. Kannst du gerne mit einer weiteren Ausgabe prüfen. ;-)

MFG

Sascha
 
Hmm? Ich hätte auch gedacht, dass die Methode von AusgabeChild ausgeführt wird und der Ausgabe-String überschrieben wird. Aber Java sagt mir was anderes, warum weiß ich allerdings nicht... :rolleyes:

Nebenbei: Wäre es nicht sinnvoller, der Übersicht wegen die Rätsel nacheinander hier einzustellen?

Grüße, D.
 
@Dario
Es war ja nicht ganz Sinn der Sache, das Programm auszuführen und die Ausgabe zu posten. ;-)

MFG

Sascha

EDIT: Wenn bis Morgen keiner die richtige Lösung gepostet hat, werde ich es auflösen. :)
 
Ich weiß, ich dachte nur, es wäre ja sowieso schon gelöst... hab's weg editiert. :)

Ich wollte ja eigentlich auch gestern schon meine Gedanken dazu posten - aber als ichs zur Kontrolle mal ausgeführt hab, hat es mich stutzig gemacht, weil was anderes raus kam, als ich erwartet hatte und hätte begründen können. Deswegen hab ichs sein lassen. :rolleyes:
 

Neue Beiträge

Zurück