JavaRush
AI Academy
new
Акция
Университет
Java FullStack
Python FullStack
AI Native Developer
new
Web FullStack
Обучение
Курсы
Задачи
Опросы
Игры
Помощь
График пинков
Стажировка
Сообщество
Пользователи
Форум
Чат
Статьи
Истории успеха
Активности
Отзывы
Подписки
Светлая тема
Вопрос
  • Отзывы
  • О нас
  • CS50
Начать
Начать обучение
Начать обучение
  • Все вопросы
JavaRush/Помощь по Java задачам/Почему ругается на Integer и String??
VADIM
32 уровень
  • 05.05.2022
  • 601просмотров
  • 11комментариев

Почему ругается на Integer и String??

Вопрос по задаче Разные методы для разных типов
Java Core,  5 уровень,  12 лекция
Решен


В этой задаче тебе нужно:

  1. Считывать с консоли данные, пока не будет введено слово "exit".
  2. Для каждого значения, кроме "exit", вызвать метод print(). Если значение:
    • содержит точку '.', вызвать метод print() для Double;
    • больше нуля, но меньше 128, вызвать метод print() для short;
    • меньше либо равно нулю или больше либо равно 128, вызвать метод print() для Integer;
    • иначе — вызвать метод print() для String.

Требования:
  • Программа должна считывать данные с клавиатуры.
  • Программа должна прекращать считывать данные с клавиатуры после того, как введена строка "exit".
  • Если введенная строка содержит точку("."), и ее можно корректно преобразовать в число типа Double - должен быть вызван метод print(Double value).
  • Если введенная строка может быть корректно преобразована в число типа short и полученное число больше 0, но меньше 128 - должен быть вызван метод print(short value).
  • Если введенная строка может быть корректно преобразована в число типа Integer и полученное число меньше или равно 0 или больше или равно 128 - должен быть вызван метод print(Integer value).
  • Во всех остальных случаях должен быть вызван метод print(String value).
....
package com.javarush.task.task15.task1519; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.nio.Buffer; import java.util.Scanner; /* Разные методы для разных типов */ public class Solution { public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); boolean isExit = true; while (isExit) { String s; s = br.readLine(); try { if (s.equals("exit")) isExit = false; else if (s.contains(".")) print(Double.parseDouble(s)); else if (Short.parseShort(s) > 0 && Short.parseShort(s) < 128) print(Short.parseShort(s)); else if (Integer.parseInt(s) <= 0 || Integer.parseInt(s) >= 128) print(Integer.parseInt(s)); } catch (NumberFormatException e) { System.out.println(s); } } br.close(); } public static void print(Double value) { System.out.println("Это тип Double, значение " + value); } public static void print(String value) { System.out.println("Это тип String, значение " + value); } public static void print(short value) { System.out.println("Это тип short, значение " + value); } public static void print(Integer value) { System.out.println("Это тип Integer, значение " + value); } }
0
Комментарии (11)
  • популярные
  • новые
  • старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
hidden #598481
Уровень 27
6 мая 2022, 08:51решение
Проверь на числе 40000. Должно выдавать Integer, выдаст String
+4
VADIM
Уровень 32
6 мая 2022, 14:13
решил, дай Вам бог здоровья)
0
Макс Антонов QA Automation Engineer
10 мая 2022, 17:26
А как решили?
0
Макс Антонов QA Automation Engineer
10 мая 2022, 18:05
Можете, пожалуйста, объяснить почему так работает?
0
hidden #598481
Уровень 27
11 мая 2022, 05:24
Потому что диапазон числа short сверху ограничен 2¹⁵-1, а в этой программе любое число пытаются парсить сначала в short, и только потом в int. При попытке парсинга возникает исключение до того, как будет выполнено сравнение => сразу попадаем в блок catch. Надо парсить в int, сравнивать, и только затем приводить к short согласно заданию.
+4
Макс Антонов QA Automation Engineer
11 мая 2022, 18:18
Спасибо
0
Abdushukur
Уровень 28
6 мая 2022, 00:22
в блоке catch пиши print(s) // print(String s) метод закрой br в блоке finally
if (inputText.contains(".")) print(Double.parseDouble(inputText)); //call print(Double)
после вызова double код можно писать компактнее int num = Integer.parseInt(s) if(num<=0 || nums>=128) print(num) // integer else print((short)num) // short
0
VADIM
Уровень 32
6 мая 2022, 08:42
если я пишу finally, то выкидывает IO исключение
0
VADIM
Уровень 32
6 мая 2022, 08:43
в catch поставил метод со string, но ошибка та же
0
Ada
Уровень 1
5 мая 2022, 18:34
Могу предположить, что дело в условии "Если введенная строка может быть корректно преобразована в число типа Integer". Если условие соблюдается, то нужно вызвать метод print(Integer value), и это происходит. Но если условие не соблюдается, то должен быть вызван метод print(String value), а он не вызывается, просто печатается значение переменной s
0
VADIM
Уровень 32
5 мая 2022, 19:10
поправил, но все равно ругается
0
Обучение
  • Курсы программирования
  • Регистрация
  • Курс Java
  • Помощь по задачам
  • Цены
Сообщество
  • Пользователи
  • Статьи
  • Форум
  • Чат
  • Истории успеха
  • Активности
Компания
  • О нас
  • Контакты
  • Отзывы
  • FAQ
  • Поддержка
JavaRushJavaRush — это интерактивный онлайн-курс по изучению Java-программирования c нуля. Он содержит 1200 практических задач с проверкой решения в один клик, необходимый минимум теории по основам Java и мотивирующие фишки, которые помогут пройти курс до конца: игры, опросы, интересные проекты и статьи об эффективном обучении и карьере Java‑девелопера.
Подписывайтесь
Язык интерфейса
Русский
English Українська
"Программистами не рождаются" © 2026 JavaRush
MastercardVisa
"Программистами не рождаются" © 2026 JavaRush