Исключение c Long.MAX_VALUE
Необходимо написать метод который считывает из файла числа и находит их сумму, если сумма больше Long.MAX_VALUE.выбросить исключение. Вопрос: как проверить Long.MAX_VALUE и какой класс использовать в самом методе?
Сам метод:
public static long findSum(String path) throws FileNotFoundException, AccessDeniedException, BadFormatException, MaxValueException, IOException {
String result1 = readFirstLine(new File("C:\\input.txt"));
String file1 = result1.replaceAll("\\s+", "");
long x = Long.parseLong(file1);
long i = 0;
while (x != 0) {
i = i + x % 10;
x = x / 10;
if (i > Long.MAX_VALUE)
throw new MaxValueException("Cумма превышает допустимых значения Long.MAX_VALUE");
}
return i;
Ответы (2 шт):
Автор решения: Roman Konoval
→ Ссылка
Воспользуйтесь тем соображением, что a + b > c, только если a > c - b.
Т.е. перед добавлением к сумме S нового числа X проверьте, что текущая сумма не больше чем MAX_VALUE - X.
Автор решения: Sergei Kirjanov
→ Ссылка
Если нет соревнования на скорость, то работать с BigDecimal, и потом сконвертить longValueExact:
https://docs.oracle.com/javase/7/docs/api/java/math/BigDecimal.html#longValueExact()