Преобразование цикла в цикл while в Java

java

102 просмотра

3 ответа

43 Репутация автора

Мне нужно преобразовать этот цикл for в цикл while, чтобы избежать использования разрыва.

double[] array = new double[100];

Scanner scan = new Scanner(System.in); 

for (int index = 0; index < array.length; index++)
    {
        System.out.print("Sample " + (index+1) + ": ");
        double x = scan.nextDouble();
        count++;
        if (x < 0) 
        {
            count--;
            break;
        }
        array[index] = x; 
    }

Это то, что я придумал, но я получаю другой результат:

int index = 0;

double x = 0; 

while (index < array.length && x >= 0)
    {
        System.out.print("Sample " + (index+1) + ": ");
        x = scan.nextDouble();
        count++;
        if (x < 0) 
        {
            count--;
        }
        array[index] = x;
        index++;
    }
Автор: Julian Источник Размещён: 08.12.2015 11:51

Ответы (3)


1 плюс

165131 Репутация автора

+ Изменить

if (x < 0) 
{
    count--;
}
array[index] = x;
index++;

что-то вроде

if (x < 0) 
{
    count--;
} 
else 
{
    array[index] = x;
    index++;
}
Автор: Elliott Frisch Размещён: 08.12.2015 11:55

1 плюс

813 Репутация автора

Если вы хотите избежать прерывания, изменение цикла for в цикл while не поможет.

Как насчет этого решения:

boolean exitLoop = false;
for (int index = 0; index < array.length && !exitLoop; index++)
    {
        System.out.print("Sample " + (index+1) + ": ");
        double x = scan.nextDouble();
        count++;
        if (x < 0) 
        {
            count--;
            exitLoop = true;
        }
        else {
            array[index] = x;
        }
    }
Автор: Andreas Vogl Размещён: 08.12.2015 11:55

1 плюс

60 Репутация автора

Решение

это решение дает тот же вывод, что и для цикла:

while (index < array.length && x >= 0)
{
    System.out.print("Sample " + (index+1) + ": ");
    x = scan.nextDouble();
    count++;
    if (x < 0) 
    {
        count--;
    }
    else
    {
        array[index] = x;
        index++;
    }
}

ОБЪЯСНЕНИЕ:

В цикле for вы используете оператор break, поэтому ничего не происходит после того, как программа достигнет break. Так array[index] = x;не казнили.

На цикле while, поскольку перерыва нет, цикл продолжается, поэтому операторы array[index] = x;и index++;выполняются.

Вот почему вы получили разные результаты. Если вы не хотите, заявления

array[index] = x;
index++; 

Чтобы быть выполненным, вы можете просто сделать оператор if оператором if / else, как указано выше.

Автор: gooeyn Размещён: 08.12.2015 11:57
Вопросы из категории :
32x32