Есть ли способ добавить целые числа при увеличении, а затем при уменьшении? в последовательности - PullRequest
1 голос
/ 11 июля 2020

Мне не удается добавить в последовательность набор целых чисел. У меня есть три переменные: начало, число и конец. Если я «начинаю» с 5, складываю все целые числа до «числа» (например, 9), затем уменьшаю от 9 до целого «конца» (в данном случае до -1): (5,9, -1 ) => 5 + 6 + 7 + 8 + 9 + 8 + 7 + 6 + 5 + 4 + 3 + 2 + 1 + 0 + - 1, что затем я напечатал бы результат: total = 70. как Могу ли я выполнить sh это?

public class SequenceNumbers {

  public static void main(String[] args) {

    int start = 5;
    int num = 9;
    int end = -1;
    
    int sum = 0;
    for(int i = start; i <= num; i++)
    {
        // sum = sum + i;
        sum += i;
    }

    int total = 0;
    for ( int n = num; n != end; n--) {
        
        total = (sum + (num - 1));
    }
    
   System.out.println("Result = " + total);
  }
}

Ответы [ 4 ]

2 голосов
/ 11 июля 2020

Во втором l oop вы перезаписываете total на каждой итерации. Я бы сохранил тот же образец, что и в первом l oop, и просто продолжал бы добавлять к sum. Обратите внимание, что он должен начинаться с num - 1, чтобы вы не считали это число дважды:

int sum = 0;
for(int i = start; i <= num; i++) {
    sum += i;
}

for ( int i = num - 1; i >= end; i--) {
    sum += i;
}

System.out.println("Result = " + sum);
1 голос
/ 11 июля 2020

Думаю, вам это нужно для упражнения? Но если вам нужен однострочник, это возможное решение:

import java.util.*;
import java.util.stream.*;
public class MyClass {
    public static void main(String args[]) {
;
      int start = 5;
      int num = 9;
      int end = -1;
      
      int total = Stream.concat(Stream.iterate(start, n -> n + 1).limit(num-start+1), Stream.iterate(num-1, n -> n - 1).limit(num-end)).mapToInt(Integer::intValue).sum();

      System.out.println("Result = " + total);
    }
}
0 голосов
/ 11 июля 2020

На второй итерации для получения общего результата вы должны уменьшить от максимального числа, равного 9, до минимального числа, равного -1. Это означает большее или равное наименьшему значению. ; >= ; -- .

Оператор сравнения != предназначен для сравнения двух значений, и результатом всегда будет логический тип .

0 голосов
/ 11 июля 2020

Вы были почти у цели. Весь ваш код в порядке, пока эта одна строка в вашей второй для l oop:

total = (sum + (num - 1));

В этой строке говорится: «установить total равным sum плюс на единицу меньше num». Там проблема; sum и num никогда не изменяются for l oop, поэтому на самом деле ваш for l oop ничего не делает. Тем не менее, вы правильно настроили свой l oop и дали себе переменную n. Все, что вам нужно сделать, это продолжать добавлять к sum и каждый раз добавлять n, например:

sum += n;

Затем в вашем println вы можете просто использовать sum вместо total, вот так:

System.out.println("Result = " + sum);
...