Java Quiz

#471

Ich weiß es ehrlich gesagt nicht, auf den ersten Blick könnte man eine Endlosschleife bei der Ausgabe vermuten, aber vielleicht hat die ArrayList dagegen einen Mechanismus.

0 Likes

#472

List hat doch in Java keine ordentliche toString-Implementierung, also würde das doch nur diesen seltsamen ObjectHash ausgeben?

Aber ich glaube trotzdem, dass ich schon mal eine Exception zur Laufzeit bekommen habe. Irgend etwas mit self reference.

0 Likes

#473

Sollte ja eigentlich dann toString von der Arraylist genommen werden (was auch normal der Fall ist)

Ohne nachzuschauen hätte ich auch gesagt dass es eine Endlosschleife gibt, es sei denn die ArrayList nimmt Arrays.toString was möglicherweise nicht tiefer in weitere Listen etc. geht

0 Likes

#474

ArrayList hat meiner Meinung nach auch keine überschriebene toString

Edit:
Hab nachgeschaut, AbstractCollection implementiert eine toString. also hat ArrayList natürlich auch eine.
Hab den Code aber noch nicht getestet. Daher gilt meine Antwort von oben noch immer als meine Vermutung, dass bei add eine Exception fliegt.

0 Likes

#475

Hab mal geschaut was passiert (also in der toString methode).
Dürfte eine interessante Ausgabe geben :smiley:

0 Likes

#476

Da schon einiges geraten wurde, aber noch nicht die richtige Antwort dabei war, löse ich das mal auf:

Die Ausgabe ist...
[Do you know what, (this Collection), contains?]

Das hatte ich mal ausprobiert, im Kontext von meiner Antwort auf https://stackoverflow.com/q/49925107/3182664 . Allgemein ist es problematisch, wenn eine Collection sich selbst enthält (Details stehen in der Antwort). Aber hier ist zumindest der toString-Fall abgefangen, was zu dieser “sinnvollen” Ausgabe führt :slight_smile:

2 Likes

#477

Da war meine Vermutung ja gar nicht so falsch. Die Darstellung mittels [element1, element2, ...] kannte ich, nur wusste ich nicht, ob er die Selbst-Referenz abfängt.

Nun wäre es spannend zu sehen, was bei zwei Listen passiert, die sich gegenseitig enthalten:

List<Object> list1 = new ArrayList<Object>();
List<Object> list2 = new ArrayList<Object>();
list1.add("Do you know what");
list1.add(list2);
list1.add("contains?");
list2.add("Do you know what");
list2.add(list1);
list2.add("contains?");
System.out.println(list1);
0 Likes

#478

int x = 0;
int b = ++x++;
System.out.println( b );
System.out.println( x );

0 Likes

#479
einfach

1 (++x wird vor der Zuweisung ausgeführt)
2 (x++ wird nach der Zuweisung ausgeführt)

0 Likes

#480

Tatsächlich lässt sich das nicht kompilieren.
Obwohl die Reihenfolge eigentlich klar ist, aber der Bedarf war wohl zu gering.

Hatte das zufällig auf Wikipedia gelesen.

2 Likes

#481

Spannend, ich hatte mit der gleichen Ausgabe wie @Timothy_Truckle gerechnet.

0 Likes

#482

Natürlich ohne Ausprobieren (und eigentlich auch ohne JavaDoc zu lesen) : Was wird ausgegeben?

public class ParsingQuiz
{
    public static void main(String[] args)
    {
        String string = null;
        int i = parseInt(string);
        float f = parseFloat(string);
        
    }

    private static int parseInt(String string)
    {
        try
        {
            return Integer.parseInt(string);
        }
        catch (NumberFormatException e)
        {
            System.out.println("Not an int: " + string);
            return 0;
        }
        catch (NullPointerException e)
        {
            System.out.println("The parseInt method received null");
            return 0;
        }
    }
    
    private static float parseFloat(String string)
    {
        try
        {
            return Float.parseFloat(string);
        }
        catch (NumberFormatException e)
        {
            System.out.println("Not a float: " + string);
            return 0.0f;
        }
        catch (NullPointerException e)
        {
            System.out.println("The parseFloat method received null");
            return 0.0f;
        }
    }
    
}
0 Likes