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);
}
}
}
Ajuda com Scanner
3 Respostas
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);
}
}
}
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.
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.