Problema inserimento dati da tastiera con Java.util.Scanner?

Ciao a tutti.

Da poco ho installato Eclipse su Debian e sto scrivendo alcuni programmi in java.

Per iniziare a ripetermi i concetti mi sono scritto alcune righe di codice per stampare, calcolare e acquisire dati in ingresso da tastiera e mi sono bloccato quando vedevo che la classe Scanner mi faceva brutti scherzi. Se scrivo il seguente programma:

public class HelloWorld {

public static void main(String[] args) {

System.out.print("Inserisci una stringa: ");

Scanner in = new Scanner(System.in);

String a = in.next(); //oppure in.nextLine();

System.out.println("La stringa immessa è: " + a);

}

}

Si comporta in modo strano, ovvero quando avvio il programma esce la scritta "inserisci la stringa", inserisco il valore e premo invio.....e non succede nulla, devo premere un'altra volta invio per far continuare il programma.

E' normale questo?? Per non parlare di altri errori quali il fatto che accetta come separatore decimale la virgola della tastiera e non il punto.

Quale può essere il problema?

1 risposta

Classificazione
  • 9 anni fa
    Risposta preferita

    Attenzione che next legge una parola circondata da caratteri spaziatura (spazi, tab, newline).

    Se devi leggere un nome composto ti consiglio di usare nextLine.

    Ricordati che se leggi con nextLine dopo aver usato next o nextInt ti verrà letta una linea vuota perché il caratter newline rimane nel buffer tastiera. Se devi leggere un numero e poi una stringa fai così:

    int n = in.nextInt(); // legge il numero

    in.nextLine(); // toglie newline dal buffer tastiera

    String s = in.nextLine(); // legge la stringa fino a fine riga

    Scanner chiede la virgola e non il punto perché è localizzato italiano. Se vuoi localizzarlo in americano devi dare l'istruzione in.setLocale( Locale.US ); dopo averlo creato

    Se riscontri dei funzionamenti strani prova a lanciare il tuo programma da terminale:

    - apri un terminale

    - vai nella cartella che contiene la classe (ad esempio NomeProgramma.class)

    - lancia il programma con; java NomeProgramma

    Oppure provalo in un altro computer / sistema operativo.

Altre domande? Fai una domanda e ottieni le risposte che cerchi.