#java
#java
Вопрос:
Я прохожу один из онлайн-курсов по Java, и у меня есть небольшое недопонимание относительно обработки параметров конструкторов в этой конкретной ситуации. Условия просты: если значение параметра, которое передается при вызове конструктора, меньше 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 amp;amp; y >= 0){
this.x = 0;
this.y = y;
}
if(y <= 0 amp;amp; x >= 0){
this.y = 0;
this.x = x;
}
if (x <= 0 amp;amp; y <= 0){
this.x = 0;
this.y = 0;
}
else{
this.x = x;
this.y = y;
}
}
}
По какой-то причине вызов конструктора установил значение поля для y равным -1.0.
Почему?
Разве я не исключил это в своих выражениях?
Комментарии:
1. Возможно, вы захотите связать
if
блоки сelse if (...)
помощью оператора and . В противном случае последнийif-else
блок отделяется от первых двухif
операторов.2. Вы могли бы использовать условный оператор :
this.x = x < 0 ? 0 : x
. Или используйте max:this.x = Math.max(0, x);
3. Нет ничего плохого в изменении двойных параметров. Они передаются как значения
4. Как сказал @Johnny Mopp, вы могли бы использовать условный оператор. Это просто и аккуратно
Ответ №1:
В случае, если вы пытались, код вводит блок else следующего if-else:
if (x <= 0 amp;amp; y <= 0)
{
this.x = 0;
this.y = 0;
}
else
{
this.x = x;
this.y = y;
}
таким образом, переопределяется значение y, которое было присвоено вашим вторым оператором if . Вы должны использовать if-else if …else в своем коде.