JavaRush
AI Academy
new
Акция
Университет
Java FullStack
Python FullStack
AI Native Developer
new
Web FullStack
Обучение
Курсы
Задачи
Опросы
Игры
Помощь
График пинков
Стажировка
Сообщество
Пользователи
Форум
Чат
Статьи
Истории успеха
Активности
Отзывы
Подписки
Светлая тема
Вопрос
  • Отзывы
  • О нас
  • CS50
Начать
Начать обучение
Начать обучение
  • Все вопросы
JavaRush/Помощь по Java задачам/Ребят, подскажите почему такое вот решение не компилирует...
Igor Levin
10 уровень
  • 17.11.2021
  • 491просмотров
  • 9комментариев

Ребят, подскажите почему такое вот решение не компилируется? Я понимаю, что сюда нужно условие с null добавить, т.к. в этой задаче вроде бы условие раньше другое было и решение не успели поменять. Но почему такой вот вариант не принимается InteljIdea? Жалуется на предпоследнюю скобку и ничего не пом

Вопрос по задаче Magic 8 ball
Java Syntax,  9 уровень,  2 лекция
Обсуждается


В этой задаче тебе предстоит реализовать метод getPrediction() в классе MagicBall, который будет работать как шар предсказаний.
Он случайным образом возвращает фразу-ответ на заданный вопрос. В методе getPrediction() нужно использовать метод nextInt(int) класса Random, который должен возвращать значения от 0 до 7 включительно.
В зависимости от результата работы метода nextInt(int) возвращается один из вариантов ответа:
0 -> Бесспорно
1 -> Определённо да
2 -> Вероятнее всего
3 -> Хорошие перспективы
4 -> Спроси позже
5 -> Попробуй снова
6 -> Мой ответ — нет
7 -> Весьма сомнительно
Иначе вернуть null.

Требования:
  • Реализуй метод getPrediction() согласно условию.
.....
package com.javarush.task.pro.task08.task0805; import java.util.Random; public class MagicBall { private static final String CERTAIN = "Бесспорно"; private static final String DEFINITELY = "Определённо да"; private static final String MOST_LIKELY = "Вероятнее всего"; private static final String OUTLOOK_GOOD = "Хорошие перспективы"; private static final String ASK_AGAIN_LATER = "Спроси позже"; private static final String TRY_AGAIN = "Попробуй снова"; private static final String NO = "Мой ответ — нет"; private static final String VERY_DOUBTFUL = "Весьма сомнительно"; public static String getPrediction() { Random funny = new Random(); int rand = funny.nextInt(8); if (rand == 0) return CERTAIN; if (rand == 1) return DEFINITELY; if (rand == 2) return MOST_LIKELY; if (rand == 3) return OUTLOOK_GOOD; if (rand == 4) return ASK_AGAIN_LATER; if (rand == 5) return TRY_AGAIN; if (rand == 6) return NO; if (rand == 7) return VERY_DOUBTFUL; } }
0
Комментарии (9)
  • популярные
  • новые
  • старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
H.D.S.
Уровень 11
18 ноября 2021, 07:00
Решение через массив выглядит красивее. В этой задаче валидатор не примет решения без проверки на выход числа из диапазона 0 - 7 и возвращения при этом null
0
Стас ПасинковSoftware Developer в ZipyMaster
18 ноября 2021, 09:36
попытался представить как число может выйти за диапазон [0..7] у меня не вышло :) здесь же не передается никакой параметр в метод. как валидатор тогда сможет что-то проверить?
0
H.D.S.
Уровень 11
22 ноября 2021, 05:11
if (rand < 0 || rand > 7)
0
Стас ПасинковSoftware Developer в ZipyMaster
22 ноября 2021, 16:07
я о другом :) о том, как вызов метода nextInt() с параметром 8 может вернуть число вне диапазона [0..7]
Random funny = new Random();
int rand = funny.nextInt(8);
0
Грицуник Андрей
Уровень 50
17 ноября 2021, 19:07
InteljIdea такое не пропустит. Для него нет гарантии, что метод getPrediction() всегда вернет String, так как не написано что будет и что возвращать, если rand равен чему-то кроме 0-7. А вдруг funny.nextInt(8) вернет не то, что ты ожидаешь? Может баг какой в методе всплыл? InteljIdea об этом думает. Точнее он не может знать, что funny.nextInt(8) должен возвращать числа от 0 до 7. Зато он точно знает, что если метод возвращает String, то он должен вернуть String при любых раскладах, либо null, либо выбросить исключение.
+2
Стас ПасинковSoftware Developer в ZipyMaster
18 ноября 2021, 02:32
в данном случае идея пляшет под дудку джава-компилятора :) я к тому, что если написать такой код не в идее, а в блокноте, а потом попытаться его скомпилировать - то тоже ничего не выйдет, хоть и идея тут не участвовала :)
0
Igor LevinQA Engineer в Ай-Теко
18 ноября 2021, 06:32
Спасибо, за грамотное объяснение, в целом логику работы я понял. Я просто, думал что когда мы объявляем метод "public static String getPrediction()", то в этот момент уже, создаётся переменная String со значением по умолчанию "null", а дальше в самом теле мы уже присваиваем этой переменной исключения. И если нужного нам исключения не нашлось, то остаётся значение "null". Это не правильный ход мыслей?
0
Стас ПасинковSoftware Developer в ZipyMaster
18 ноября 2021, 09:34
нет, методы так не работают. если хотите чтобы ваш метод в каких-то ситуациях возвращал null (например, во всех, которые вы не описали) - то так и придется написать :) return null в нужном месте. автоматически этого не происходит. и это хорошо, потому что это помогает избавиться от ошибки еще в момент написания кода/компиляции. а не тогда, когда вы ваш код залили на прод, а тут вдруг начало массово сыпаться NullPointerException где-то, где его вообще не ждали :)
0
Igor LevinQA Engineer в Ай-Теко
18 ноября 2021, 16:40
класс, спасибо за объяснение. Всё понятно)
0
Обучение
  • Курсы программирования
  • Регистрация
  • Курс Java
  • Помощь по задачам
  • Цены
Сообщество
  • Пользователи
  • Статьи
  • Форум
  • Чат
  • Истории успеха
  • Активности
Компания
  • О нас
  • Контакты
  • Отзывы
  • FAQ
  • Поддержка
JavaRushJavaRush — это интерактивный онлайн-курс по изучению Java-программирования c нуля. Он содержит 1200 практических задач с проверкой решения в один клик, необходимый минимум теории по основам Java и мотивирующие фишки, которые помогут пройти курс до конца: игры, опросы, интересные проекты и статьи об эффективном обучении и карьере Java‑девелопера.
Подписывайтесь
Язык интерфейса
Русский
English Українська
"Программистами не рождаются" © 2026 JavaRush
MastercardVisa
"Программистами не рождаются" © 2026 JavaRush