- Я использую Java, а мой оператор while не работает
- простая программа на Java не работает — цикл while
- 6 ответов
- Почему не работает цикл while в java?
- Циклы в Java – как создать и прервать
- Вложенные циклы Java
- Cоздание объектов в цикле Java
- Как выйти из цикла Java
- Бесконечный цикл Java
- Вложенные циклы Java
- Cоздание объектов в цикле Java
- Как выйти из цикла Java
- Бесконечный цикл Java
Я использую Java, а мой оператор while не работает
Если вы вводите неверное значение, оно предлагает ввести нужную сумму, но после ввода нужной или неправильной суммы она просто заканчивает программу. Извините, я должен был упомянуть ранее, что программа продолжается 12 месяцев. Моя проблема заключается в том, что как только мне будет предложено ввести правильную сумму за любой месяц после того, как я введу неправильную сумму, программа берет мой ответ и заканчивает, вместо того, чтобы правильно ответить и перейти к следующему месяцу.
Возможно, что-то подобное вам нужно. do — это то, что вас путают, потому что если первый вход соответствует вашему условию, циклы все равно будут возникать хотя бы один раз. Просто используйте while цикл
Изменение: Запуск кода
Ваш код полностью корректен, чтобы «просто закончить программу», потому что нет других строк кода для выполнения!
Первым сделать в то время как цикл будет принимать входной сигнал и сохранить его в переменной month1 , а затем проверить, если он находится в пределах от 0 и 10000 . Если это так, он выйдет из цикла, иначе он будет запускать цикл снова и снова, пока вы не введете значение от 0 до 10000 . Затем второй цикл будет делать то же самое с переменной month2 .
После сохранения как переменные, программа завершится, ничего не делая, потому что нет строк кода для выполнения. После этого вам нужно будет написать несколько строк кода, чтобы что-то сделать.
PS Кроме того, это хорошая практика, чтобы окружить nextInt() блоком try-catch, потому что ввод нечислового значения приведет к сбою программы.
Источник
простая программа на Java не работает — цикл while
Итак, я новичок в программировании и работаю над простой учебной программой, которая находит порядок букв в алфавите. Это должно было быть довольно просто . но по какой-то причине я получаю исключение StringIndexOutOfBoundsException, когда добавляю цикл while. Таким образом, программа делает то, что должна в первый раз . но не позволяет мне тестировать снова без повторного запуска программы. Я тестировал цикл while, используя внутри только простой оператор печати, и он работал, поэтому я не понимаю, почему цикл while не работает с моей алфавитной программой.
Любая помощь будет принята с благодарностью!
6 ответов
Когда вы нажимаете Enter для исходного символа, эта новая строка все еще находится в буфере, поскольку вы вызываете только read () и получаете только 1 символ, оставляя новую строку в буфере после нажатия Enter. Поэтому, когда вы вызываете readLine, он просто попадает в новую строку и возвращает пустую строку.
Вы можете проверить это, набрав что-то с более чем одним символом, когда он сначала запрашивает у вас символ, и он перейдет во второй цикл, поскольку readLine вернет непустую строку.
Чтобы исправить это изменение, ваш исходный read () для readLine (), чтобы он получал новую строку, вызванную вашим нажатием Enter, а затем просто возьмите первый символ из строки.
Это должно исправить это:
Позволит избежать исключения.
Единственное место, где вы получаете доступ к строковому индексу, — это if (response.charAt(0) == ‘n’) , так что это, скорее всего, ваша проблемная область.
Должен сделать свое дело.
Редактировать: Как указывает @TreySchroeder, есть еще одна проблема с вашей программой в том, что вы сначала не читаете всю строку. Поместите in.readLine(); после начального theLetter = (char) in.read(); и используйте это исправление для решения другой проблемы.
Бьюсь об заклад, виновник в том, что вы нажимаете «ввод» в ответ на приглашение want to play again? . in.readLine(); возвращает строку без завершающей новой строки (см. javadocs ), что означает, что если вы нажмете только» ввод «, он вернет пустую строку, таким образом, StringOutOfBoundException при проверке первого символа.
Перед проверкой символа проверьте наличие пустой строки:
Длина response null или «» ? в противном случае вы не сможете получить char по индексу 0
Если строка пуста «» , в позиции 0 не будет символа. Проверьте его перед выполнением charAt()
Источник
Почему не работает цикл while в java?
Помогите, пожалуйста, с циклом.
Только начал учить.
Читал, гуглил всё равно не понимаю.
Говорит «java: not a statement»
- Вопрос задан более года назад
- 401 просмотр
Почему блок else не срабатывает?
Спасибо.
int beerNum = 99;
String word = «бутылок (бутылки)»;
while (beerNum > 0)<
if (beerNum == 1) <
word = «бутылка»;
>
if (beerNum > 0) <
System.out.println(beerNum + » » + word + » пива на стене»);
System.out.println(beerNum + » » + word + » пива.»);
System.out.println(«Возьми одну.»);
System.out.println(«Пусти по кругу.»);
beerNum = beerNum — 1;
>
else <
System.out.println(«Нет бутылок пива на стене»);
> // конец else
> // конец цикла while
> // конец метода main
> // конец класса
Вот так правильно работает , кому интересно.
public class Main <
public static void main(String[] args) <
// write your code here
int beerNum = 99;
String word = «бутылок (бутылки)»;
while (beerNum > 0)<
if (beerNum == 1) <
word = «бутылка»;
>
if (beerNum > 0) <
System.out.println(beerNum + » » + word + » пива на стене»);
System.out.println(beerNum + » » + word + » пива.»);
System.out.println(«Возьми одну.»);
System.out.println(«Пусти по кругу.»);
beerNum = beerNum — 1;
>
if (beerNum == 0) <
System.out.println(«Нет бутылок пива на стене»);
> // конец if
> // конец цикла while
> // конец метода main
> // конец класса
Такая конструкция неверна.
else (beerNum
Либо else < . >
Либо else if (условие)
Дмитрий,
я посмотрел ваш код:
В вашем коде вы проверяете условие для beerNum используя:
вместо этого лучше использовать:
Далее у вас есть проблема в реализации кода, а именно:
Давайте попробуем простыми словами проговорить то, что вы написали в коде:
Пока beerNum БОЛЬШЕ 0 нужно итерировать по циклу.
А далее внутри цикла вы проверяете:
Если beerNum РАВНО 0, то нужно вывести сообщение.
Это условие никогда не выполнится, так как если beerNum будет равнятся 0, то он выйдет из цикла, так как у вас цикл while выполняется, пока beerNum БОЛЬШЕ 0.
А затем еще одна проверка:
Если beerNum БОЛЬШЕ 0, то нужно вывести сообщение.
Это условие тоже ненужное, так у вас в любом случае beerNum БОЛЬШЕ нуля и если каким-то чудом он станет меньше 0, то опять-таки в цикл не попадем, так как условие в цикле выполнится пока beerNum БОЛЬШЕ 0.
Возможно, что если вы подскажете чего желаете реализовать, то я мог бы подсказать как это лучше сделать. Но так как вы изучаете разработку на java, то экспериментируйте и не бойтесь ошибится.
Спасибо большое! Всё понятным языком.
Это первое задание книги head first java
Ещё раз проверил — именно этот код работает (что удивительно, ведь я полностью понял и согласен с тем , что вы написали)
А если убрать условие if (beerNum > 0) то перестаёт работать.
Если убрать if (beerNum == 0) то тоже не работает , если вместо этого вставить else if тоже не работает.
Как такое может быть?
Дмитрий,
учтите, что в книге K.Sierra — Head first java могут быть ошибки в коде, которые могли возникнуть при переводе. Сам несколько раз натыкался на это.
Да и этот код, если написан в книге, то написан не очень.
Попробуйте лучше книгу Г. Шилдт — Руководство по Java для начинающих.
А затем уже прочитайте книгу Г. Шилдт — Полное руководство по Java
Для решения задач можете использовать — https://www.hackerrank.com
+ в коде показан плохой пример склонения слова «бутылка».
1 бутылка
а дальше почему-то решили забить на
2 бутылки, 3 бутылки, 10 бутылок и т.д. и просто выводя слово бутылок (бутылки) вместо того, чтобы нормально склонять
Дмитрий,
Вот, тот же код, но с учетом правильного склонения слова «бутылка».
Источник
Циклы в Java – как создать и прервать
Цикл — это блок команд, который выполняется снова и снова, пока соблюдается определённое условие. Повторяемый фрагмент кода называют «телом цикла». Одно выполнение тела цикла называют итерацией.
В Яве можно работать с циклами нескольких типов — для этого есть следующие операторы:
while – цикл с предусловием – сначала проверяем условие, затем выполняем тело цикла;
do… while – цикл с постусловием – сначала выполняем один раз тело цикла, затем проверяем условие и, если оно соблюдается, продолжаем;
for – цикл со счётчиком – выполняется и при каждой итерации обновляет счётчик, пока условие в объявлении цикла соблюдается (т.е. проверка условия возвращает true);
сокращенный for (в других языках известен как foreach) – перебирает массив от первого элемента до последнего и на каждой итерации выполняет тело цикла.
Суть условия цикла – проверка выражения с одной или несколькими переменными: «Пока a int a = 1;
while (a
System.out.println(a);
a++; //увеличиваем а на единицу
Если же переменная работает как счётчик цикла, а за его пределами не используется, её инициализируют прямо в условии. И тут же пишут, что с ней делать в конце каждой итерации. Всё это – в одну строку – с помощью for:
for (а=1, a
System.out.println(a);
Получаем тот же результат. Список можно было начать с нуля или с отрицательного значения – диапазон определяем сами.
Сокращенный вариант цикла for не содержит указаний ни на число повторов, ни на действия в конце шага. Цикл типа foreach используют для перебора массивов. От первого элемента нужно переходить к следующему – пока массив не кончится.
int[] ms = < 1, 2, 3, 4>; //создаем массив
int s = 0;
s *= i; //последовательно перемножаем элементы
System.out.println(s);
Вложенные циклы Java
Циклы можно вкладывать один в другой. При этом число повторов наружного и вложенных циклов умножается. Если внешний должен выполняться 5 раз и внутренний – 5, всего цикл будет выполнен 25 раз.
Выведем таблицу умножения с помощью двух массивов:
int a, b, result = 0;
for (a = 2; a
for (b = 2; b
result = a*b;
System.out.println(a+»x»+b+» = «+result);
Cоздание объектов в цикле Java
Циклы удобны, когда нужно создать и пронумеровать множество объектов. Их число бывает неизвестно заранее: объекты могут создаваться по запросу пользователя. Вот мы спросили, сколько нужно чего-то, и записали число в переменную n. Теперь создадим объекты в нужном количестве:
Something[] array = new Something[n]; //создаем массив типа “что-то” из n элементов
for(int i = 0; i
array[i] = new Something(); //создаем “что-то” и помещаем его в массив
Как выйти из цикла Java
Для выхода из цикла есть ключевые слова break — «прервать», continue — «возобновить» и return — «вернуться». Команда break переключает программу на выполнение следующих за циклом операторов. Условия прерывания цикла в Java оформляют через if-ветвление. Главное, чтобы проверка выполнялась перед основной частью тела цикла.
//после создания массива m пишем:
if (a==5) break;
System.out.println(a);
Операторы ветвления и цикла в Java часто работают вместе: запускаем цикл, а внутри него проверяем, не выполнено ли еще условие, при котором нужно прервать цикл или сделать что-то ещё.
Если использовать break во вложенном цикле, прервётся только он, а внешний продолжит выполняться.
Для досрочного прерывания итерации цикла for в Java используют continue. Когда программа до него доходит, она пропускает невыполненную часть итерации, обновляет счётчик и переходит к следующей итерации.
В конструкциях while тот же continue работает иначе: возвращает нас к проверке условия продолжения цикла. Другая команда – return – возвращает программу к месту, откуда был вызван метод, в котором цикл находится.
И continue, и break можно использовать с меткой — для перехода к нужной части кода — по аналогии с goto:
break Mark1; //при условии, что где-то выше стоит метка Mark1 :
Бесконечный цикл Java
Создать бесконечный цикл легко — достаточно не указывать параметры в for:
for (; 😉 <>
Сложнее извлечь из этого пользу. Обычно бесконечность цикла – критическая ошибка, которая мешает выполнению программы. Поэтому каждый цикл стоит проверять на способность корректно завершиться в нужный момент. Для этого нужно:
- указать в теле цикла условия прерывания,
- убедиться, что переменная в условии прерывания может принять значение, при котором цикл будет остановлен.
Советуем также посмотреть мастер-класс по созданию приложения «Погода», где рассматривается работа с циклами
Цикл — это блок команд, который выполняется снова и снова, пока соблюдается определённое условие. Повторяемый фрагмент кода называют «телом цикла». Одно выполнение тела цикла называют итерацией.
В Яве можно работать с циклами нескольких типов — для этого есть следующие операторы:
while – цикл с предусловием – сначала проверяем условие, затем выполняем тело цикла;
do… while – цикл с постусловием – сначала выполняем один раз тело цикла, затем проверяем условие и, если оно соблюдается, продолжаем;
for – цикл со счётчиком – выполняется и при каждой итерации обновляет счётчик, пока условие в объявлении цикла соблюдается (т.е. проверка условия возвращает true);
сокращенный for (в других языках известен как foreach) – перебирает массив от первого элемента до последнего и на каждой итерации выполняет тело цикла.
Суть условия цикла – проверка выражения с одной или несколькими переменными: «Пока a int a = 1;
while (a
System.out.println(a);
a++; //увеличиваем а на единицу
Если же переменная работает как счётчик цикла, а за его пределами не используется, её инициализируют прямо в условии. И тут же пишут, что с ней делать в конце каждой итерации. Всё это – в одну строку – с помощью for:
for (а=1, a
System.out.println(a);
Получаем тот же результат. Список можно было начать с нуля или с отрицательного значения – диапазон определяем сами.
Сокращенный вариант цикла for не содержит указаний ни на число повторов, ни на действия в конце шага. Цикл типа foreach используют для перебора массивов. От первого элемента нужно переходить к следующему – пока массив не кончится.
int[] ms = < 1, 2, 3, 4>; //создаем массив
int s = 0;
s *= i; //последовательно перемножаем элементы
System.out.println(s);
Вложенные циклы Java
Циклы можно вкладывать один в другой. При этом число повторов наружного и вложенных циклов умножается. Если внешний должен выполняться 5 раз и внутренний – 5, всего цикл будет выполнен 25 раз.
Выведем таблицу умножения с помощью двух массивов:
int a, b, result = 0;
for (a = 2; a
for (b = 2; b
result = a*b;
System.out.println(a+»x»+b+» = «+result);
Cоздание объектов в цикле Java
Циклы удобны, когда нужно создать и пронумеровать множество объектов. Их число бывает неизвестно заранее: объекты могут создаваться по запросу пользователя. Вот мы спросили, сколько нужно чего-то, и записали число в переменную n. Теперь создадим объекты в нужном количестве:
Something[] array = new Something[n]; //создаем массив типа “что-то” из n элементов
for(int i = 0; i
array[i] = new Something(); //создаем “что-то” и помещаем его в массив
Как выйти из цикла Java
Для выхода из цикла есть ключевые слова break — «прервать», continue — «возобновить» и return — «вернуться». Команда break переключает программу на выполнение следующих за циклом операторов. Условия прерывания цикла в Java оформляют через if-ветвление. Главное, чтобы проверка выполнялась перед основной частью тела цикла.
//после создания массива m пишем:
if (a==5) break;
System.out.println(a);
Операторы ветвления и цикла в Java часто работают вместе: запускаем цикл, а внутри него проверяем, не выполнено ли еще условие, при котором нужно прервать цикл или сделать что-то ещё.
Если использовать break во вложенном цикле, прервётся только он, а внешний продолжит выполняться.
Для досрочного прерывания итерации цикла for в Java используют continue. Когда программа до него доходит, она пропускает невыполненную часть итерации, обновляет счётчик и переходит к следующей итерации.
В конструкциях while тот же continue работает иначе: возвращает нас к проверке условия продолжения цикла. Другая команда – return – возвращает программу к месту, откуда был вызван метод, в котором цикл находится.
И continue, и break можно использовать с меткой — для перехода к нужной части кода — по аналогии с goto:
break Mark1; //при условии, что где-то выше стоит метка Mark1 :
Бесконечный цикл Java
Создать бесконечный цикл легко — достаточно не указывать параметры в for:
for (; 😉 <>
Сложнее извлечь из этого пользу. Обычно бесконечность цикла – критическая ошибка, которая мешает выполнению программы. Поэтому каждый цикл стоит проверять на способность корректно завершиться в нужный момент. Для этого нужно:
- указать в теле цикла условия прерывания,
- убедиться, что переменная в условии прерывания может принять значение, при котором цикл будет остановлен.
Советуем также посмотреть мастер-класс по созданию приложения «Погода», где рассматривается работа с циклами
Источник