Форум программистов, компьютерный форум, киберфорум
Java для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.97/34: Рейтинг темы: голосов - 34, средняя оценка - 4.97
0 / 0 / 0
Регистрация: 09.05.2022
Сообщений: 21

Простейшая задача на цикл. Не работает break

12.05.2022, 00:41. Показов 7515. Ответов 8

Студворк — интернет-сервис помощи студентам
Не могу решить простейшую задачу:

В одном из первых уроков про циклы вы запустили ракету SpaceY в космос. Сейчас она бесконечно летает по орбите. Чтобы прервать её полет и вернуть на Землю, пилоту нужно ввести секретный код — случайное число от 0 до 100. Проблема в том, что этот код автоматически обновляется в штабе на Земле каждый раз, когда ракета сделала полный круг, а связь потеряна. Пилоту ничего не остаётся, кроме как пытаться отгадать код. Допишите программу таким образом, чтобы, когда пилот отгадает код, полёт ракеты прервался, и он смог полететь домой.
Результат работы программы должен быть таким:
Ракета SpaceY на орбите!
Ракета SpaceY на орбите!
Ракета SpaceY на орбите!
Ракета SpaceY на орбите!
...
Пилот угадал число! Летим домой!


Исходный код:

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
import java.util.Random;
 
class Praktikum {
    public static void main(String[] args) {
        Random random = new Random(); // Генерирует случайное число
        int secretCode;
        int pilotInput;
                
        // Добавьте цикл - ракета летает бесконечно
        secretCode = random.nextInt(100); // Здесь задаётся код - случайное число от 0 до 100
        System.out.println("Ракета SpaceY на орбите!");
        pilotInput = random.nextInt(100); // Пилот пытается угадать код
        
        if (...) { // Если пилот угадал код, то цикл должен завершиться
            System.out.println("Пилот угадал число! Летим домой!");
            ...
        }
        
    }
}
Подсказка к решению:

Условие бесконечного цикла ракеты должно быть всегда истинно.
Выход из цикла произойдёт, только если пилот угадал секретный код secretCode == pilotInput .
Для завершения цикла используйте break .



Вот мой кривой код:

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
import java.util.Random;
 
class Praktikum {
    public static void main(String[] args) {
        Random random = new Random(); // Генерирует случайное число
        int secretCode;
        int pilotInput;
                
        
        // Добавьте цикл - ракета летает бесконечно
        secretCode = random.nextInt(100); // Здесь задаётся код - случайное число от 0 до 100
        pilotInput = random.nextInt(100); // Пилот пытается угадать код
        
        while (secretCode != pilotInput) {
        System.out.println("Ракета SpaceY на орбите!");
        
        if (secretCode == pilotInput) { 
            // Если пилот угадал код, то цикл должен завершиться
            break;
            }
           }
            System.out.println("Пилот угадал число! Летим домой!");
             
    }
}
Вывод:

Задача прошла 0/2 проверок

Возможные проблемы:
- Неправильное поведение при мгновенном угадывании
- Неправильное условие выхода


При попытке запустить выдает:
Ракета SpaceY на орбите!
Ракета SpaceY на орбите!
Ракета SpaceY на орбите!
Ракета SpaceY на орбите!

и так до бесконечности...

Если я правильно понимаю, не происходит выхода из цикла. Но вроде я всё делаю по шаблону, всё как в похожих примерах, всё как у людей. Но у них работает, а у меня нет.

Заранее благодарю за помощь.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
12.05.2022, 00:41
Ответы с готовыми решениями:

Простейшая задача на цикл
Имеется кусок ткани длинной M метров. От него последовательно отрезаются куски равной длины. Все данные по использованию ткани заносятся в...

Почему так работает? Цикл while + break
Доброго времени суток! Идея такова, читается файл построчно, пока не кончится. Вот код который получил методом проб и ошибок. while...

Цикл do.while и break
Задача: написать программу, которая принимает от пользователя 10 int чисел, затем выводит их в строку, находит среднее значение. Так же...

8
Эксперт Java
3639 / 2971 / 918
Регистрация: 05.07.2013
Сообщений: 14,220
12.05.2022, 00:56
у теяб внутри цикла переменные не меняются. Если бы ты включил дебаггер, ты бы это и без меня увидел
0
0 / 0 / 0
Регистрация: 09.05.2022
Сообщений: 21
12.05.2022, 04:25  [ТС]
А как их поменять. Просто в цикл добавить
secretCode = random.nextInt(100);
pilotInput = random.nextInt(100); ?

Я делал так, но всё равно выдавало ошибки.

Вот сейчас сделал так:

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
import java.util.Random;
 
class Praktikum {
    public static void main(String[] args) {
        Random random = new Random(); // Генерирует случайное число
        int secretCode;
        int pilotInput;
                
        
        // Добавьте цикл - ракета летает бесконечно
        secretCode = random.nextInt(100); // Здесь задаётся код - случайное число от 0 до 100
        pilotInput = random.nextInt(100); // Пилот пытается угадать код
        
        while (secretCode != pilotInput) {
        System.out.println("Ракета SpaceY на орбите!");
            
        secretCode = random.nextInt(100);
        pilotInput = random.nextInt(100);
        if (secretCode == pilotInput) { 
            // Если пилот угадал код, то цикл должен завершиться
            break;
            }
           }
            System.out.println("Пилот угадал число! Летим домой!");
             
    }
}
Всё равно бесконечно печатает: Ракета SpaceY на орбите!

Добавлено через 3 часа 11 минут
Судя по условиям задачи вместо while нужно if использовать. Сделал так:

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
import java.util.Random;
 
class Praktikum {
    public static void main(String[] args) {
        Random random = new Random(); // Генерирует случайное число
        int secretCode;
        int pilotInput;
                
        // Добавьте цикл - ракета летает бесконечно
        secretCode = random.nextInt(100); // Здесь задаётся код - случайное число от 0 до 100
        System.out.println("Ракета SpaceY на орбите!");
        pilotInput = random.nextInt(100); // Пилот пытается угадать код
        
        if (secretCode == pilotInput) { // Если пилот угадал код, то цикл должен завершиться
        break;
        }
        System.out.println("Пилот угадал число! Летим домой!"); 
    }
}
Вывод

Ошибка компиляции:
/sandbox/submission/Praktikum.java:18: error: break outside switch or loop
break;
^
1 error

Failed compilation
0
2282 / 1598 / 400
Регистрация: 26.06.2017
Сообщений: 4,732
Записей в блоге: 1
12.05.2022, 08:36
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
import java.util.Random;
 
class Praktikum {
    public static void main(String[] args) {
        Random random = new Random(); // Генерирует случайное число
        int secretCode;
        int pilotInput;
                
        secretCode = random.nextInt(100); // Здесь задаётся код - случайное число от 0 до 100
        
        while (true) {
            System.out.println("Ракета SpaceY на орбите!");
            
            pilotInput = random.nextInt(100); // Пилот пытается угадать код
            if (secretCode == pilotInput) { // Если пилот угадал код, то цикл должен завершиться
                System.out.println("Пилот угадал число! Летим домой!");
                break;
            }
        }
    }
}
0
0 / 0 / 0
Регистрация: 09.05.2022
Сообщений: 21
12.05.2022, 16:13  [ТС]
Большое спасибо за подсказку. Я вообще не знал, что можно просто написать while (true), думал, что в скобках надо обязательно прописывать какое-то условие. Однако программа всё равно ругается, хотя вроде все надписи выводит как над. Вот что пишет:


Вывод

Число слов в правильном выводе больше, чем в вашем
Ожидалось ракета. Выводится пилот
Ожидалось spacey. Выводится угадал
Ожидалось на. Выводится число
Ожидалось орбите. Выводится летим
Ожидалось ракета. Выводится домой

Задача прошла 1/2 проверок

Возможные проблемы:
- Неправильное условие выхода


Добавлено через 55 минут
Вот что мне ещё подсказали:

Переменную secretCode​ со значением случайного числа нужно перенести внутрь цикла, перед выводом фразы "Ракета SpaceY на орбите!"​. Поправьте эту строку и всё получится.

Перенёс строку и всё получилось. Правда логики этого переноса я так и не понял. Ну может пойму позже... когда-нибудь.
0
0 / 0 / 0
Регистрация: 26.12.2022
Сообщений: 1
26.12.2022, 16:54
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
import java.util.Random;
 
class Praktikum {
    public static void main(String[] args) {
        Random random = new Random(); // Генерирует случайное число
        int secretCode;
        int pilotInput;
                
        while (true) {// Добавьте цикл - ракета летает бесконечно
        secretCode = random.nextInt(100); // Здесь задаётся код - случайное число от 0 до 100
        System.out.println("Ракета SpaceY на орбите!");
        pilotInput = random.nextInt(100); // Пилот пытается угадать код
        
        if (secretCode == pilotInput) { // Если пилот угадал код, то цикл должен завершиться
            System.out.println("Пилот угадал число! Летим домой!");
            break;
        }
        }
    }
}
0
 Аватар для vvm28
771 / 539 / 67
Регистрация: 22.12.2013
Сообщений: 2,498
Записей в блоге: 26
26.12.2022, 17:33
У вас в коде два противоречащих условия


Цитата Сообщение от java1 Посмотреть сообщение
while (secretCode != pilotInput)
// в этом месте цикл не начнет выполнение при
Java
1
(secretCode == pilotInput)
Это значит что условие в дальнейшем не выполнится, если не предпринять дополнительных мер.
Например изменение значение одной из переменной.



Цитата Сообщение от java1 Посмотреть сообщение
if (secretCode == pilotInput)
0
0 / 0 / 0
Регистрация: 13.08.2023
Сообщений: 1
13.08.2023, 18:01
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
import java.util.Random;
 
class Praktikum {
    public static void main(String[] args) {
        Random random = new Random(); // Генерирует случайное число
        int secretCode;
        int pilotInput;
                
        while (true) { // Добавьте цикл - ракета летает бесконечно
        secretCode = random.nextInt(100); // Здесь задаётся код - случайное число от 0 до 100
        System.out.println("Ракета SpaceY на орбите!");
        
        pilotInput = random.nextInt(100); // Пилот пытается угадать код
        
        if (pilotInput == secretCode) { // Если пилот угадал код, то цикл должен завершиться
            System.out.println("Пилот угадал число! Летим домой!");
            break;
        }
        }
    }
}
0
22 / 14 / 8
Регистрация: 30.03.2020
Сообщений: 86
18.08.2023, 08:00
Цитата Сообщение от java1 Посмотреть сообщение
secretCode = random.nextInt(100);
pilotInput = random.nextInt(100);
зачем вы в цикле меняете secretCode если вам просто надо поменять pilotInput ? это же 10 000 комбинаций )
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
18.08.2023, 08:00
Помогаю со студенческими работами здесь

цикл и break
помогите пожалуйста. Вот задача: Вычислить сумму всех чисел, введенных с клавиатуры до первого отрицательного. Использовать break. ...

Break не останавливает цикл
Здравствуйте! У меня возникла такая проблема - в этом коде break не хочет выходить из цикла, если ему попадается строка "}"....

Цикл for и оператор break
Привет всем. Задание такое я должен вводить элементы массива. Если ввод неправильный (т.е. не число ) то я должен сохранить индекс...

Цикл for и оператор break
Привет всем. Задане такое я должен вводить элементы массива. Если ввод неправильный (т.е. не число ) то я должен сохранить индекс этого...

break не завершает цикл
{ if ($aaa) break; $aaa = 'blablabla'; } while ($aaa); Собственно. Этот цикл должен завершиться на второй итерации. Но он не...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru