Aiuto su un programma semplice.

di il
3 risposte

Aiuto su un programma semplice.

Salve ho un problema con un programma che presi in input 10 utenti (nome,cognome,sesso,numero tessera),assegni a loro(randomicamente) un posto sull'aereo,un numero di punti di fedeltà ed in base ad essi uno stato(BRONZE,SILVER,GOLD,PLATINUM). Il programma funziona,l'unico problema è che quando mi chiede di inserire i dati del passeggero,i dati del primo li prende tutti mentre quelli successivi salta il nome. Ecco una porzione di codice:
public class Passeggero {
Random random = new Random();
private String nome;
private String cognome;
private int puntifedelta;
private int posto;
private String statotessera;
private char sesso;
private String numerotessera;
public void leggiDati() throws IOException{
    InputStreamReader input = new InputStreamReader(System.in);
    BufferedReader t = new BufferedReader(input);
    System.out.println("Inserisci nome: ");
    nome = t.readLine();
    System.out.println("Inserisci cognome: ");
    cognome = t.readLine();
    System.out.println("Inserisci il numero della tessera: ");;
    numerotessera = t.readLine();
    System.out.println("Inserisci il sesso dell'utente (M/F): ");
    sesso = (char) System.in.read();
}
....
public static void main(String[] args) throws IOException {
    Passeggero lista[]= new Passeggero[10];
    for (int i=0;i<2;i++){
    lista[i] = new Passeggero();
    lista[i].leggiDati();
    lista[i].valutaPunti();
    lista[i].valutaStato();
    lista[i].assegnaPosto();
    }
    for (int i=0;i<2;i++){
    lista[i].stampaTessera();
    }

3 Risposte

  • Re: Aiuto su un programma semplice.

    Ishima ha scritto:


    l'unico problema è che quando mi chiede di inserire i dati del passeggero,i dati del primo li prende tutti mentre quelli successivi salta il nome.
    Innanzitutto non va molto bene il fatto che leggi un po' dal BufferedReader, un po' direttamente da System.in.
    Inoltre, read() legge un solo carattere (per essere corretti, 1 byte ma supponiamo ora 1 carattere=1 byte) ma siccome l'input su console generalmente è bufferizzato, i caratteri arrivano alla applicazione solo quando l'utente preme invio. Quindi se tu digiti S<invio>. read() legge la S ma il invio resta da leggere e questo sicuramente fa "saltare" un successivo readLine().

    Cambia un po' le cose, perché così non va granché bene.
  • Re: Aiuto su un programma semplice.

    andbin ha scritto:


    Ishima ha scritto:


    l'unico problema è che quando mi chiede di inserire i dati del passeggero,i dati del primo li prende tutti mentre quelli successivi salta il nome.
    Innanzitutto non va molto bene il fatto che leggi un po' dal BufferedReader, un po' direttamente da System.in.
    Inoltre, read() legge un solo carattere (per essere corretti, 1 byte ma supponiamo ora 1 carattere=1 byte) ma siccome l'input su console generalmente è bufferizzato, i caratteri arrivano alla applicazione solo quando l'utente preme invio. Quindi se tu digiti S<invio>. read() legge la S ma il invio resta da leggere e questo sicuramente fa "saltare" un successivo readLine().

    Cambia un po' le cose, perché così non va granché bene.
    Ho dichiarato il sesso come stringa e preso l'input normalmente. Funziona adesso,grazie
  • Re: Aiuto su un programma semplice.

    Prego, se però volessimo fare i "pignoli" (e io lo sono ), non sarebbe neanche buono ricreare ogni volta la catena di I/O verso System.in. Generalmente va fatto una volta sola.
Devi accedere o registrarti per scrivere nel forum
3 risposte