Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Duvida na classe Scanner

Não entendo porque no loop for (int i = 0; i < qnt; i++), a mensagem "Entre com o nome da obra" é impressa no console logo depois de "Digite o nome do cliente". O bloco dentro da condicional if(sc.hasNextLine()) não deveria rodar só se eu inserisse uma nova linha no console? Alguém saberia me dar uma luz? Obrigado.

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

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

        List<Cliente> clientes = new ArrayList<Cliente>();
        List<Obra> obras = new ArrayList<Obra>();

        Scanner sc = new Scanner(System.in);        

        System.out.println("digite quantos clientes quer cadastrar");

        int qnt = sc.nextInt(); 
        if(sc.hasNextLine()){
            for (int i = 0; i < qnt; i++) {
                System.out.println("Digite o nome do cliente:");
                if(sc.hasNextLine()){    
                    Cliente c = new Cliente(sc.nextLine());
                    clientes.add(c);
                    System.out.println("Entre com o nome da obra do cliente: ");
                        if(sc.hasNextLine()){
                            Obra o = new Obra(sc.nextLine());
                            obras.add(o);
                    }    
                }
            }
        }    
        for (int i = 0; i < clientes.size(); i++) {
            Cliente c = (Cliente) clientes.get(i);
            System.out.println(c);
        }                

        sc.close();
    }
}
1 resposta
solução!

O método hasNextLine bloqueia a execução até você apertar o enter... Você digita o nome do cliente e o outro bloco executa.. é a ordem natural mesmo.