Из книги: Давайте изменим метод 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
не будет изменено.
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Не до конца понимаю, в чем разница между java проектами и пакетами в Eclipse IDEСкажем, есть два проекта: ProjectA и ProjectB
Недавно начал работать c vaadin 8, и все никак не получается менять стилиНапример я пишу свой стиль в файл mytheme