4

次の IF ステートメントで上記のエラー メッセージが表示され続けます。どんな助けでも大歓迎です。

public void sendMessage(View button) {
        String mName = Name.getText().toString();
        String mGuess = Guess.getText().toString();
        if (mGuess != "1" || "2" || "3" || "4" || "5" || "6" || "7" || "8" || "9" || "10") {
            Toast.makeText(MainActivity.this,
                    "The number you entered was invalid. Please try again.", Toast.LENGTH_LONG).show();
        }
4

4 に答える 4

13

まず、通常、!=文字列の比較には使用しないでください。代わりに使用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 による回答を参照してください。検索が高速になります。)HashSetArrayList

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) { . . .
于 2013-03-10T01:31:17.010 に答える
6

コンパイラ エラー1原因は、式が

mGuess != "1" || "2" || ..

と同等に解析されます

((mGuess != "1") || "2") || ..

ただし、 の型はmyGuess != "1"isbooleanであるため、上記の式は次のように型付けされます。

((boolean) || String) || String) || ..

しかしboolean || String、コンパイラ エラーによると無効です。

演算子 || 引数の型は未定義です。ブール値、文字列


1解決策については、他の回答のいずれかを参照してください。

于 2013-03-10T01:56:56.240 に答える
6

すでに説明したように、各条件を明示する必要があります。よりコンパクトに記述する方法は次のとおりです。

Set<String> oneToTen = new HashSet<String> (Arrays.asList("1", "2", "3", "4", "5", "6", "7", "8", "9", "10");

if (!oneToTen.contains(mGuess)) {

あるいは、mGuess が数値であることがわかっている場合は、最初に整数に解析できます。

int guess = Integer.parseInt(mGuess);
if (guess < 0 || guess > 10) {
}
于 2013-03-10T01:31:51.217 に答える
2

&&否定的な式を評価し、比較に使用.equalsし、ステートメントに構文的に正しい式を含める必要があります。Stringif

if (!mGuess.equals("1") && !mGuess.equals("2") && ...

参照: Java String.equals と ==

于 2013-03-10T01:31:40.187 に答える