【问题标题】:Why is the constructor not accepted?为什么不接受构造函数?
【发布时间】:2022-12-11 22:36:45
【问题描述】:

说明是 如果构造函数的方向参数等于 Direction.UP,则 Bullet 类的构造函数必须将 dy 字段初始化为 -1。
如果构造函数的方向参数不等于 Direction.UP,则 Bullet 类的构造函数必须将 dy 字段初始化为 1。

我的解决方案是

public Bullet(double x, double y, Direction direction) {
        super(x, y);
        setMatrix(ShapeMatrix.BULLET);
    if (Direction direction  == Direction.UP) {
        dy = -1;
    } else {
        dy = 1;
    }

但正确的解决方案是

    public Bullet(double x, double y, Direction direction) {
        super(x, y);
        setMatrix(ShapeMatrix.BULLET);
        this.dy = direction == Direction.UP ? -1 : 1;
    }

有人可以向我解释为什么吗?

【问题讨论】:

    标签: java constructor


    【解决方案1】:

    构造函数中的this 将引用正在创建和返回的新对象。在第一种情况下:

     dy = -1;
     dy = 1;
    

    这些值正在全局创建并附加到 window 对象。理想情况下,您希望它们在您的对象上,这就是为什么 this.dy 有效

    【讨论】:

      【解决方案2】:

      【讨论】:

        【解决方案3】:

        在你的if statement中,Direction direction意味着你正在初始化一个变量

        只要做if (direction == Direction.Up)

        【讨论】:

          【解决方案4】:

          尝试访问构造函数或任何其他函数中的任何类变量时,您需要使用 this 关键字。您的代码也可以仅通过 this 关键字访问 dy 属性。像下面这样

          if (Direction direction  == Direction.UP) {
                  this.dy = -1;
              } else {
                  this.dy = 1;
              }
          

          另一方面,在提供的解决方案中,只是那个使用三元运算符作为 if else 的简写的人没有阻止其他任何东西。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2017-02-20
            • 2011-01-10
            • 2019-05-27
            • 2021-04-07
            • 1970-01-01
            • 1970-01-01
            • 2017-10-21
            • 2011-10-27
            相关资源
            最近更新 更多