我试图实现一个返回布尔值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是假的。我的布尔方法是错误的,我该如何解决?谢谢你的帮助。
答案 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());