Как превратить String в double?
Пока с клавиатуры вводится 2.5, программа компилируется, но выдает кучу текста об ошибке, как я поняла, моя строка конвертируется в целое число, а как конвертировать в десятичные дроби в лекциях вроде нигде не было. Ну и второй вопрос — на целом числе условие выполнилось, но ни один пункт задачи не прошел валидацию, как так?
Дерево классов
Работа светофора для пешеходов запрограммирована следующим образом:
в начале каждого часа в течение трех минут горит зелёный сигнал,
затем в течение одной минуты — жёлтый ,
а потом в течение одной минуты — красный ,
затем опять зелёный горит три минуты и т. д.
Ввести с клавиатуры вещественное число t , означающее время в минутах, прошедшее с начала очередного часа.
Определить, сигнал какого цвета горит для пешеходов в этот момент.
Результат вывести на экран в следующем виде:
«зелёный» — если горит зелёный цвет,
«жёлтый» — если горит жёлтый цвет,
«красный» — если горит красный цвет.
Пример для числа 2.5 :
зелёный
Пример для числа 3 :
жёлтый
Пример для числа 4 :
красный
Пример для числа 5 :
зелёный
Требования:
Программа должна считывать вещественное число c клавиатуры.
Программа должна выводить текст на экран.
Если горит зелёный цвет, необходимо вывести текст: «зелёный»
Если горит жёлтый цвет, необходимо вывести текст: «жёлтый»
Если горит красный цвет, необходимо вывести текст: «красный»
Solution.java
- Solution.java
Комментарии (3)
- популярные
- новые
- старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
Justinian Judge в Mega City One Master
16 июня 2019, 21:02
Integer.parseInt(s); превращаем в инт. Double.parseDouble(s) превращаем в double Также обрати внимание на эту строку в условиях: Ввести с клавиатуры вещественное число t, означающее время в минутах, прошедшее с начала очередного часа. то есть на вход может податься 38.989 или 41.4353.
16 июня 2019, 21:06
Окей, и как с ним быть? В лекциях этого не было, и видимо уже не будет. Валидатор не принимает пункты «выводить на экран», но ведь на экран как раз выводится. Не понимаю.
Justinian Judge в Mega City One Master
16 июня 2019, 21:32
Лекции это ориентир. Они никогда не покроют все, я рекомендую к нетривиальным/сложным/интересным задачам смотреть раздел Обсуждение задачи (после того как уже задача решена, чтобы не подсматривать готовое), также пролистывать комментарии к каждой лекции, включая лекции с задачами, там много и дополнительных ссылок дают на допматериалы, объясняют нюансы. Ну и гуглить, джава раш это практический курс, учеба очень сильно напоминает работу программиста, даже самые опытные с которых приходят на работу и получают такую же задачу, которую без понятия как решать, теорию по ней они не знают, и что делать? Гуглить, искать ответы, это то что программист делает минимум половину своего рабочего времени, процентов 40% гуглит, 40% читает чужой код, 20% от силы пишет свой. То что вещественные числа это double в лекциях было. Вводим в гугл double from string java, и сразу же ответ — даже открывать ссылки не нужно. Этот скилл жизненно необходим, его нужно развивать. Специфицика ИТ в том, что нельзя знать все, это невозможно. Работать с тем, что никому не известно, что не изучалось, это абсолютная норма и серые будни, к этому состоянию нужно просто привыкнуть. Как к воде. А фокусироваться на том, чтобы добыть результат. Программист это не человек который знает все, этот тот кто не боится не знать. А по задаче, у нас фактически пятиминутный цикл, какое бы мы число не ввели, если его разделить на 5, остаток будет нашим циклом от 0 к 5. Детальней: Оператор деления по модулю — Джава Раш то есть условно double d = Double.parseDouble(d); double time = d % 5; на выходе у нас будет число от 0 до 4.999 в периоде. И мы уже работаем согласно условиям
- Курсы программирования
- Регистрация
- Курс Java
- Помощь по задачам
- Цены
- Задачи-игры
Сообщество
JavaRush — это интерактивный онлайн-курс по изучению Java-программирования c нуля. Он содержит 1200 практических задач с проверкой решения в один клик, необходимый минимум теории по основам Java и мотивирующие фишки, которые помогут пройти курс до конца: игры, опросы, интересные проекты и статьи об эффективном обучении и карьере Java‑девелопера.
Преобразование (приведение)типов
Java объектно- ориентированный язык программирования, все что в java имеется представлено объектами. В java также имеются восемь примитивных типов, которые не являются объектами. Для этих типов существует соответствующие классы оболочки, предназначенные для создания объектов, преобразования итд, при работе с классами. Сейчас мы рассмотрим подробно преобразование и привидение типов.
(Integer, Double, Short, Byte,Long, Float, BigDecimal, BigInteger) Все эти классы имеют статические методы к примеру преобразования типа String к соответствующему типу.
Преобразовать String в int.
String str = «1» ;
int i = Integer . parseInt ( str ) ;
Преобразовать String в double.
Преобразование типа String в double
String str = «1» ;
double d = Double . parseDouble ( str ) ;
Преобразовать String в short.
Преобразовать String в short.
String str = «1» ;
short s = Short . parseShort ( str ) ;
Преобразовать String в byte.
Преобразовать String в Byte.
String str = «1» ;
byte b = Byte . parseByte ( str ) ;
Преобразовать String в long.
Преобразовать String в long.
String str = «1» ;
long l = Long . parseLong ( str ) ;
Преобразовать String в float.
Преобразовать String в int.
String str = «1» ;
float f = Float . parseFloat ( str ) ;
Преобразовать String и другие типы в char.
Это операция не возможна, так как в char хранится лишь один символ, и в него не возможно впихнуть строку или число. Однако, можно строку поместить в массив символов char, или разбить строку на символы и присвоить в переменную char по индексу символ из строки.
String str = «123» ;
char [ ] cs = str . toCharArray ( ) ; //пример с массивом
char c = str . charAt ( 0 ) ; //присваиваем переменной с символ 1
Не много отойдем от темы, если вы помните то в java строки можно было соединять(конкатенировать), используя оператор + листинг 1.1.
Пример объединения строк типа String
String a = «nookery» ;
String b = «.ru» ;
Однако, использование оператора «+» в конкатенации строк внутри java генерирует другой код в место a=a+b;листинг 1.2
Пример объединения строк типа String
String a = «nookery» ;
String b = «.ru» ;
a = new StringBuilder ( ) . append ( a ) . append ( b ) . toString ( ) ;
Но так было не всегда, использования оператора + в конкатенации строк стало возможным только с java 5.0
Теперь мы рассмотрим всевозможные приведения типа int в другие типы, в java
Преобразовать int в double.
Явного приведения int к double не имеет смысла, так как мы знаем, что диапазон чисел int в легкую вместится в double, достаточно использовать оператор присвоения ==.
Преобразовать int в short.
Преобразовать int в short.
short s = ( short ) i ;
Преобразовать int в byte.
Преобразовать int в Byte.
byte b = ( byte ) i ;
Преобразовать int в long.
Явного приведения int к long не имеет смысла, так как мы знаем, что диапазон чисел int в легкую вместится в long, достаточно использовать оператор присвоения ==.
Преобразовать int в float.
Явного приведения int к float как и в случаи double не имеет смысла, так как мы знаем, что диапазон чисел int в легкую вместится в float, достаточно использовать оператор присвоения ==.
Преобразовать int в String.
Преобразование типов в Java
Преобразование типов — это тема, которая может показаться сложной начинающим программировать на Java. Однако, заверим Вас, на самом деле всё просто. Главное понять по каким законам происходит взаимодействие между переменными и помнить об этом при написании программ. Итак, давайте разбираться.
В Java существует 2 типа преобразований — картинка Вам в помощь:

Напомним, что вся «Вселенная Java» состоит из:
- примитивных типов (byte, short, int, long, char, float, double, boolean)
- объектов
В данной статье мы:
- рассмотрим преобразование типов для примитивных типов переменных
- преобразование объектов (String, Scanner и др.) в этой статье не рассматривается, поскольку с объектами происходит отдельная «магия» — это тема для отдельной статьи.
Автоматическое преобразование
Ну, что ж, давайте попробуем разобраться что такое «автоматическое преобразование».
Помните, когда мы рассматривали типы переменных (в статье «Переменные в Java. Создание переменной»), мы говорили, что переменная — это некоторый «контейнер» , в котором может храниться значение для дальнейшего использования в программе. Также мы говорили о том, что каждый тип переменной имеет свой диапазон допустимых значений и объем занимаемой памяти. Вот она табличка, где это все было расписано:

Так вот, к чему мы, собственно говоря, клоним. К тому, что совсем не просто так Вам давались диапазоны допустимых значений и объем занимаемой памяти
Давайте, сравним, например:
1. byte и short. byte имеет меньший диапазон допустимых значений, чем short. То есть byte это как бы коробочка поменьше, а short — это коробочка побольше. И значит, мы можем byte вложить в short.
2. byte и int . byte имеет меньший диапазон допустимых значений, чем int. То есть byte это как бы коробочка поменьше, а int — это коробочка побольше. И значит, мы можем byte вложить в int.
3. int и long. int имеет меньший диапазон допустимых значений, чем long. То есть int это как бы коробочка поменьше, а long — это коробочка побольше. И значит, мы можем int вложить в long.

Это и есть пример автоматического преобразования. Это можно схематически изобразить в виде вот такой картинки:

Давайте рассмотрим как это работает на практике.
Пример №1
Код №1 — если Вы запустите это код на своем компьютере, в консоли будет выведено число 15
Преобразовать строку в двойную в Java
В этом руководстве мы рассмотрим множество способов преобразования строки в двойную в Java.
2. Двойной.parseDouble
Мы можем преобразовать строку в двойную , используя функцию Double. Метод parseDouble :
assertEquals(1.23, Double.parseDouble("1.23"), 0.000001);
3. Двойное.значениеOf
Точно так же мы можем преобразовать String в упакованный Double , используя метод Double.valueOf :
assertEquals(1.23, Double.valueOf("1.23"), 0.000001);
Обратите внимание, что возвращаемое значение Double.valueOf представляет собой упакованный Double . Начиная с Java 5, этот упакованный Double преобразуется компилятором в примитивный double , где это необходимо.
В общем, мы должны предпочесть Double.parseDouble, так как он не требует от компилятора автоматической распаковки.
4. ДесятичныйФормат.parse
Когда строка , представляющая двойное число, имеет более сложный формат, мы можем использовать DecimalFormat .
Например, мы можем преобразовать десятичное значение валюты, не удаляя нечисловые символы:
DecimalFormat format = new DecimalFormat("\u00A4#,##0.00"); format.setParseBigDecimal(true); BigDecimal decimal = (BigDecimal) format.parse("-$1,000.57"); assertEquals(-1000.57, decimal.doubleValue(), 0.000001);
Подобно Double.valueOf , метод DecimalFormat.parse возвращает число , которое мы можем преобразовать в примитивное значение типа double с помощью метода doubleValue . Кроме того, мы используем метод setParseBigDecimal , чтобы заставить DecimalFormat.parse вернуть BigDecimal .
Обычно DecimalFormat является более продвинутым, чем нам требуется, поэтому вместо этого мы должны отдавать предпочтение Double.parseDouble или Double.valueOf .
Чтобы узнать больше о DecimalFormat , ознакомьтесь с практическим руководством по DecimalFormat .
5. Недействительные преобразования
Java предоставляет единый интерфейс для обработки недопустимых числовых строк s.
Примечательно, что Double.parseDouble , Double.valueOf и DecimalFormat.parse генерируют исключение NullPointerException, когда мы передаем значение null.
Аналогично, Double.parseDouble и Double.valueOf генерируют исключение NumberFormatException, когда мы передаем недопустимую строку, которая не может быть проанализирована как двойная (например, & ).
Наконец, DecimalFormat.parse генерирует исключение ParseException , когда мы передаем недопустимую строку.
6. Избегайте устаревших конверсий
До Java 9 мы могли создать упакованный Double из String , создав экземпляр Double :
new Double("1.23");
Начиная с версии 9, этот метод официально признан устаревшим в Java.
7. Заключение
В заключение, Java предоставляет нам несколько методов для преобразования String в значения типа double .
Как правило, мы рекомендуем использовать Double.parseDouble , если не требуется упакованный Double .
Исходный код этой статьи, включая примеры, можно найти на GitHub .