Java non prende input

  • Creatore Discussione Creatore Discussione teto
  • Data di inizio Data di inizio

teto

Nuovo Utente
23 Gen 2012
3
0
0
Vi prego aiutatemi, non capisco dove sbaglio...nell'esecuzione di questo programmino semplice semplice non mi prende (non lo legge, non so che fa!!) l'input del secondo oggetto.
allego quello che ho scritto
 

Allegati

Sei sicuro che non ci sia qualcosa che non va nella tua JVM? Io ho provato e funziona perfettamente.

La classe ProvaImpiegato:
Codice:
import java.util.Scanner;

/**
 * @author alessandro
 * 
 */
public class ProvaImpiegato
{
    /**
     * @param args
     */
    public static void main(String[] args)
    {
        Scanner input = new Scanner(System.in);

        Impiegato operaio1 = new Impiegato("%s\n", " %s\n", 0.0);
        System.out.print("Inserisci nome operaio:");
        String name = input.nextLine();
        operaio1.setNome(name);

        System.out.print("Inserisci cognome operaio:");
        String surname = input.nextLine();
        operaio1.setCognome(surname);

        System.out.print("Inserisci stipendio:");
        double cifra = input.nextDouble();
        operaio1.setStipendio(cifra);

        System.out.print("\n\n");

        System.out.printf("L'OPERAIO %s %s PRENDE AL MESE: %.2f\n",
                operaio1.getNome(), operaio1.getCognome(),
                operaio1.getStipendio());
    }
}
E la classe Impiegato (che ho dovuto fare da me, ma penso la tua sia simile):
Codice:
/**
 * @author alessandro
 * 
 */
public class Impiegato
{
    String nome;
    String cognome;
    double stipendio;

    /**
     * @param string
     * @param string2
     * @param d
     */
    public Impiegato(String string, String string2, double d)
    {
        // TODO Auto-generated constructor stub
    }

    /**
     * @return Il cognome.
     */
    public String getCognome()
    {
        return cognome;
    }

    /**
     * @return Il nome.
     */
    public String getNome()
    {
        return nome;
    }

    /**
     * @return Lo stipendio.
     */
    public double getStipendio()
    {
        return stipendio;
    }

    /**
     * @param cognome
     */
    public void setCognome(String cognome)
    {
        this.cognome = cognome;
    }

    /**
     * @param nome
     */
    public void setNome(String nome)
    {
        this.nome = nome;
    }

    /**
     * @param stipendio
     */
    public void setStipendio(double stipendio)
    {
        this.stipendio = stipendio;
    }

}
E l'esecuzione è questa:
Codice:
Inserisci nome operaio:Pinco
Inserisci cognome operaio:Pallino
Inserisci stipendio:2500


L'OPERAIO Pinco Pallino PRENDE AL MESE: 2500,00
A te invece quale errore restituisce?
 
Intanto grazie mille per avermi risposto...il mio problema non è con un operaio solo, è quando aggiungo il secondo...quando finisce correttamente con operaio1 non mi fa scrivere il nome del secondo.
La JVM dovrebbe essere a posto, finora non ho avuto problemi.

Se vedi bene, nel file che ho allegato, ci sono due operai.

grazie ancora
 
Ho fatto un po' di ricerche e trovato un problema simile al tuo. Devi aggiungere una chiamata a nextLine() dopo che visualizzi i dati del primo impiegato, così:
Codice:
    public static void main(String[] args)
    {
        Scanner input = new Scanner(System.in);

        Impiegato operaio1 = new Impiegato("%s\n", " %s\n", 0.0);

        System.out.print("Inserisci nome operaio:");
        String name = input.nextLine();
        operaio1.setNome(name);

        System.out.print("Inserisci cognome operaio:");
        String surname = input.nextLine();
        operaio1.setCognome(surname);

        System.out.print("Inserisci stipendio:");
        double cifra = input.nextDouble();
        operaio1.setStipendio(cifra);

        System.out.print("\n\n");

        System.out.printf("L'OPERAIO %s %s PRENDE AL MESE: %.2f\n",
                operaio1.getNome(), operaio1.getCognome(),
                operaio1.getStipendio());

        // aggiungi questa riga
        input.nextLine();

        Impiegato operaio2 = new Impiegato("%s\n", " %s\n", 0.0);

        System.out.print("\n\n");

        System.out.print("Inserisci nome:");
        String name2 = input.nextLine();
        operaio2.setNome(name2);

        System.out.print("Inserisci cognome:");
        String surnname2 = input.nextLine();
        operaio2.setCognome(surnname2);

        System.out.print("Inserisci stipendio");
        double cifra2 = input.nextDouble();
        operaio2.setStipendio(cifra2);

        System.out.print("\n\n");

        System.out.printf("L'OPERAIO %s %s PRENDE AL MESE: %.2f\n",
                operaio2.getNome(), operaio2.getCognome(),
                operaio2.getStipendio());
    }
Comunque, per seguire il principio DRY (Don't Repeat Yourself), io farei un metodo che esegue tutta l'operazione di recupero dei dati:
Codice:
import java.util.Scanner;

/**
 * @author alessandro
 * 
 */
public class ProvaImpiegato
{
    /**
     * @param args
     */
    public static void main(String[] args)
    {
        Scanner input = new Scanner(System.in);

        for (int i = 0; i < 2; i++) {
            Impiegato impiegato = getNewImpiegato(input);

            System.out.println("L'impiegato " + impiegato.getNome() + " "
                    + impiegato.getCognome() + " guadagna "
                    + impiegato.getStipendio() + " euro al mese.");
            System.out.println();

            input.nextLine();
        }
    }

    protected static Impiegato getNewImpiegato(Scanner input)
    {
        Impiegato impiegato = new Impiegato("%s\n", " %s\n", 0.0);

        System.out.print("Nome impiegato:");
        String name = input.nextLine();
        impiegato.setNome(name);

        System.out.print("Cognome impiegato:");
        String surname = input.nextLine();
        impiegato.setCognome(surname);

        System.out.print("Stipendio impiegato:");
        double cifra = input.nextDouble();
        impiegato.setStipendio(cifra);

        return impiegato;
    }
}
Stesso risultato, ma con meno codice. Questo significa che se dovrai cambiare qualcosa nella tua applicazione che ha a che fare col modo in cui generi la classe Impiegato, dovrai farlo solamente in quel metodo.
 

Discussioni simili