Java Quiz

Der Punkt geht an TMII. Und ich find das nach wie vor verwirrend, aber ich kann mittlerweile die - nennen wirs mal „logik“ - dahinter etwas nachvollziehen. Aber das zu lesen ist für mich mehr als anstrengend.

Und was kommt jetzt raus?

Siehst du, wenn du den Spoiler-Tag von TMII aufklappst. Sein Ergebnis ist richtig

Ja. In den Docs hört sich das so einfach an. Aber dann hab ich nochmal dein Beispiel angeschaut und ca. eine halbe Stunde verwirrt zwischen byte-welt und PHP docs hin und her gewechselt. :gear::gear:

Stimmt. In Java müsste „auf PHP Art“ dann ein statischer type mismatch Fehler kommen. Den Einwand find ich aber gut, weil die Typensicherheit könnte wohl der Grund sein warum bei Java der ternäre Operator implizit logisch interpretiert wird.

Das hier ist etwas ähnliches:

public boolean compare(int value, int comparator) {
        return value & comparator == expected;
}

Je nach Sprache ist das Ergebnis anders. Das war jetzt nicht als Quiz gedacht, aber wer sein Wissen trotzdem testen möchte was das Ergebnis in Java ist,

, hab ich das mal in Spoiler-Tags gepackt.

Operator ‚&‘ cannot be applied to ‚int‘, ‚boolean‘

‚==‘ wird vor ‚&‘ ausgeführt.
In typunsicheren Sprachen, inklusive C++, ist das aber ein gültiger Ausdruck mit fatalen Folgen wer die Klammern vergisst. Man könnte argumentieren, dass auch hier Java implizit von der logischen Interpretation ausgehen könnte.
Aber ich schätze das ist halt mal so mathematisch definiert worden, anders als der ternäre Operator.

1 „Gefällt mir“
int[] values = new int[] { 0, 1, 2 };
int[] range = new int[3];
int i = 0;
range[i++] = values[i];

System.out.println(Arrays.toString(range) );

Speed-Quiz: Was wird in der Konsole ausgegeben?

das ist Grundwissen

1, 0, 0

1 „Gefällt mir“

sag das lieber nicht, ich hab die Frage auch anderswo gestellt :smile:
Ich bin mal so ehrlich, ich war nur zu 60% sicher war als ich das gesehen hatte und lieber nochmal getestet.

1 „Gefällt mir“

Ist ein beliebter Anfängerfehler die Abarbeitungsreihenfolge „nach Gefühl“ zu bewerten.

bye
TT

Ja, wie ist die Abarbeitungsreihenfolge denn genau definiert?

lass mich das später erklären, vielleicht wollen noch andere mitraten…

bye
TT

Was wird ausgegeben werden (Bitte nicht schummeln :smiley:)?:

import java.util.List;
import java.util.function.BiPredicate;
import java.util.stream.IntStream;

public class Test1 {
	public static <T, U> BiPredicate<T, U> predikatTest() {
		return (t1, u1) -> !(t1 instanceof Number && u1 instanceof Number) ^ t1.equals(u1);
	}

	public static void main(String[] args) {
		int i1 = 1;
		int i2 = 2;
		String s1 = "hallo";
		String s2 = "haallo";
		List<Object> list = List.of(i1, i2, s1, s2);
		IntStream.range(0, list.size()).forEach(i -> IntStream.range(i, list.size()).forEach(j -> System.out
				.println(list.get(i) + " " + list.get(j) + " " + predikatTest().test(list.get(i), list.get(j)))));
	}
}

(Ist da irgendein Caveat dabei, oder ist die Herausforderung „nur“, den Code nachzuvollziehen?)

2 „Gefällt mir“

Nein, keine außergewöhnlichen Fallstricke dabei.

int i1 = 1;
double i2 = 1.0;
String s1 = "hallo";
String s2 = "haallo";

wäre vielleicht noch ein Gedankengang mehr (aber auch nicht außergewöhnlich).

Im Wesentlichen geht es darum, das BiPredicate nachzuvollziehen. Ich hoffe, die Lambdas machen es nicht unnötig kompliziert.

Hallo, was berechnet diese Methode, also was gibt diese zurück?

public static double[] what(double[][] x) {
	double[][] a = Stream.of(x).sorted((b, c) -> c.length - b.length).toArray(double[][]::new);
	return IntStream.range(0, a[0].length).mapToDouble(i -> IntStream.range(0, a.length).mapToDouble(j -> i < a[j].length ? a[j][i] : 0.0).sum()).toArray();
}

Ein Wort oder Satz bitte in Spoiler genügt.

Bis zum https://www.ioccc.org/ sind’s noch zwei Wochen… :roll_eyes:

@SuppressWarnings({ "rawtypes", "unchecked" })
public static Function<Integer, Function<Integer, Function>> a = x -> y -> f -> y == 0 ? 1 : x * (Integer) ((Function<Integer, Function<Integer, Function>>) f).apply(x).apply(y - 1).apply(f);
@SuppressWarnings("unchecked")
public static BiFunction<Integer, Integer, Integer> b = (x, y) -> (Integer) a.apply(x).apply(y).apply(a);

Was wird von der Funktion b berechnet werden? :wink:

Beschreibe die folgende, verfremdete Methode:

import java.util.Arrays;

public class Main {
    public static void was_passiert_hier(int[] a) {
        for (int b = 0; b < a.length; b++) {
            int c = b + (int) (Math.random() * (a.length - b));
            int d = a[c];
            int e = 0;
            while (e < b && a[e] < d) {
                e++;
            }
            int f = a[e];
            int g = f;
            a[e] = d;
            for (e++; e <= c; e++) {
                f = a[e];
                a[e] = g;
                g = f;
            }
        }
        System.out.println(Arrays.toString(a));
    }


    public static void main(String[] args) {
        was_passiert_hier(new int[]{
                5, 7, -9, 4, 2, 0
        });
    }
}

Hallo @lalalula,

willkommen hier im Forum. Da dies Dein erster Beitrag ist: Ist das eine Hausaufgabe?

Nein, wieso? Ich wusste nicht, dass man sich hier erst rechtfertigen muss, bevor man eine Frage stellt…

Tja, was soll ich schreiben? Zum einen bist Du schon recht aggressiv („Ich wusste nicht, dass man sich hier erst rechtfertigen muss, bevor man eine Frage stellt…“) und zum anderen dürfte das doch der Code sein, den Du vor kurzem erst im Java Forum als eine (vermeintliche) Lösung bereit gestellt hast in einem Thread, bei dem ein sehr ineffektiver Sortieralgorithmus (ein leicht veränderter Bogosort) implementiert werden sollte.
Das kann ich aber im Detail nicht mehr nachvollziehen, da der User (incl. seiner Posts) dann gelöscht wurde (Das ist halt der aktuelle Umgang in dem Java Forum mit unserem Freund) …

Das erklärt, wieso ich da relativ wenig Lust habe, hier überhaupt zu schreiben - aber dann hole ich mir mal die entsprechende Antwort ab und sorge für ein paar Mausklicks Arbeit bei @Marco13 und poste doch die Antwort.

Und wer es aus dem geschriebenen noch nicht ableiten konnte: Es dürfte ein Sortieralgorithmus sein (Unabhängig von Sinn / Unsinn).

3 „Gefällt mir“