как найти сумму последовательности в Java - PullRequest
0 голосов
/ 26 марта 2020

Я действительно не понимаю, как найти сумму последовательности в Java. Например, программа запросит ввод первого и последнего номера последовательности и добавит сумму последовательности (3 + 4 + 5 = 12). Мой System.out.println () также не работает. Почему это?

import java.util.Scanner;

public class SumOfASequenceTheSequel {

public static void main(String[] args) {
    Scanner scanner = new Scanner(System.in);

    System.out.println("First number?");
    int first = Integer.valueOf(scanner.nextLine());
    System.out.println("Second number?");
    int second = Integer.valueOf(scanner.nextLine());


    int sum = 0;

    int i = first;

    while (i <= second) {
        sum = sum + i;
        i = i++;
    }

    System.out.println("The sum is " + sum);  
  }
}

Ответы [ 3 ]

0 голосов
/ 26 марта 2020

Как уже отмечали другие, поскольку вы выполняете постинкремент и присваивание в одном и том же выражении (i = i++;), ваша программа работает в бесконечном l oop.

Возможно, вы захотите изменить его на присваивание перед инкрементом (i = ++i;) или, что еще лучше, обычное пре- или постинкрементное (i++;).

Посмотрите на эту ссылку, чтобы понять разницу между операторами до и после операции.

Я рекомендую for l oop вместо while l oop для лучшей читаемости. Смотрите следующий фрагмент:

for(int i = first; i <= second; i++) {
    sum = sum + i;
}

Если вам нравится Stream API вместо традиционных циклов, вы также можете напечатать сумму следующим образом:

System.out.println("The sum is " + IntStream.rangeClosed(first, second).sum());

Кстати, вы можете захотеть закрыть ресурс Scanner после того, как вы его используете, чтобы избежать утечки ресурса, например: scanner.close();

0 голосов
/ 26 марта 2020

i = i++; Это утверждение неверно. Потому что вы использовали пост инкрементный . В этом утверждении сначала присвойте значение i для i после значения приращения. но я ценю не меняется. Тогда это, пока l oop становится бесконечностью l oop. Таким образом, вам нужно удалить часть назначения и нужно только i++;. Также вы можете использовать pre incremental (++i;). Если вы используете pre incremental , тогда оператор i = ++i; отлично. Но присвоение значения не нужно.

Если вы можете заменить, пока l oop использует для l oop, то вы не столкнетесь с этой проблемой. Для l oop решение ниже. Ниже код sum += i; равен sum = sum + i

for (int i = first; i <= second; i++) {
            sum += i;
}
0 голосов
/ 26 марта 2020

я ++; называется Постинкремент равен i = i + 1; Так что вам просто нужно i++;, а не i = i++;.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...