Problemi con la classe Scanner

di il
11 risposte

Problemi con la classe Scanner

Premetto che non so se è il modo migliore per prendere un input da tastiera, la prima volta che ho usato il metodo nextline ha funzionato, più avanti nel programma però:
Scanner inputCarattere=new Scanner(System.in);
		String tmp="";
		tmp=inputCarattere.nextLine();
		this.carattereInserito=tmp.charAt(0);
		inputCarattere.close();
quando lo eseguo mi da un errore Eccezione e dice che non trova testo nella linea successiva, ovviamente, se aspettasse che inserisco il carattere la troverebbe come faccio a risolvere il problema?

11 Risposte

  • Re: Problemi con la classe Scanner

    Ciao, potresti postare l'eccezione che ti viene lanciata?
  • Re: Problemi con la classe Scanner

    Certo, appena arrivo a casa le posto
  • Re: Problemi con la classe Scanner

    Ecco l'errore:
    Exception in thread "main" java.util.NoSuchElementException
    at java.util.Scanner.throwFor(Scanner.java:907)
    at java.util.Scanner.next(Scanner.java:1416)
    at com.lanzarinirudy.CaratteriSegreti.leggiCarattere(CaratteriSegreti.java:14)
    at com.lanzarinirudy.Impiccato.main(Impiccato.java:16)
  • Re: Problemi con la classe Scanner

    Per caso prima della nextLine fai una nextInt? Perché in questo caso ci sono problemi dovuti alla bufferizzazione dell'input..
  • Re: Problemi con la classe Scanner

    Nell'errore che ho postato era un input.next(), ma era solo una prova, inizialmente era un nextline().
    comunque non ho mai invocato nextInt() però nel codice precedente ho usato un altro nextline() chiamato però da un'altra classe può essere quello il problema? come svuoto il buffer?
  • Re: Problemi con la classe Scanner

    Dunque se l'eccezione ti si presenta puntualmente la seconda volta che esegui quel codice allora il problema è dovuto al fatto che ti fai una close solo scanner, la quale si ripercuote anche su "system.in", ovvero la console.. Quindi, di fatto, ti chiudi la console (che non può essere riaperta). La soluzione potrebbe consistere nell'utilizzo di un solo scanner e di chiuderlo solo alla fine
  • Re: Problemi con la classe Scanner

    In effetti se tolgo input.close() l'eccezione non c'è più, però il compilatore mi dà un warning di memory leak.
    Dovrei, come dici tu, creare un solo oggetto Scanner, ma i 2 printline() sono scritti all'interno di 2 classi diverse, quindi se creo l'oggetto scanner in una classe non lo vede più nell'altra... come posso fare?
  • Re: Problemi con la classe Scanner

    Secondo me potresti condividere lo stesso scanner, ad esempio creando un'ulteriore classe che ha il compito di effettuare letture da tastiera. Qualcosa del tipo:
    
    public class Lettore {
       private Scanner s;
       private Lettore instance;
    
       private Lettore(){
          s = new Scanner(System.in);
       }
    
       public static Lettore getInstance(){
          if (instance == null){
             instance = new Lettore();
          }
          return instance;
       }
    
       public void close(){
          s.close();
       }
    
       public String nextLine(){
          return s.nextLine();
       }
    }
    
  • Re: Problemi con la classe Scanner

    Adesso funziona, grazie, però non capisco a cosa servirebbe getInstance()?
  • Re: Problemi con la classe Scanner

    È l'applicazione del pattern singleton
  • Re: Problemi con la classe Scanner

    Interessante.. sembra molto utile, grazie
Devi accedere o registrarti per scrivere nel forum
11 risposte