3

私はCSコースを受講していますが、このコードで問題が発生しています。

         while (statScan.hasNext()){

        currentStat = statScan.next();
        if (currentStat =  h);
        {       
            hStat++;
        }
        System.out.println("" + currentStat);

「if」ステートメントを見てください。Javaは「文字列をブール値に変換できない」と言っています。私の理解booleanでは、これは真偽のことなので、Javaが理解していないのは、文字列を評価および比較する方法です。どうすれば強制できますか?

4

4 に答える 4

4

問題は、等しいかどうかを尋ねる代わりに割り当てることです(assign'='、equals'==')
これはその行の解決策です:文字列の場合も.equals()を使用します

if (currentStat.equals(h))
于 2012-12-02T01:28:06.223 に答える
1

Javaの=演算子は代入演算子として意図されているので、書くときにxがyに等しいx = yという意味ではなく、yの値をxに割り当てます

比較演算子は==演算子ですが、これにより、プリミティブ型(int、char、floatなど)またはオブジェクトへの参照が比較されますが、これは通常の動作ではありません。プリミティブ型ではないものについては、継承されたメソッドの使用を検討する必要がObjectありboolean equals(Object o)ます。その理由を正確に理解するには、こちらまたはこちらをご覧ください。

于 2012-12-02T01:29:32.010 に答える
1

ここでいくつかの問題:

if (currentStat =  h);

まず、最後にセミコロンがあり、ifステートメントが希望どおりに機能しなくなります。基本的には、条件付きで空のステートメントを実行します。次のコードブロック(条件付きにすることを意図したもの)は常に実行されます。これを回避するには、セミコロンを削除してください。

=また、の代わりに持っているだけです==。これは、hの値をcurrentStatに割り当てていることを意味します。これは古典的な、古典的なタイプミスです。@YogendraSinghが他の回答で述べたように、equals()Javaで文字列の比較を実行するには、このメソッドを使用する必要があります。それ以外の場合は、2つのアイテムがまったく同じオブジェクトであるかどうかを比較するだけです。使用する必要のある2つの異なるオブジェクトに同じ文字列テキストが保持されていることを検出してくださいequals()

したがって、この行を次のように変更します。

if (h.equals(currentStat))
于 2012-12-02T01:32:59.757 に答える
0

文字列であると仮定して、文字列比較のメソッドを次のhように使用します。equals

      if(currentStat.equals(h))

現在、の文字列値をに割り当てる代入演算子 を使用しています。=hcurrentStat

演算子を比較演算子に変更する==と、値ではなくオブジェクトインスタンスの等価性が比較されますが、これは望ましくないと思います/

于 2012-12-02T01:26:58.250 に答える