Выход из цикла без использования оператора break

public static void enterInts()
{
    int i = 0;
    int[] userArray = new int[9];
    
    System.out.println("Enter up to 10 integers, type 0 when done");
    
    for(i = 0; i < userArray.length; i++)           
    {
        if (keyboard.nextInt() != 0)    
            userArray[i] = keyboard.nextInt();
        else
            break;
    }//for
    posOrNeg(userArray);
}//enterInts

Мой профессор ДЕЙСТВИТЕЛЬНО ненавидит операторы break и continue () в циклах, поэтому я хотел бы знать, есть ли способ выйти из этого цикла for после ввода «0» без его использования.

Не звоните keyboard.nextInt() два раза за итерацию цикла, вы теряете номера

Iłya Bursov 21.02.2023 21:59

Вам нужно сохранить keyboard.nextInt() внутри переменной, а затем вы можете добавить еще одно условие в цикл for

codingStarter 21.02.2023 22:00

В вашем сообщении говорится «до 10 целых чисел», но ваш массив принимает только 9.

shmosel 21.02.2023 22:14
Лучшая компания по разработке спортивных приложений
Лучшая компания по разработке спортивных приложений
Ищете лучшую компанию по разработке спортивных приложений? Этот список, несомненно, облегчит вашу работу!
Blibli Automation Journey - Как захватить сетевой трафик с помощью утилиты HAR в Selenium 4
Blibli Automation Journey - Как захватить сетевой трафик с помощью утилиты HAR в Selenium 4
Если вы являетесь веб-разработчиком или тестировщиком, вы можете быть знакомы с Selenium, популярным инструментом для автоматизации работы...
Фото ️🔁 Radek Jedynak 🔃 on ️🔁 Unsplash 🔃
Фото ️🔁 Radek Jedynak 🔃 on ️🔁 Unsplash 🔃
Что такое Java 8 Streams API? Java 8 Stream API
Деревья поиска (Алгоритм4 Заметки к учебнику)
Деревья поиска (Алгоритм4 Заметки к учебнику)
(1) Двоичные деревья поиска: среднее lgN, наихудшее N для вставки и поиска.
0
3
59
4
Перейти к ответу Данный вопрос помечен как решенный

Ответы 4

Ответ принят как подходящий

Один из способов — вызвать nextInt() в условии цикла:

for (int i = 0; i < userArray.length && (userArray[i] = keyboard.nextInt()) != 0; i++);

Это сработает, но ради Бога, пожалуйста, не записывайте свои циклы таким образом. Его профессор может ненавидеть перерывы, но все остальные будут ненавидеть это.

Nicky 21.02.2023 22:17

Может быть, профессор усвоит урок.

shmosel 21.02.2023 22:20

Будучи профессионалом с 25-летним стажем, более половины этого времени проверив код как коллега и руководитель, я НИКОГДА не одобряю этот код ни в какой производственной системе. Просто ик!

E-Riz 21.02.2023 22:44

@E-Riz Возможно, стоит держаться подальше от JDK.

shmosel 21.02.2023 23:03

Просто замените перерыв; с возвратом;

Хорошо, а как насчет последней строчки: posOrNeg(userArray) ?

Johnny Mopp 21.02.2023 22:02

Если его профессор ненавидит продолжение и паузу, то наверняка ненавидит и возвращение... 😭

Nurio Fernández 21.02.2023 22:17

Во-первых, как сказал кто-то другой, вы должны прочитать nextInt() в переменную, чтобы вы могли назначить ее позже. Ваш код запросит число, а затем, если это число не равно нулю, он забудет, каким было число, а затем попросит ввести другое число, которое будет назначено.

Что касается возможных решений: одной из идей было бы переместить цикл в его собственный метод, а затем вы могли бы просто использовать «возврат» вместо «разрыв». По сути, это та же концепция, но без ключевого слова break. Хотя я беспокоюсь, что ему это тоже может не понравиться. Непонятно, почему он не любит брейк, так что трудно сказать.

Другим решением было бы заменить цикл for циклом while, получить следующий ввод в конце цикла, а затем включить в условное выражение цикла число, отличное от нуля.

Причина, по которой профессору не нравится продолжение и прерывание, и, вероятно, возврат, скорее всего, связана с «правилом единственной точки выхода». Профессора всего мира неправильно понимают это правило и стараются радикально избегать любых альтернативных путей. лучший способ бороться с этим аргументом - показать им, почему это не имеет никакого смысла, выбрасывая исключение вместо возврата защитного предложения.

Nurio Fernández 21.02.2023 22:26

Перерыв; и продолжить; являются лучшим способом управления потоком цикла. В любом случае, это реальность, что профессора во всем мире ненавидят это.

С таким бессмысленным ограничением вы должны проявить творческий подход, если хотите получить код, который не выглядит как дерьмо.

Мое предложение немного запутано и затрудняет понимание кода, но оно ближе всего к «слому»:

int length = 10;
for(i = 0; i < length; i++)           
{
    i = length; // This produces the same effect as break.
}

Удачи вам в этом, сохраняйте хладнокровие и держите вещи красивыми и чистыми!

Другие вопросы по теме