Выход из цикла без использования оператора 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
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
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.
}

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

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