Из книги: Давайте изменим метод dive() в классе Fish, чтобы ограничить сотней метров глубину, на которой может плавать наша рыбка:
public class Main {
public static void main(String[] args) {
Fish myFish = new Fish();
myFish.dive(50);
}
}
public class Fish {
int currentDepth = 0;
public int dive(int howDeep) {
currentDepth = currentDepth + howDeep;
if (currentDepth > 100) {
System.out.println("Я маленькая рыбка и не могу плавать глубже 100 метров");
currentDepth = currentDepth - howDeep;
} else {
System.out.println("Я погружаюсь еще на " + howDeep + " метров");
System.out.println("Я на глубине " + currentDepth + " метров");
}
return currentDepth;
}
}
Всё работает, но я не понял зачем вот эта строчка:
currentDepth = currentDepth - howDeep;
Просто мы сначала простыми словами делаем так: 0 = 0 + введенное число; Если (currentDepth больше 100) то вывести ... иначе ...
Ну вот только не пойму зачем строчка currentDepth = currentDepth - howDeep;
То есть изначально у нас значение myFish.dive(50); = 50;
А currentDepth = currentDepth - howDeep; // это будет 50 = 50 - 50;
Если и без неё прекрасно всё работает(вроде как).
Объясните пожалуйста!
Где тут логика? Или меня понесло не в ту сторону?
currentDepth не должно превышать 100 currentDepth на заданное значение (howDeep). Например, currentDepth было 80, howDeep - 50, в итоге currentDepth стало 130currentDepth = 130), то нужно отменить уже произведённое увеличение currentDepth. Для этого, собственно, из него и вычитается уже добавленное значение, чтобы currentDepth снова стало равно 80Вообще, это несколько проблемный подход (из-за необходимости откатывать значение, что является усложнённым вариантом дублирования кода). На мой взгляд, проще и понятнее проверять, не выйдет ли новое значение за границы, и изменять текущее только в том случае, если новое значение допустимо:
public int dive(int howDeep)
{
int newDepth = currentDepth + howDeep;
if (newDepth > 100)
{
System.out.println("Я маленькая рыбка и не могу плавать глубже 100 метров");
}
else
{
currentDepth = newDepth;
System.out.println("Я погружаюсь еще на " + howDeep + " метров");
System.out.println("Я на глубине " + currentDepth + " метров");
}
return currentDepth;
}
Возвращаем currentDeep к исходному значению, если рыбка не нырнула, т.к. конечная глубина была бы больше, чем рыбка может.
Если же в if поставить
if ((currentDepth + howDeep) > 100)
то строчка currentDepth = currentDepth - howDeep; не потребуется, потому что значение currentDeep не будет изменено.
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости