Saya bertanya-tanya apakah pertanyaan ini dapat diselesaikan di Java (saya baru mengenal bahasa ini). Ini kodenya:
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");
}
}
}
Saya menerima pertanyaan berikut di lab saya: Bagaimana Anda bisa melewati kasus pertama (yaitu membuat x == x
kondisi salah) tanpa mengubah kondisi itu sendiri?
java
if-statement
Husam
sumber
sumber
System.out.println("Gotcha!");
bukan komentar? :).cross()
dan yang lainnya ada.dot()
dan tidak ada kebingungan. Juga fakta bahwa "menimpa operator == dan selalu mengembalikan false" tidak bisa terjadi tampaknya pro javaJawaban:
Salah satu cara sederhana adalah dengan menggunakan
Float.NaN
:Anda dapat melakukan hal yang sama dengan
Double.NaN
.Dari JLS §15.21.1. Operator Kesetaraan Numerik
==
dan!=
:sumber
sumber
else
semuanya. Ini secara teknis tidak akan melanggar persyaratan pertanyaan.Dengan Spesifikasi Bahasa Java
NaN
tidak sama denganNaN
.Oleh karena itu setiap garis yang menyebabkan
x
menjadi samaNaN
akan menyebabkan hal ini, sepertiDari Spesifikasi Bahasa Java:
sumber
Tidak yakin apakah ini adalah opsi tetapi mengubah
x
dari variabel lokal ke bidang akan memungkinkan utas lain mengubah nilainya antara pembacaan sisi kiri dan kanan dalamif
pernyataan.Berikut demo singkatnya:
Keluaran:
sumber
Baris yang diganti bisa dibaca.
Ini akan menyebabkan gotcha dicetak.
Spesifikasi Bahasa Java (JLS) mengatakan:
sumber
Saya berhasil mendapatkan
Gotcha!
dari ini:sumber
a != a
karena diubah oleh utas lain. Saya menduga ini akan memenangkan poin dalam sebuah wawancara.a
diubah oleh utas pertama di antara akses pertama dan kedua untuk perbandinganif
pernyataan kunci dapat ditulis dalam satu baris yang mengerikan jika perluAda banyak solusi:
sumber
super.println
seharusnya "Tidak oke", bukan?Salah satu solusi mudahnya adalah:
Tapi saya tidak tahu semua aturan teka-teki ini ...
:) Saya tahu ini adalah cheat, tetapi tanpa mengetahui semua aturan, apakah ini solusi termudah untuk pertanyaan tersebut :)
sumber
if (System.out.println("Gotcha") && false)
Buat kelas Anda sendiri
System
dalam paket yang sama denganCondition
.Dalam hal ini
System
kelas Anda akan menyembunyikanjava.lang.System
kelasIdeone DEMO
sumber
Menggunakan pendekatan lewati / ubah keluaran yang sama dari jawaban lain:
sumber