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

Dúvida no comportamento do .nextLine()

Olá pessoal!

Estou com dificuldade de entender o método .nextLine() (principalmente dentro de um while). Mesmo lendo a documentação eu não consegui entender como eu de fato "incremento" uma linha dentro do loop.

Onde se faz um (grosseiramente falando) linha + 1 para a próxima entrada no while?

1 resposta
solução!

Olá Pedro! Tudo bem?

Pergunta muito interessante!

Retornando ao código que o professor utiliza nesta aula, vemos o seguinte:

Scanner scanner = new Scanner(new File("contas.csv"));
                while(scanner.hasNextLine()) {
                        String linha = scanner.nextLine();
                        System.out.println(linha);
                }

Na estrutura de repetição while nós sempre temos como parâmetro uma expressão booleana, que é avaliada antes de cada iteração do loop. Enquanto a expressão retornar um valor verdadeiro (True), o loop segue se repetindo. Quando a expressão retornar um valor falso (False), o loop para.

Geralmente nós utilizamos uma expressão que envolve uma variável do tipo int, de forma que essa variável tem seu valor incrementado a cada iteração do loop, dessa forma:

while(i < 9){
    i = i + 1;
    System.out.println( i );
 }

Mas quando utilizamos essa forma de iterar o laço, definimos um valor fixo que ele terá que obedecer (no exemplo, o laço se repetirá enquanto o valor de i < 9 for verdadeiro).

No caso do nosso Scanner, precisamos que ele continue com as iterações do laço até que não haja mais linhas a serem "escaneadas". E felizmente temos um método específico para isso!

É nesse momento que entra em cena o scanner.hasNextLine()! Ele nos retorna true enquanto houver uma próxima linha a ser escaneada, nos garantindo assim que teremos a iteração do laço while enquanto houver uma próxima linha. Quando não houver, ele simplesmente nos retorna um false, encerrando o loop.

Então utilizamos ele dessa forma: while(scanner.hasNextLine()).

Quanto a dúvida de como nós fazemos um "incremento" para que na próxima iteração do loop a próxima linha seja "escaneada", também recorremos a um método específico para isso... o scanner.nextLine(). Ele nos garante que a cada iteração do loop nós estaremos sempre indo para a próxima linha. E como nós utilizamos o scanner.hasNextLine(), garantimos que de fato há uma próxima linha para o scanner, pois caso contrário o loop teria parado sua execução.

Consegui te ajudar com essa resposta?

Se precisar de mais ajuda com esse assunto em específico, é só falar! 😄

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓.Bons Estudos!