布尔方法麻烦

时间:2013-03-25 19:40:43

标签: java

我试图实现一个返回布尔值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 个答案:

答案 0 :(得分: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
    }
} 

目前尚不清楚为什么你有这个领域,说实话 - 我会删除它。

答案 1 :(得分:1)

你必须把它称为

b.isMatch()

不喜欢

b.isMatch

答案 2 :(得分: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()代替。

答案 3 :(得分:0)

确保您在执行时使用大括号调用方法isMatch(),您将引用字段isMatch。应该如下:

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

更改

System.out.println(s.isMatch);

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