3

ブール値のtrueまたはfalseを返すメソッドを実装しようとしています。このメソッドは、ifおよびelseステートメントに基づいてブールisMatchをtrueまたはfalseに初期化します。

public class BooleanTest {
   int num;
   boolean isMatch;

   public BooleanTest() {
     num = 10;
   }

   public boolean isMatch() { //variable is already initialize to 10 from constructor
     if (num == 10)
       isMatch = true;
     else
       isMatch = false;
     return isMatch;
   }

   public static void main(String[] arg) {
     BooleanTest s = new BooleanTest();

     System.out.println(s.isMatch);
   }
} 

isMatchの出力はtrueである必要がありますが、出力isMatchがfalseになります。私のブール法は間違っていますか?どうすれば修正できますか?ご協力ありがとうございました。

4

4 に答える 4

10

まず、isMatchメソッド全体を次のように折りたたむ方がよいでしょう。

public boolean isMatch() {
    return num == 10;
}

次に、の値を変更しない限り、既存のコードは実際num機能します。出力を次のように表示するために使用している診断を確認する必要がありますfalse...誤解を招く可能性があります。メソッドを呼び出すのではなく、呼び出されたフィールドの値を出力している可能性はありますか?isMatchそれはそれを説明するでしょう。これが、フィールドと同じ名前のメソッドを持つことが悪い考えである理由の1つです。さらに、フィールドを非公開にすることをお勧めします。

動作中のメソッド呼び出しと「失敗した」フィールドアクセスの両方を示す短いが完全な例(正常に動作しているが、希望どおりに動作していない):

public class BooleanTest {
    private int num;
    private boolean isMatch;

    public BooleanTest() {
        num = 10;
    }

    public boolean isMatch() {
        return num == 10;
    }

    public static void main(String[] args) {
        BooleanTest test = new BooleanTest();
        System.out.println(test.isMatch()); // true
        System.out.println(test.isMatch); // false
    }
} 

正直なところ、なぜあなたがフィールドを持っているのかは明らかではありません-私はそれを削除します。

于 2013-03-25T19:42:33.510 に答える
1

あなたはそれを次のように呼ぶ必要があります

b.isMatch()

みたいではなく

b.isMatch
于 2013-03-25T19:47:42.870 に答える
0

あなたはこのようなことをしましたか?:

public class BooleanTest {
   int num;
   boolean isMatch;

   public BooleanTest() {
     num = 10;
   }

   public boolean isMatch() { //variable is already initialize to 10 from constructor
     if (num == 10)
       isMatch = true;
     else
       isMatch = false;
     return isMatch;
   }
   public static void main(String st[])//test your code in main..
    {
      BooleanTest bt = new BooleanTest();//constructor of BooleanTest is called 
      System.out.println(bt.isMatch());//Check the value returned by isMatch()
    }
}   

編集
編集した投稿は、デフォルトではmain印刷されていないisMatchことを示してい ます。..代わりに使用する必要があります。isMatch()falseisMatch()

于 2013-03-25T19:44:35.103 に答える
0

実行するときはisMatch()、中かっこでメソッドを呼び出していることを確認してください。そうでない場合は、フィールドを参照しますisMatch。次のようになります:

BooleanTest bt = new BooleanTest();
bt.isMatch(); // include () and not bt.isMatch

変化する

System.out.println(s.isMatch);

System.out.println(s.isMatch());
于 2013-03-25T19:47:16.753 に答える