При создании, классу Person
передается возраст в годах (от 1 до 100). Метод getMilliseconds
пересчитывает возраст в миллисекундах.
При проверке (сколько миллисекунд в 1 годе) выходит ошибка:
Incorrect
expected 31 536 000 000
actual: -1 141 367 296 000
Как исправить тип литералов так, чтобы расчет шел верно?
public class Person {
private final int years;
public Person(int years) { this.years = years; }
public long getMilliSeconds() { return years * 365 * 24 * 60 * 60 * 1000L; }
}
Попробуй в самом начале приводить тип к long вот так:
public long getSeconds() { return (long) years * 365 * 24 * 60 * 60L; }
public long getMilliSeconds() { return (long) years * 365 * 24 * 60 * 60 * 1000; }
p.s.: Ответил на текст вопроса, а заголовок вопроса пропустил случайно.
Так вот при перемножении или сложении положительных чисел в информатике иногда можно получить отрицательный результат. Всё дело в том, что когда мы делаем эти операции "на листочке в столбик", то мы работаем с числами любой длины, а когда это делает компьютер, то нужно иметь в виду, что компьютеры всегда работают с моделью чисел, а не с числами любой длины, и отдельного знака "-" у них нет.
По этому отрицательные числа в модели с которой работает компьютер в качестве знака отрицания используют самый левый разряд модели и если он установлен в 1, то значит число воспринимается как отрицательное.
И теперь подытожу: если вы перемножаете много положительных чисел, то может сложиться такая ситуация что размер полученного результата может быть длиннее чем имеющаяся размерность используемой модели (int в java 32 бита; lond в java 64 бита), и тогда все лишние левые разряды которые "не вместились" просто отбрасываются компьютерами и результат получается уже не верным, а если на крайнем бите в используемой модели числа оказывается 1, то результат оказывается не верным, да ещё и отрицательным.
Этот процесс называется целочисленное переполнение.
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Я изучаю графическую библиотеку swing и столкнулся с проблемой - текст не изменяет своё положение относительно jpanel при изменении параметров...
Скачал с офф сайта и распаковал архив в usr/local/Потом запускаю
Я пишу свой лаунчер МайнкрафтаМне нужны все библиотеки Майнкрафта (dll файлы, LWJGL, OpenAL и другие)