まず、通常、!=
文字列の比較には使用しないでください。代わりに使用equals()
します。==
and演算子は!=
、文字列が同一のオブジェクトであるかどうかのみをテストします。それらは等しい値をテストしません。次に、式を次のように展開する必要があります。
if (!mGuess.equals("1") || !mGuess.equals("2") || /* etc */) { . . .
最後に、このロジックは実際には意味がありません。条件は常に true になります (mGuess
少なくとも 1 つを除くすべてのテスト文字列と常に「等しくない」)。あなたはおそらく欲しい:
if (!mGuess.equals("1") && !mGuess.equals("2") && /* etc */) { . . .
これを行うより簡潔な方法は次のとおりです。
List<String> validStrings = Arrays.asList("1", "2", ...);
if (!validStrings.contains(mGuess)) { ...
validStrings
(クラスメンバーとして宣言しstatic
て、メソッドを介して毎回作成を保存することもできます。また、検索に an の代わりにa を使用する方法については、assylias による回答を参照してください。検索が高速になります。)HashSet
ArrayList
PS assylias と kcoppock がコメントで述べたように、入力をint
値として解析してから数値テストを行うことを検討する必要があります。違いは、 として解析int
すると、たとえば "07" が "7" と同じように扱われることです。それを許可したい場合は、次のコードが機能します。
boolean ok = false;
try {
int guess = Integer.parseInt(mGuess);
ok = guess >= 1 && guess <= 10;
} catch (NumberFormatException ignored) {
}
if (!ok) { . . .