我正在尝试使用另一个类中的另一个对象检查一个人的年龄,由于某种原因 areThey 布尔值无论如何都返回false。我实现的以下代码是__
public class main {
public static void main(String[] args){
Obj object = new Obj();
object.areTheyOldEnough();
if(object.areTheyOldEnough() == true){
System.out.println("They are old enough!");
}else{
System.out.println("They are not old enough!");
}
}
}
public class Obj {
private int age = 15;
private boolean areThey;
public boolean areTheyOldEnough() {
if (age > 12) {
boolean areThey = true;
}
return areThey;
}
}
答案 0 :(得分:4)
您的问题称为阴影;这里:
最内在声明:
if (age > 12) {
boolean areThey = true;
完全错了,那应该是:
areThey = true;
代替。关键是:您要声明该名称的新变量,并赋予该值true
。但是当if-block被“留下”时,那个变量在空气中消失了......返回的是areThey
类中字段 obj
的值。而仍然的初始默认值为false
。
除此之外:命名是代码中的一个真正问题。使用A)符合java编码标准的名称;所以类名起始于UpperCase; B)意味着什么。
换句话说:名称对象并不意味着什么(除了创建与java.lang.Object类名称的另一个名称冲突)。最好把它称为“testInstance”或类似的东西 - 如上所述:使用表示某些东西的名称。
答案 1 :(得分:0)
你有两个同名的布尔变量 - 一个是你在方法中设置的局部变量(在if块内),另一个是你要返回的实例变量。
您不需要任何布尔变量,只需写:
public boolean areTheyOldEnough() {
return age > 12;
}
答案 2 :(得分:0)
你混合了场和局部变量的可见性
public class obj {
public int age = 15;
public boolean areThey; //initialized to false as default value for boolean
public boolean areTheyOldEnough() {
if (age > 12) {
boolean areThey = true; //create new local variable with the same name as field,
// but visible just in scope of if-block
}
return areThey; // return value from field
}
答案 3 :(得分:0)
更正您的代码如下:
public class main {
public static void main(String[] args){
obj Object = new obj();
if(obj.areTheyOldEnough()){
System.out.println("They are old enough!");
} else{
System.out.println("They are not old enough!");
}
}
你的obj课程将是:
public class obj {
public int age = 15;
// it is not required, but if you need for other methods,
// you can define it
public boolean areThey;
public boolean areTheyOldEnough() {
return age > 12;
// or if you need set variable areThey, so use following codes
/*
areThey = age > 12;
return areThey;
*/
}