Je me demande si cette question peut être résolue en Java (je suis nouveau dans le langage). Voici le 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");
}
}
}
J'ai reçu la question suivante dans mon laboratoire: Comment pouvez-vous ignorer le premier cas (c'est-à-dire rendre la x == x
condition fausse) sans modifier la condition elle-même?
java
if-statement
Husam
la source
la source
System.out.println("Gotcha!");
le commentaire? :).cross()
et l'autre l'est.dot()
et il n'y a pas de confusion. De plus, le fait que "écraser l'opérateur == et toujours retourner faux" ne peut pas arriver semble pro javaRéponses:
Un moyen simple consiste à utiliser
Float.NaN
:Vous pouvez faire la même chose avec
Double.NaN
.À partir de JLS §15.21.1. Opérateurs numériques d'égalité
==
et!=
:la source
la source
else
complètement. Cela ne violerait pas techniquement les termes de la question.Par les spécifications du langage Java
NaN
n'est pas égal àNaN
.Par conséquent, toute ligne qui a causé
x
la valeur égale àNaN
provoquerait cela, commeÀ partir des spécifications du langage Java:
la source
Je ne sais pas si c'est une option, mais le passage
x
d'une variable locale à un champ permettrait à un autre thread de changer sa valeur entre les côtés gauche et droit de lecture de l'if
instruction.Voici une courte démo:
Production:
la source
La ligne remplacée pouvait lire.
Cela provoquerait l'impression du gotcha.
La spécification du langage Java (JLS) dit:
la source
J'ai réussi à obtenir un
Gotcha!
de ceci:la source
a != a
parce qu'il a été modifié par un autre thread. Je soupçonne que cela gagnerait des points dans une interview.a
est modifié par le premier fil entre le premier et le deuxième accès à des fins de comparaisonif
déclaration clé pourrait être écrit en une seule ligne horrible si nécessaireIl y a tellement de solutions:
la source
super.println
devrait être "Pas ok", non?Une solution simple est:
Mais je ne connais pas toutes les règles de cette énigme ...
:) Je sais que c'est une triche, mais sans connaître toutes les règles, est-ce la solution la plus simple à la question :)
la source
if (System.out.println("Gotcha") && false)
Créez votre propre classe
System
dans le même package avecCondition
.Dans ce cas, votre
System
classe masquera lajava.lang.System
classeDÉMO Ideone
la source
En utilisant la même approche de sortie de saut / changement d'une autre réponse:
la source