Ich frage mich, ob diese Frage in Java gelöst werden kann (ich bin neu in der Sprache). Dies ist der Code:
class Condition {
// you can change in the main
public static void main(String[] args) {
int x = 0;
if (x == x) {
System.out.println("Ok");
} else {
System.out.println("Not ok");
}
}
}
In meinem Labor erhielt ich die folgende Frage: Wie können Sie den ersten Fall überspringen (dh die x == x
Bedingung falsch machen), ohne die Bedingung selbst zu ändern?
java
if-statement
Husam
quelle
quelle
System.out.println("Gotcha!");
anstelle des Kommentars? :).cross()
und das andere ist.dot()
und es keine Verwirrung gibt. Auch die Tatsache, dass "den Operator == überschreiben und immer falsch zurückgeben" nicht vorkommen kann, scheint pro javaAntworten:
Ein einfacher Weg ist zu verwenden
Float.NaN
:Sie können das gleiche mit tun
Double.NaN
.Aus JLS §15.21.1. Numerische Gleichheitsoperatoren
==
und!=
:quelle
quelle
else
insgesamt löschen . Dies würde technisch nicht gegen die Bestimmungen der Frage verstoßen.Durch die Java-Sprachspezifikationen
NaN
ist nicht gleichNaN
.Daher würde jede Linie, die
x
gleich war,NaN
dies verursachen, wie zAus den Java-Sprachspezifikationen:
quelle
Ich bin mir nicht sicher, ob dies eine Option ist, aber der Wechsel
x
von einer lokalen Variablen zu einem Feld würde es einem anderen Thread ermöglichen, seinen Wert zwischen dem Lesen der linken und rechten Seite in derif
Anweisung zu ändern .Hier ist eine kurze Demo:
Ausgabe:
quelle
Die ersetzte Zeile konnte lesen.
Dies würde dazu führen, dass das Gotcha gedruckt wird.
Java Language Specification (JLS) sagt:
quelle
Ich habe es geschafft, eine
Gotcha!
davon zu bekommen :quelle
a != a
weil es von einem anderen Thread geändert wurde. Ich vermute, dass dies in einem Interview Punkte gewinnen würde.a
das durch den ersten Thread zwischen dem ersten und zweiten Zugriff zum Vergleich geändert wirdif
geschrieben haben, bei Bedarf in einer einzigen schrecklichen Zeile geschrieben werden kannEs gibt so viele Lösungen:
quelle
super.println
sollte das "Nicht in Ordnung" sein, oder?Eine einfache Lösung ist:
Aber ich kenne nicht alle Regeln für dieses Rätsel ...
:) Ich weiß, dass dies ein Betrug ist, aber ohne alle Regeln zu kennen, ist dies die einfachste Lösung für die Frage :)
quelle
if (System.out.println("Gotcha") && false)
Erstellen Sie Ihre eigene Klasse
System
im selben Paket mitCondition
.In diesem Fall wird Sie
System
wird Klasse versteckenjava.lang.System
KlasseIdeone DEMO
quelle
Verwenden des gleichen Ansatzes zum Überspringen / Ändern der Ausgabe aus anderen Antworten:
quelle