Me pregunto si esta pregunta se puede resolver en Java (soy nuevo en el idioma). Este es el código:
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");
}
}
}
Recibí la siguiente pregunta en mi laboratorio: ¿Cómo se puede omitir el primer caso (es decir, hacer que la x == x
condición sea falsa) sin modificar la condición en sí?
java
if-statement
Husam
fuente
fuente
System.out.println("Gotcha!");
lugar del comentario? :).cross()
y al otro.dot()
y no hay confusión. Además, el hecho de que "anular el operador == y devolver siempre falso" no puede suceder parece pro javaRespuestas:
Una forma sencilla es utilizar
Float.NaN
:Puedes hacer lo mismo con
Double.NaN
.De JLS §15.21.1. Operadores de igualdad numérica
==
y!=
:fuente
fuente
else
completo. Técnicamente, esto no violaría los términos de la pregunta.Según las especificaciones del lenguaje Java
NaN
no es igual aNaN
.Por lo tanto, cualquier línea que cause
x
ser igual aNaN
causaría esto, comoDe las especificaciones del lenguaje Java:
fuente
No estoy seguro de si esta es una opción, pero cambiar
x
de variable local a un campo permitiría que otro hilo cambie su valor entre la lectura del lado izquierdo y derecho en laif
declaración.Aquí hay una breve demostración:
Salida:
fuente
La línea reemplazada podía leer.
Esto haría que se imprimiera el gotcha.
La especificación del lenguaje Java (JLS) dice:
fuente
Me las arreglé para obtener una
Gotcha!
de esto:fuente
a != a
debe a que fue cambiado por otro hilo. Sospecho que esto ganaría puntos en una entrevista.a
el primer hilo entre el primer y el segundo acceso lo altere para compararif
declaración clave podría escribirse en una sola línea horrible si es necesarioHay tantas soluciones:
fuente
super.println
debería ser "No está bien", ¿verdad?Una solución sencilla es:
Pero no conozco todas las reglas de este acertijo ...
:) Sé que esto es una trampa, pero sin conocer todas las reglas, ¿es esta la solución más fácil a la pregunta :)
fuente
if (System.out.println("Gotcha") && false)
Crea tu propia clase
System
en el mismo paquete conCondition
.En este caso, su
System
clase ocultará lajava.lang.System
clase.DEMO de Ideone
fuente
Usando el mismo enfoque de salida de salto / cambio de otras respuestas:
fuente