Ajuda com Scanner

3 respostas
K
Boa noite galera, estou com um problema no código abaixo:
import java.util.ArrayList;
import java.util.Scanner;

public class sistema {
	
	public static void main(String[] args){
		
		ArrayList<String> nome = new ArrayList<String>();
		String nomeImprimir;
		ArrayList<Integer> idade = new ArrayList<Integer>();
		int idadeImprimir = 0;
		ArrayList<String> cidade = new ArrayList<String>();
		String cidadeImprimir;
		String confirmar;
		
		Scanner s = new Scanner(System.in);
		
		System.out.println("Programa para cadastrar clientes.");
		
		do{
			System.out.println("Qual o nome do cliente? ");
			nomeImprimir = s.nextLine();
			nome.add(nomeImprimir);
			System.out.println("Qual a idade do cliente? ");
			idadeImprimir = s.nextInt();
			idade.add(idadeImprimir);
			System.out.println("Qual a cidade do cliente? ");
			cidadeImprimir = s.nextLine();
			cidade.add(cidadeImprimir);	
			
			System.out.println();
			System.out.println("Cliente " + nomeImprimir + " cadastrado com sucesso! ");
			System.out.println("Informações do último cadastro: ");
			System.out.println("Idade: " + idadeImprimir + ".");
			System.out.println("Cidade: " + cidadeImprimir + ".");
			System.out.println();
			
			System.out.println("Deseja cadastrar outro cliente? ");
			confirmar = s.nextLine();	
			
		}while(confirmar.equals("Sim"));
		
		if(confirmar.equals("Nao")){	
			System.out.println(nome);
		}		
	}
}
__________________________________________________________________ O problema é que quando chega na parte de registrar a cidade do cliente ele ignora o scanner, porque isso? Se alguém souber o que eu estou fazendo de errado me ajuda ae vlw!.

3 Respostas

Ziru

O problema estava em usar o mesmo objeto scan para a entrada de Strings e números, ao que parece quando ele recebe uma String, depois um número, e depois tenta receber uma String não consegue mais. Então bastou criar um scan para cada tipo de dado que o código funcionou normalmente.
Segue o código modificado abaixo.

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




public class Aplicação {

	public static void main(String[] args) throws Exception {
        
      ArrayList<String> nome = new ArrayList<String>();  
      String nomeImprimir;  
      ArrayList<Integer> idade = new ArrayList<Integer>();  
      int idadeImprimir = 0;  
      ArrayList<String> cidade = new ArrayList<String>();  
      String cidadeImprimir;  
      String confirmar;  
        
      Scanner numero = new Scanner(System.in);
      Scanner string = new Scanner(System.in);
        
      System.out.println("Programa para cadastrar clientes.");  
        
      do{  
          System.out.println("Qual o nome do cliente? ");  
          nomeImprimir = string.nextLine();  
          nome.add(nomeImprimir);  
          System.out.println("Qual a idade do cliente? ");  
          idadeImprimir = numero.nextInt();  
          idade.add(idadeImprimir);  
          System.out.println("Qual a cidade do cliente? ");  
          cidadeImprimir = string.nextLine(); 
          cidade.add(cidadeImprimir);   
            
          System.out.println();  
          System.out.println("Cliente " + nomeImprimir + " cadastrado com sucesso! ");  
          System.out.println("Informações do último cadastro: ");  
          System.out.println("Idade: " + idadeImprimir + ".");  
          System.out.println("Cidade: " + cidadeImprimir + ".");  
          System.out.println();  
            
          System.out.println("Deseja cadastrar outro cliente? ");  
          confirmar = string.nextLine();     
            
      }while(confirmar.equalsIgnoreCase("Sim"));  
        
      if(confirmar.equalsIgnoreCase("Nao")){      
          System.out.println(nome);  
      }         
  
	}

	
}
netoax

Bem, esse problema ai é bastante chato, se trata do buffer do teclado, pensei até que com Java ia me livrar disso. kk
Existe vários tópicos que tratam disso ai e vários modos de resolver, eu fiz dessa maneira:

System.out.println("Qual o nome do cliente? ");
			nomeImprimir = s.nextLine();
			nome.add(nomeImprimir);
			System.out.println("Qual a idade do cliente? ");
			idadeImprimir = s.nextInt();
			idade.add(idadeImprimir);
			 /* 
             * Aqui eu preciso pegar a proxima linha, porque o nextLine() 
             * pega ja o que existe no buffer do teclado. 
             */
			s.nextLine();
			
			System.out.println("Qual a cidade do cliente? ");
			cidadeImprimir = s.nextLine();
			cidade.add(cidadeImprimir);

Liberei o buffer do teclado antes de perguntar a cidade do cliente, adicionando um s.nextLine(); e funcionou, é o que faço quando acontece isso comigo.

ViniGodoy

Quando for usar o scanner para ler entradas do teclado, use apenas o método nextLine(). Somente esse método retira do Buffer do scanner o terminador de linha.

Ou seja, ao invés de:

int valor = scanner.nextInt(); double valor2 = scanner.nextDouble();

Use:

int valor = Integer.parseInt(scanner.nextLine()); double valor2 = Double.parseDouble(scanner.nextLine());

Os demais métodos foram criados para a leitura de outras fontes de dados (arquivos, por exemplo). E não devem ser utilizados sem um maior conhecimento de como o Scanner opera.

Criado 29 de maio de 2013
Ultima resposta 30 de mai. de 2013
Respostas 3
Participantes 4