Java - мое время l oop работает, но мое значение l oop не работает - возникают проблемы с его преобразованием - PullRequest
0 голосов
/ 23 февраля 2020

Я предполагаю, что если я не смогу преобразовать свое время l oop в a для l oop, то я не до конца понимаю концепции. Вот моя работа, пока l oop:

(я пытаюсь реализовать программу, которая вычисляет сумму 1 + 2 + 3 + ... + n, где n задается как ввод данных пользователем.)

public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        System.out.println("Enter a number: ");
        int number = Integer.valueOf(scanner.nextLine());

        int sum = 0;
        int i = 0;

        while (i < number) {
            i++;
            sum += i;
        }
        System.out.println(sum);

Я смотрел ответ этого пользователя здесь: { ссылка } и пытался реализовать его, но он не работает.

.....
for (i = 0; i < number; i++){
            sum += i;
        }
        System.out.println(sum);

Похоже на условия из For Init expression statement и ForUpdate установлены правильно, но у меня возникают проблемы с пониманием различий здесь.

Кроме того, похоже, что это упражнение пытается научить циклы решать итерационные задачи. Но я подозреваю, что это не помогает мне практиковать рекурсию. Возможно, есть рекурсивное решение этой проблемы, которое было бы лучше. Просто мысли вслух. Спасибо!

Ответы [ 3 ]

4 голосов
/ 23 февраля 2020

Разница в том, что в вашем while l oop вы увеличиваете i до , добавляя его к sum, но в вашем for l oop это после.

Если while дает правильный результат, вы можете настроить for, начиная с 1 вместо 0 и продолжая, пока <= number вместо < number.

Для полноты, вот как работает ваш текущий for l oop:

  1. i = 0
  2. Если i < number равно не true, выход петля; в противном случае перейдите к шагу 3
  3. sum += i (i по-прежнему 0)
  4. i++
  5. Перейти к шагу 2

На втором проходе i < number равно 1 < number, поэтому все равно true, если number больше 1, поэтому вы go переходите к шагу 3, выполните sum += i, в то время как i равно 1, затем продолжите.

В конце концов i < number больше не соответствует действительности, и l oop завершается.


Для подобных проблем обычно лучше всего использовать отладчик встроенный в вашу IDE, чтобы шаг за шагом проходить через оператор кода за оператором, глядя на значения переменных как вы go. Это может показать, как все работает очень хорошо. Эта статья может быть полезна: Как отлаживать небольшие программы

1 голос
/ 23 февраля 2020

Поскольку вы увеличиваете значение i перед добавлением его к sum в while l oop, то же самое необходимо сделать и в случае for l oop. Ниже приведена реализация с использованием for l oop:

for (i = 0; i++ < number; ){
    sum += i;
}
System.out.println(sum);
1 голос
/ 23 февраля 2020

Используйте <= вместо <. Это решит Вашу проблему и убедится, что вы понимаете, почему будет работать следующий код. Я бы порекомендовал вам использовать бумагу и карандаш и начать записывать значения i и sum после каждой итерации. </p>

for (i = 1; i <= number; i++) { 
    sum += i;
}
...