ユーザーが「攻撃」、「防御」、または「逃げる」の3つのオプションのいずれかを実行するための文字列として選択肢を入力できるようにするクラスを利用するゲームに取り組んでいます。これは、「排他的 OR」(XOR) によって論理的に処理できます。通常の Switch コンストラクトの代わりに、このロジックを使用する while ループを使用して、何が起こるかを確認することにしました。while 条件が醜くて長いことはわかっていましたが、うまくいきました!そして、私はそれが好きです! while ループ条件を (変数、メソッドなどとして) 保存する方法があれば、コードの他のセクションでこの while ループを再利用したいので、知りたいと思っていました。 while ループ条件を使用し、毎回 8 行のコードを使用しません。これが私のwhileループです。笑わないでください、うまくいきます。と、try-catch を回避します。それは実際には非常にきれいに実行されます。以下に私が使用する方法を投稿しました。このメソッドは、別のクラスによって呼び出されます。
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("");
}
}
}
繰り返しますが、この while 句を使用する方法があるかどうかを尋ねています (私が強調するように、完全に機能します)。
(( !"attack".equals(選択) || !"defend".equals(選択) ) && !( !"attack".equals(選択) && !"defend".equals(選択) ) || !" fly".equals(選択) ) && !((( !"attack".equals(選択) || !"defend".equals(選択) ) && !( !"attack".equals(選択) && !"defend ".equals(選択) ) && !"逃げる".equals(選択) ))
while ループ条件の内側に収まるようにします。
while(FITS HERE){}
ありがとう!