2016-10-20 11 views
0

ユーザーが送信した文字が文字列に含まれているかどうかを確認しようとしていますが、常にfalseを返します。 .equals()関数を読んだところから動作するはずです。私は文字列が "アメリカ"だった場合、ユーザーが文字 "a"を入力すると "pass"を返すと予想していました。 outputTest.length()outputTest.charAt()に基づいて.equals()を使用して文字列内の文字をチェックしていない

for (int i = 0; i < outputTest.length(); i++){ 
        if (userInput.equals(outputTest.charAt(i))){ 
         System.out.println("Pass"); 
        }else { 
         System.out.println("Fail"); 
        } 
       } 
+1

http://stackoverflow.com/questions/を考慮することができます7520432/what-is-the-the-difference-vs-equals-in-java – mika

+1

outputTest変数を教えてください。何が入っているのですか? –

+3

'outputTest.charAt(i)'の代わりに 'outputTest.substring(i、i + 1)'を使用してください。 – saka1029

答えて

1

私はoutputTestがStringであると仮定しています。
userInput.equalsに基づいて、のようなプリミティブ型ではないと仮定しています(プリミティブ型にはメソッドがないため)。それはまたCharacterではない、さもなければPass何度か見る。したがって、文字列である可能性が最も高いです。


outputTest.charAt(i)戻りcharていますが、equalsメソッドをStringと比較されているように見えます:equalsObjectを期待するので、だから、

964 publicboolean equals(Object anObject) {
965 if (this == anObject) {
966 returntrue;
967 }
968 if (anObject instanceofString) {
969 String anotherString = (String)anObject;
970 int n = value.length;
971 if (n == anotherString.value.length) {
972 char v1[] = value;
973 char v2[] = anotherString.value;
974 int i = 0;
975 while (n-- != 0) {
976 if (v1[i] != v2[i])
977 returnfalse;
978 i++;
979 }
980 returntrue;
981 }
982 }
983 returnfalse;
984 }

、(outputTest.charAt(i)から返される)charは自動的にCharacterに箱詰めされ、しかしCharacterは延長されないのでStringテスト

if (anObject instanceof String) 

が失敗し、すぐにreturn false;に移動します。


あなたは1 StringがあなたのオブジェクトUSERINPUTのデータ型は何別

outputTest.contains(userInput) 
0

が含まれているかどうかを確認したい場合はcontainsメソッドを使用することをお勧めしますか? StringオブジェクトとcharAt()メソッドによって返される文字を比較しているようです。それは常にfalseを返します。

1

だけで行う、別の文字列内の文字列を検索するには:あなたがに、メソッドを使用するために良い習慣を学習しているとき

return text.contains(string); 

を文字列内の文字を検索するには、

return text.indexOf(ch) > -1; 
0

を行いますどのような種類のデータ型が適用されるか返されるかを調べることです。たとえば、コード化することはできません。char scanner.nextLine() // nextLine() is to read String, not char.したがって、コードoutputTest.charAt(i) // I am a charとこのuserInput.equals() // I am a Stringでは、異なることを比較しています。リンゴは2つの異なるオブジェクトであるため、デスクと比較することはできません。コンパイラは常にあなたに偽を伝えます。

私が想定しています。ユーザーの入力のためのString inputTest = scanner.nextLine();手紙を、そしてあなたは長さ1(または内部の任意の他の文字)と文字列として"a"

if (outputTest.contains(userInput)) // now you are comparing String and String 
     System.out.println("Pass"); 
    else 
     System.out.println("Fail"); 
関連する問題