Espaços inconvenientes

2 respostas
P

Bom dia aí pessoal, então, como o título já diz o problema é o seguinte, estou dando uma olhada em List agora, e o problema é: "Faça um programa que permita o usuário entre um conjunto de números inteiros (quantidade não é conhecida a priori) e imprima a soma e a média desses números." isso eu fiz, mas o grande problema foram os espaços, quando eu entro o primeiro inteiro, parece que ele aguarda até que eu entre um novo inteiro para aí sim entrar no loop independente do número de "enters" que eu pressione, sendo que a cada enter ele pula uma linha na entrada de dados.

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.Scanner;


public class Lista7 {

  
    public static void main(String[] args) {
        List <Integer> lista = new ArrayList <Integer>();
        Scanner input = new Scanner(System.in);
        Integer number;
        
        System.out.print("Digite um inteiro (digite um número para continuar ou s para sair): ");
        number = input.nextInt();
        lista.add(number);
        
        while(input.hasNextInt());
        {
            System.out.print("Digite um inteiro (digite um número para continuar ou s para sair): ");
            number = input.nextInt();
            lista.add(number);
        }
        
        Media(lista);
        
    }
    
    public static void Media(List <Integer> l){
        Iterator <Integer> iterator = l.iterator();
        int count = 0;
        int soma = 0;
        
        while(iterator.hasNext())
        {
            soma += iterator.next();
            count++;
        }
        
        System.out.printf("Soma: %d\tMédia: %d\n",soma, soma/count);
    }
            
}

Eu sei que o negócio do s não é o mais correto, o melhor seria lançar uma exceção coisa e talz ou outra coisa qualquer...mas o foco é List por enquanto, então coloquei o s para sair só pra ficar "bonitinho" ueheuhuhe...Além disso, eu também já tentei usar no loop dentro da main do...while(input.hasNextInt()); com as devidas e pequenas alterações mas deu no mesmo.

2 Respostas

ribclauport

O uso de nextInt(), não é indicado para entradas do teclado!!!

Vou repetir o que falei: Sempre que for ler do console, use nextLine() e não next(), nextInt() ou qualquer outro next disponível.

Os outros métodos é que deixam o tal lixo no buffer, afinal, a leitura do console sempre termina na quebra de linha.

This message was edited 1 time. Last update was at 29/06/2011 11:44:09

post de onde foi retirada a citação acima:
http://www.guj.com.br/java/245958-como-armazernar-espaco-em-string

teste isso e ve se te ajuda:

package crau;

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

public class Lista7 {

	public static void main(String[] args) {
		List&lt;Integer&gt; lista = new ArrayList&lt;Integer&gt;();
		Scanner dados = new Scanner(System.in);

		while (true) {
			System.out.print("Digite um inteiro (digite um número para continuar ou s para sair): ");
			String valor = dados.nextLine();

			if (valor.equalsIgnoreCase("s")) {
				break;
			}
			Integer valorInteger = Integer.parseInt(valor);
			lista.add(valorInteger);

		}

		 media(lista);

	}

	public static void media(List&lt;Integer&gt; l) {
		if (l.size() != 0) {
			int soma = 0;
			for (int numbers : l) {
				soma += numbers;
			}
			System.out.println("Soma: " + soma);
			System.out.print("Média: " + soma / l.size());
		} else {
			System.out.println("Não foram inseridos argumentos.");
		}

	}

	// System.out.printf("Soma: %d\tMédia: %d\n",soma, soma/count);

}
P

Desculpe aí responder tanto tempo depois gente mas, ontemfiquei sem internet. Muito obrigado ribclauport, era isso mesmo que eu precisava, dica anotada :slight_smile:

Criado 11 de junho de 2012
Ultima resposta 13 de jun. de 2012
Respostas 2
Participantes 2