我正在做一个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。
为什么?
我没有用表达式排除这个吗?
在您尝试的情况下,代码进入以下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。