Problemas com String em Classe Scanner

2 respostas
D

Boa tarde à todos, tenho um algoritmo para resolver e normalmente utilizo a classe Scanner para leitura de dados do teclado.
Um exercício Simples, Apenas preciso fazer cadastro de cliente com arrayList, e na posição em que se encontra o nome será o código do cliente:

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

public class Controla_Arremates {

    static Scanner teclado = new Scanner(System.in);
    static ArrayList<String> ListaNome = new ArrayList();
    static String sNome;
    static  int iContinua;   

    public static void main(String[] args)throws Exception{
       do{
            System.out.println("Informe o nome do Cliente: ");
            sNome = teclado.next();
            ListaNome.add(sNome);
            System.out.println("O Codigo de " +sNome+ " é: " +ListaNome.size());
            System.out.println("Deseja cadastrar mais clientes? 1- Sim ou 2-Nao");
            iContinua = teclado.nextInt();
        }while(iContinua == 1);
    }
 }

O problema é um seguinte:
Quando insiro um nome Composto, por exemplo “João da Silva” ele não funciona…
Quando mudo esta linha de código

sNome = teclado.next();
para sNome = teclado.nextLine();
ele passa a funcionar na primeira vez, porém na segunda não funciona. como resolver isso?

2 Respostas

drsmachado

O problema é esta linha

iContinua = teclado.nextInt();

Pois ele interpreta o número 1 para prosseguir e joga o “\n” como sendo argumento do nextLine();
Eu apenas modifiquei estas linhas e funcionou redondo:

sNome = teclado.nextLine();  
            ListaNome.add(sNome);  
            System.out.println("O Codigo de " +sNome+ " é: " +ListaNome.size());  
            System.out.println("Deseja cadastrar mais clientes? 1- Sim ou 2-Nao");  
            iContinua = Integer.parseInt(teclado.nextLine());

Resultados:

Informe o nome do Cliente: 
abc d
O Codigo de abc d é: 1
Deseja cadastrar mais clientes? 1- Sim ou 2-Nao
1
Informe o nome do Cliente: 
abcd
O Codigo de abcd é: 2
Deseja cadastrar mais clientes? 1- Sim ou 2-Nao
1
Informe o nome do Cliente: 
abc d
O Codigo de abc d é: 3
Deseja cadastrar mais clientes? 1- Sim ou 2-Nao
1
Informe o nome do Cliente: 
Geronimo
O Codigo de Geronimo é: 4
Deseja cadastrar mais clientes? 1- Sim ou 2-Nao
2
D

Valeu mesmo!

Criado 21 de setembro de 2011
Ultima resposta 21 de set. de 2011
Respostas 2
Participantes 2