Restituire una stringa da System.in

di il
2 risposte

Restituire una stringa da System.in

Buonasera a tutti , ho un problema con java.
Una classe esterna deve gestire I/O , quindi ogni qualvolta ho bisogno di passere per quest'ultima. Nel caso di lettura devo tornare una stringa nella quale è contenuta la Scanner(System.in) , ma dopo la prima chiamata in seguito mi da errore di linea vuota perché non da il tempo all'utente di scrivere , sono sicuro sia un mio errore ma non so come porvi rimedio se qualcuno ha qualche idea mi darebbe una grandissima mano. Di seguito riporterò il codice in questione.

this.utente = new InterfacciaUtenteConsole(); // InterfacciaUtenteConsole è una classe che si appoggia ad un interfaccia
public void gioca() {
String istruzione ;

this.utente.mostraMessaggio(MESSAGGIO_BENVENUTO);

do
istruzione = this.utente.prendiIstruzione();
while (!processaIstruzione(istruzione));
}

public class InterfacciaUtenteConsole implements InterfacciaUtente{ // la classe in questione

@Override
public void mostraMessaggio(String messaggio) {
System.out.println(messaggio);
}

@Override
public String prendiIstruzione() {
String istruzione = null;
Scanner scannerDiLinee = new Scanner(System.in);
istruzione = scannerDiLinee.nextLine();

scannerDiLinee.close();
return istruzione ;}}

prima di dover fare questa modifica e passare per una classe esterna il codice era il seguente(e funzionava senza problemi , facendomi inserire sempre prima un input e poi lo leggeva):
public void gioca() { // CLASSE OBSOLETA
String istruzione;
Scanner scannerDiLinee;

this.utente.mostraMessaggio(MESSAGGIO_BENVENUTO);
scannerDiLinee = new Scanner(System.in);
do
istruzione = scannerDiLinee.nextLine();
while (!processaIstruzione(istruzione));

scannerDiLinee.close();
}
Grazie mille a tutti! spero di essere stato il più chiaro possibile

2 Risposte

  • Re: Restituire una stringa da System.in

    Ci sono 2 aspetti da considerare del tuo codice:

    1) Quando si usa Scanner connesso a System.in, si dovrebbe avere UNO solo di oggetto Scanner per System.in . Non se ne deve creare uno nuovo ad ogni richiesta di inserimento.

    2) Il System.in è un oggetto gestito dal framework e di norma non lo si chiude esplicitamente. Di conseguenza neanche lo Scanner connesso a System.in generalmente si chiude con un close esplicito.
  • Re: Restituire una stringa da System.in

    Grazie mille della risposta!
    Mi hai acceso una lampadina e sono riuscito a risolvere . Grazie ancora , lo posto qui sotto in modo da poter mostrare ad altri interessati come risolvere , penso sia giusto visto che non ho più problemi con i test e con un esecuzione.

    public class InterfacciaUtenteConsole implements InterfacciaUtente{

    private Scanner scannerDiLinee;

    public InterfacciaUtenteConsole() {
    this.scannerDiLinee = new Scanner(System.in);
    }


    @Override
    public void mostraMessaggio(String messaggio) {
    System.out.println(messaggio);
    }

    @Override
    public String prendiIstruzione() {
    String istruzione = null;
    //Scanner scannerDiLinee = new Scanner(System.in);
    istruzione = scannerDiLinee.nextLine();

    //scannerDiLinee.close();
    return istruzione ;

    }
Devi accedere o registrarti per scrivere nel forum
2 risposte