如何正确处理构造函数参数

问题描述 投票:1回答:1

我正在做一个Java在线课程,我对这种特定情况下的Constructors参数处理有一些误解。条件很简单:如果在调用构造函数时传递的参数值小于0,则该字段的值应为0;所以,我在创建一个新对象时调用构造函数

       Test test = new Test(1.125, -1.0);

第一个代码示例工作,它完成工作(x = 1.125,y = 0),但这是处理参数的正确方法吗? (我听说它不是)似乎我实际上已经改变了参数而不是字段。

public class Test{
    private double x;
    private double y;

    public Test(double x, double y) {
        if(x < 0){
            x = 0;
        }
        if(y < 0){
            y = 0;
        }
        this.x = x;
        this.y = y;
    }
}

然后我实际上试图正确地改变字段。在调用构造函数时传递相同的参数(1.125,-1.0)。

public class Test{
    private double x;
    private double y;
        public Test(double x, double y) {
            if(x <= 0 && y >= 0){
                this.x = 0;
                this.y = y;
            }
            if(y <= 0 && x >= 0){
                this.y = 0;
                this.x = x;
            }
            if (x <= 0 && y <= 0){
                this.x = 0;
                this.y = 0;
            }
            else{
                this.x = x;
                this.y = y;
            }
    }
}

出于某种原因,构造函数调用将y的字段值设置为-1.0。

为什么?

我没有用表达式排除这个吗?

java
1个回答
3
投票

在您尝试的情况下,代码进入以下if-else的else块:

if (x <= 0 && y <= 0)
{
    this.x = 0;
    this.y = 0;
}
else
{
    this.x = x;
    this.y = y;
}

从而覆盖由第二个if语句指定的y的值。您应该在代码中使用if-else if ... else。

© www.soinside.com 2019 - 2024. All rights reserved.