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
}

您在此处定义的变量 nameweightage 隐藏了您在 [=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)。因此,它似乎产生了正确的答案,但它实际上产生了错误的答案,并隐藏了你的作业无效的事实。