Java (codecademy) 中的 if-else-else if 语句
if-else-else if statements in Java (codecademy)
我刚刚开始学习 Java,我刚进入 CodeAcademy 的 if-else-else if
语句部分。我尝试在方法中使用 if else
语句,但在调用它时我没有收到变量值,只有 if-else 语句。我猜这是一个非常小的错误。
(这是我的第一个 post 所以如果我使用的任何功能不正确,请告诉我)
谢谢!
public class Dog{
String name;
double weight;
int age;
public Dog(String dogName, double dogWeight, int dogAge){
String name = dogName;
double weight = dogWeight;
int age = dogAge;
if (dogAge == 10){
System.out.println("He's getting a bit older!");
} else if (dogAge < 10) {
System.out.println("He is still young!");
} else if (dogAge > 10){
System.out.println("Make sure he is healthy!");
}
}
public static void main(String[] args){
Dog coco = new Dog("CoCo", 15.67, 11);
System.out.println(coco.age);
}
}
我从中得到的输出是:
Make sure he is healthy!
0
改变
int age = dogAge;
至
this.age = dogAge;
这会将传递给构造函数的值分配给 class 的年龄成员。您所拥有的将值分配给仅在构造函数中具有作用域的 int。
在您的构造函数中,您正在声明该方法的局部新变量,这些变量恰好与您的对象的属性同名。
public Dog(String dogName, double dogWeight, int dogAge){
String name = dogName;
double weight = dogWeight;
int age = dogAge;
要覆盖对象的属性,您可以删除类型声明以引用现有变量。
public Dog(String dogName, double dogWeight, int dogAge){
name = dogName;
weight = dogWeight;
age = dogAge;
您还可以使用 this
对象,它可以消除对象的属性和类似命名的变量之间的歧义。它也有助于提高可读性。
public Dog(String dogName, double dogWeight, int dogAge){
this.name = dogName;
this.weight = dogWeight;
this.age = dogAge;
这是理解范围的问题。在构造函数中,您执行以下操作:
public Dog(String dogName, double dogWeight, int dogAge){
String name = dogName;
double weight = dogWeight;
int age = dogAge;
... other stuff
}
您在此处定义的变量 name
、weight
和 age
隐藏了您在 [=27] 上定义的同名 class 成员=].因此,当构造函数完成时,这些分配将丢失。这就是为什么您的主要方法为 coco 的年龄打印 0(0 是 Java 默认数字分配)。
大概您应该将这些值分配给实例的成员
public Dog(String dogName, double dogWeight, int dogAge){
name = dogName;
weight = dogWeight;
age = dogAge;
... other stuff
}
请注意,构造函数中的 if-else 块似乎在运行,但推测它们应该评估分配给实例的值(即成员 age
)。您正在评估构造函数参数参数(即 dogAge
)。因此,它似乎产生了正确的答案,但它实际上产生了错误的答案,并隐藏了你的作业无效的事实。
我刚刚开始学习 Java,我刚进入 CodeAcademy 的 if-else-else if
语句部分。我尝试在方法中使用 if else
语句,但在调用它时我没有收到变量值,只有 if-else 语句。我猜这是一个非常小的错误。
(这是我的第一个 post 所以如果我使用的任何功能不正确,请告诉我)
谢谢!
public class Dog{
String name;
double weight;
int age;
public Dog(String dogName, double dogWeight, int dogAge){
String name = dogName;
double weight = dogWeight;
int age = dogAge;
if (dogAge == 10){
System.out.println("He's getting a bit older!");
} else if (dogAge < 10) {
System.out.println("He is still young!");
} else if (dogAge > 10){
System.out.println("Make sure he is healthy!");
}
}
public static void main(String[] args){
Dog coco = new Dog("CoCo", 15.67, 11);
System.out.println(coco.age);
}
}
我从中得到的输出是:
Make sure he is healthy!
0
改变
int age = dogAge;
至
this.age = dogAge;
这会将传递给构造函数的值分配给 class 的年龄成员。您所拥有的将值分配给仅在构造函数中具有作用域的 int。
在您的构造函数中,您正在声明该方法的局部新变量,这些变量恰好与您的对象的属性同名。
public Dog(String dogName, double dogWeight, int dogAge){
String name = dogName;
double weight = dogWeight;
int age = dogAge;
要覆盖对象的属性,您可以删除类型声明以引用现有变量。
public Dog(String dogName, double dogWeight, int dogAge){
name = dogName;
weight = dogWeight;
age = dogAge;
您还可以使用 this
对象,它可以消除对象的属性和类似命名的变量之间的歧义。它也有助于提高可读性。
public Dog(String dogName, double dogWeight, int dogAge){
this.name = dogName;
this.weight = dogWeight;
this.age = dogAge;
这是理解范围的问题。在构造函数中,您执行以下操作:
public Dog(String dogName, double dogWeight, int dogAge){
String name = dogName;
double weight = dogWeight;
int age = dogAge;
... other stuff
}
您在此处定义的变量 name
、weight
和 age
隐藏了您在 [=27] 上定义的同名 class 成员=].因此,当构造函数完成时,这些分配将丢失。这就是为什么您的主要方法为 coco 的年龄打印 0(0 是 Java 默认数字分配)。
大概您应该将这些值分配给实例的成员
public Dog(String dogName, double dogWeight, int dogAge){
name = dogName;
weight = dogWeight;
age = dogAge;
... other stuff
}
请注意,构造函数中的 if-else 块似乎在运行,但推测它们应该评估分配给实例的值(即成员 age
)。您正在评估构造函数参数参数(即 dogAge
)。因此,它似乎产生了正确的答案,但它实际上产生了错误的答案,并隐藏了你的作业无效的事实。