How to add contiguous numbers from an array?

Asked

Viewed 2,948 times

4

I have a array of numbers being typed by the user, and need to add the numbers of this array.

import java.util.ArrayList;
import java.util.Scanner;

public class Questao3 {
/*3.Fazer um algoritmo que:
•Leia um número indeterminado de linhas contendo cada uma a idade de um indivíduo.
•A última linha que não entrará nos cálculos, contém o valor da idade igual a zero.
•Calcule e escreva a idade média deste grupo de indivíduos.
•Escreva também a maior idade e a menor*/
    public static void main(String[] args) {

        Scanner s = new Scanner(System.in);
        ArrayList <Integer> lista = new ArrayList<>();
        int soma = 0;

        System.out.println("Digite 0 para terminar");

        for (int i = 0; i < 10;) {
            System.out.print("Digiten um número: ");
            int num1 = s.nextInt(); 
                if(num1 == 0){break;}
            lista.add(num1);
        }
        for (Integer integer : lista) {
            System.out.print(integer);
        }
        int tamanho = lista.size();
        System.out.println(tamanho);
    }
}
  • You can take advantage of your looping that displays the numbers, just add soma += integer;

  • @Oeslei also thought about it, it would be better logically but if to consider the question this solution would not be adding the elements of the array.

  • Take a look at [tour]. You can accept an answer if it solved your problem. You can vote on every post on the site as well. Did any help you more? You need something to be improved?

3 answers

6

Keep adding as you receive the data.

import java.util.*;

public class Main {
    public static void main(String[] args) {
        Scanner s = new Scanner(System.in);
        ArrayList<Integer> lista = new ArrayList<>();
        int soma = 0;
        int menor = 999;
        int maior = 0;
        System.out.println("Digite 0 para terminar");
        for (;;) {
            System.out.println("Digite um número: ");
            int num = s.nextInt(); 
            if (num == 0) break;
            lista.add(num);
            soma += num;
            maior = Math.max(maior, num);
            menor = Math.min( menor, num);
        }
        for (Integer integer : lista) System.out.println(integer);
        System.out.println("A média de idade é " + (soma / lista.size()));
        System.out.println("A maior idade é " + maior);
        System.out.println("A menor idade é " + menor);
    }
}

Behold working in the ideone. And in the repl it.. Also put on the Github for future reference.

4

Before dealing with the sum, I believe your logic is wrong. The statement says that the input will be an undetermined number of values and your loop from 0 to 9.

To sum all indexes just loop from 0 to the size of this array and use the method get(int index) to grab the element by the index. Example:

for(int i = 0; i < meuArrayList.size(); i++)
    soma += meuArrayList.get(i);

Or simply:

for(int idade : meuArrayList)
    soma += idade;

In the exercise in question you would need two loops, one infinite and the other taking as a condition of stopping the size of the ArrayList.

import java.util.ArrayList;
import java.util.Scanner;

public class SomandoArray {
    public static void main(String[] args) {

        Scanner input = new Scanner(System.in);
        ArrayList<Integer> idades = new ArrayList<>();

        int idade;

        /* Loop para inserir 'n' elementos no array */
        System.out.println("Digite 0 para terminar");
        for(;;){
            System.out.println("Digite um número: ");
            if((idade = input.nextInt()) == 0)
                break;
            idades.add(idade);
        }

        int totalIndividuos = idades.size();
        if(totalIndividuos > 0){

            int soma = 0, maior, menor;
            maior = menor = idades.get(0); 

            /* Loop para somar e encontrar a maior/menor idade */
            for(int _idade : idades){
                soma += _idade;
                if(_idade > maior) maior = _idade;
                if(_idade < menor) menor = _idade;
            }

            System.out.println("Media: " + soma/totalIndividuos);
            System.out.println("Maior: " + maior + " - Menor: " + menor);
        }  
    }
}

I had proposed a suggestion without the use of ArrayList formerly (similar to maniero’s response.

0

If you are using java 8 and want to do it with Lambda

        System.out.println("Media: " + lista.stream().mapToInt(r -> r).sum()/lista.size());
        System.out.println("Maior: " + lista.stream().mapToInt(r -> r).max().getAsInt());
        System.out.println("Menor: " + lista.stream().mapToInt(r -> r).min().getAsInt());

Browser other questions tagged

You are not signed in. Login or sign up in order to post.