Saya sedang mengerjakan permainan di mana saya menggunakan kelas yang memungkinkan pengguna memasukkan pilihan sebagai string untuk melakukan salah satu dari 3 opsi: "menyerang", "bertahan", atau "kabur". Hal ini secara logis dapat ditangani oleh 'OR eksklusif' (XOR). Saya memutuskan untuk mencoba menggunakan perulangan while menggunakan logika ini alih-alih konstruksi Switch biasa untuk melihat apa yang terjadi, dengan hanya dipersenjatai dengan sedikit matematika diskrit. Saya tahu kondisinya akan jelek dan memakan waktu lama, tapi ternyata berhasil!, dan saya menyukainya! Saya ingin tahu, karena saya ingin menggunakan kembali perulangan while ini di bagian lain kode jika ada cara untuk menyimpan kondisi perulangan while (seperti sebagai variabel, metode, atau semacamnya) sehingga saya dapat memasukkannya ke dalam kondisi perulangan while dan tidak memakan 8 baris kode setiap kali. Ini loop while saya. Jangan tertawa, itu berhasil. DAN, ini menghindari try-catch. Ini sebenarnya berjalan sangat bersih. Saya memposting metode yang saya gunakan di bawah ini. Metode ini dipanggil oleh kelas lain:
public static void fighterAction(){
String selection = null;
Scanner userChoice = new Scanner(System.in);
//Fighter 1 chooses combat action to perform: this is performed by
//(XOR) logic:
//(( a || b ) && !( a && b ) || c ) && !((( a || b ) && !( a && b ) && c ))
while((( !"attack".equals(selection) || !"defend".equals(selection) )
&& !( !"attack".equals(selection) && !"defend".equals(selection)
) || !"flee".equals(selection) ) &&
!((( !"attack".equals(selection) || !"defend".equals(selection)
) && !( !"attack".equals(selection) &&
!"defend".equals(selection) ) && !"flee".equals(selection) )))
{
System.out.println("Choose action: attack defend flee\n\nEnter: ");
selection = userChoice.next();
if((( !"attack".equals(selection) || !"defend".equals(selection) )
&& !( !"attack".equals(selection) &&
!"defend".equals(selection) ) || !"flee".equals(selection) )
&& !((( !"attack".equals(selection) ||
!"defend".equals(selection) ) &&
!( !"attack".equals(selection) &&
!"defend".equals(selection) ) &&
!"flee".equals(selection) )))
{
System.out.println("Invalid Entry!");
}else{
System.out.println(selection + " was chosen");
System.out.println("");
}
}
}
Sekali lagi, saya bertanya apakah ada cara untuk mengambil klausa while ini (yang saya tekankan, berfungsi dengan sempurna):
(( !"menyerang".sama dengan(pilihan) || !"pertahanan".sama dengan(pilihan) ) && !( !"menyerang".sama dengan(pilihan) && !"pertahankan".sama dengan(pilihan) ) || !" lari".sama dengan(pilihan) ) && !((( !"serangan".sama dengan(pilihan) || !"pertahanan".sama dengan(pilihan) ) && !( !"serangan".sama dengan(pilihan) && !"pertahankan ".equals(pilihan) ) && !"lari".sama dengan(pilihan) ))
sehingga cocok dengan kondisi perulangan while:
while(FITS HERE){}
Terima kasih!