Я написал метод, чтобы рассчитать, сколько лет тому назад отцу было в два раза больше, чем его сыну, и через сколько лет это будет правдой.Неожиданно он возвращается «-2 года назад» для 8-летнего отца и 3-летнего сына.Не менее неожиданно он возвращает «-1 год спустя» для 3-летнего отца и 2-летнего сына.Меня не волнует, как улучшить код, потому что я уже знаю, как это сделать.Вместо этого я озадачен тем, почему счетчик цикла for кажется уменьшающимся, когда он должен увеличиваться.
Вот мой код.
public class TwiceAsOld {
public static void twiceAsOld (int currentFathersAge, int currentSonsAge) {
int yearsAgo;
int yearsFromNow;
int pastFathersAge = currentFathersAge;
int pastSonsAge = currentSonsAge;
int futureFathersAge = currentFathersAge;
int futureSonsAge = currentSonsAge;
for (yearsAgo = 0; pastFathersAge != 2 * pastSonsAge; yearsAgo++) {
pastFathersAge--;
pastSonsAge--;
}
System.out.println("The father was last twice as old as the son " + yearsAgo + " years ago.");
for (yearsFromNow = 0; futureFathersAge != 2 * futureSonsAge; yearsFromNow++) {
futureFathersAge++;
futureSonsAge++;
}
System.out.println("The father will be twice as old as the son in " + yearsFromNow + " years from now.");
}
public static void main(String[] args) {
twiceAsOld(8, 3);
twiceAsOld(3, 2);
}
}
С дважды AsOld (8, 3),Инкремент цикла, по-видимому, перевернулся, чтобы начать обратный отсчет от 0 вместо повышения.С дважды AsOld (3, 2), -1 может означать ошибку, указывающую, что отец никогда не был в два раза старше своего сына и никогда не будет.Что я не понимаю, так это то, что заставило бы цикл for начать уменьшать значение i, когда оно должно увеличиваться.Я ожидал, что счетчик будет увеличиваться до бесконечности, пока программе не хватит памяти.
Я уже знаю, как улучшить эту программу, но мне любопытно, как может уменьшиться счетчик в цикле for, когда он должен увеличиться.Кто-нибудь может объяснить это?
(ОБНОВЛЕНИЕ: Спасибо всем за ваши ответы. Не могу поверить, что я забыл о целочисленном переполнении. Я пытался сделать переменные long вместо целых чисел, но это сделало программу еще медленнее. В любом случаеТеперь я понимаю, что счетчик все время увеличивался, пока не пролетел и не приземлился с отрицательным значением.)