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 的输出应该是真的,但我得到输出 isMatch 是假的。我的布尔方法是否错误,我该如何解决?谢谢您的帮助。

4

4 回答 4

10

首先,您的整个isMatch方法最好折叠为:

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

其次,你现有的代码真的可以工作,除非你改变num. 您应该查看用于将输出显示为的任何诊断程序false……我怀疑它们会误导您。您是否有可能打印出被调用字段的值而不是isMatch调用该方法?这样就可以解释了。这就是为什么使用与字段同名的方法是个坏主意的原因之一。此外,我建议将您的字段设为私有。

简短但完整的示例显示了工作方法调用和“失败”字段访问(工作正常,但没有做你想做的事):

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()默认false 情况下。..你应该isMatch()改用。

于 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 回答