Estou me perguntando se essa questão pode ser resolvida em Java (eu sou novo na linguagem). Este é o 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");
}
}
}
Recebi a seguinte pergunta em meu laboratório: Como você pode ignorar o primeiro caso (ou seja, tornar a x == x
condição falsa) sem modificar a própria condição?
java
if-statement
Husam
fonte
fonte
System.out.println("Gotcha!");
vez do comentário? :).cross()
e o outro é.dot()
e não há confusão. Além disso, o fato de que "substituir o operador == e sempre retornar falso" não pode acontecer parece pró javaRespostas:
Uma maneira simples é usar
Float.NaN
:Você pode fazer o mesmo com
Double.NaN
.De JLS §15.21.1. Operadores de igualdade numérica
==
e!=
:fonte
fonte
else
completamente. Isso não violaria tecnicamente os termos da pergunta.Pelas especificações da linguagem Java
NaN
não é igual aNaN
.Portanto, qualquer linha que causasse
x
ser igual aNaN
causaria isso, comoNas especificações da linguagem Java:
fonte
Não tenho certeza se esta é uma opção, mas mudar
x
de variável local para um campo permitiria que outro segmento alterasse seu valor entre a leitura do lado esquerdo e direito naif
instrução.Aqui está uma breve demonstração:
Resultado:
fonte
A linha substituída pode ler.
Isso faria com que o pegadinha fosse impresso.
Especificação da linguagem Java (JLS) diz:
fonte
Consegui obter um
Gotcha!
deste:fonte
a != a
porque foi alterado por outro thread. Suspeito que isso ganharia pontos em uma entrevista.a
seja alterado pelo primeiro tópico entre o primeiro e o segundo acesso para comparaçãoif
declaração principal pode ser escrito em uma única linha horrível, se necessárioExistem tantas soluções:
fonte
super.println
deveria ser "Não está ok", certo?Uma solução fácil é:
Mas eu não sei todas as regras para este enigma ...
:) Eu sei que isso é uma trapaça, mas sem conhecer todas as regras, essa é a solução mais fácil para a questão :)
fonte
if (System.out.println("Gotcha") && false)
Crie sua própria classe
System
no mesmo pacote comCondition
.Neste caso, sua
System
classe irá esconder ajava.lang.System
classeIdeone DEMO
fonte
Usando a mesma abordagem de salto / alteração de saída de outras respostas:
fonte