Solucionado (ver solução)
Solucionado
(ver solução)
3
respostas

Ex. 6 da Aula 4 - Pacote java.io - Código em Loop Infinito

Galera boa tarde, o código desse exercício vive entrando em loop infinito, debug, já pesquisei na internet. Se eu me lembro bem quando isso acontecia em C usávamos algo para limpar buffer. O que pode ser?

``` import java.io.*; import java.util.*;

public class TesteDeScanner {

public static void main(String[] args) throws FileNotFoundException {
    InputStream is = new FileInputStream("texto.txt");
    Scanner s = new Scanner(System.in);

    System.out.println("Digite a sua mensagem: ");
    while(s.hasNextLine()){
       System.out.println(s.nextLine());

    }
    s.close();
}

} ```

3 respostas

Sergio,

é o seguinte seu código está entrando em loop infinito , pois possui um erro na seguinte linha:

Scanner s = new Scanner(System.in); no lugar de System.in coloque a variável do tipo InputStream is .

assim:

Scanner s = new Scanner(is);

Espero ter te ajudado, bons estudos

Celso boa tarde, se eu passar como parâmetro meu FileInputStream no construtor do Scanner, o código funciona perfeitamente, mas o que eu gostaria de fazer é tentar capturar o teclado como solicitado no final do exercício. Então modifiquei meu código como está acima no pedido de ajuda e também aqui:

import java.io.*;
import java.util.*;

public class TesteDeScanner {

    public static void main(String[] args) throws FileNotFoundException {

        InputStream is = System.in;
        Scanner s = new Scanner(is);

        System.out.println("Digite sua mensagem:");
        while (s.hasNextLine()) {
            System.out.println(s.nextLine());
        }
        s.close();
    }
}

Ele captura o que foi digitado e imprime, mas o problema é que ele não tem um ponto de parada, o hasNextLine() sempre vai retornar um true quando encontrar um '\n'. Tem alguma ideia de como posso parar esse loop?

solução!

Olhei bem a Java API e não encontrei o que queria, o que eu queria era algo método pronto :D para parar esse while, como por exemplo um outro método que iria mudar o retorno do true para false na próxima execução, mas então pensei, sou muito preguiçoso! Fiz esse código:

import java.io.*;
import java.util.*;

public class TesteDeScanner {

    public static void main(String[] args) throws FileNotFoundException {

        InputStream is = System.in;
        Scanner s = new Scanner(is);

        StringBuffer sb = new StringBuffer();
        sb.append("StringBuffer");

        System.out.println("Digite sua mensagem:");
        while (s.hasNextLine()) {
            sb.replace(0, sb.length(), s.nextLine());
            if (sb.toString().equalsIgnoreCase("QUIT!")) {
                System.out.println("Gearr ar mo aghaidh, asshole!");
                break;
            } else if(!sb.toString().equals("")) {
                System.out.println("Ní féidir liom a thuiscint: " + sb);
            }
        }
        s.close();
    }
}

Não a necessidade de escrever mais um método para a já tãogigante API do Java, se o desenvolvedor pode simplesmente escrever alguns ifs que funciona com qualquer objeto! Conclusão: Abri essa duvida por simples pura preguiça e um pouco de dormida no ponto! Sorry.