Visualizzazione dei risultati da 1 a 3 su 3
  1. #1
    Utente di HTML.it
    Registrato dal
    Jul 2009
    Messaggi
    88

    problema inserimento input array di oggetti

    salve a tutti, sono nuovo nella programmazione in java e sto sbattendo per 2 giorni su un esercizio che devo inserire in input un array di oggetti di tipo Persona
    Nei manuali, gli esempi di vettori di tipo oggetti sono già inizializzati nella dichiarazione, quindi ho provato ad inventarmi qualcosa per acquisire in input.

    ecco il codice:

    codice:
                    /* ------- Classe per testare il programma --------- */
    package provaArray;
    import java.util.*;
    public class Test {
        public static void main(String [] args){
            String nome,cognome;
            int eta;
            Scanner in=new Scanner (System.in);
            Persona V[]=new Persona[50];
            for (int i=0;i<5;i++){
                nome=in.nextLine();
                cognome=in.nextLine();
                 
                eta = in.nextInt();
                
                V[i]=new Persona(nome,cognome,eta);
            }
    
           for (int i=5;i<5;i++){
              System.out.println(V[i].nome+" "+V[i].cognome+" "+V[i].eta);
            
        }
    
    }// fine classe Test
    
    
    /* -------------Classe Persona che inizializza l'oggetto-------- */
    package provaArray;
    import java.util.*;
    
    public class Persona {
    
        public int V[];
        public String nome;
        public String cognome;
        public int eta;
    
        Persona(String nome, String cognome, int eta) {
            this.nome=nome;
            this.cognome=cognome;
            this.eta=eta;
        }
    
    
        
    }// fine classe Persona
    Il problema è che non mi fa inserire l'eta in input:
    inserisco nome,cognome,eta al primo ciclo e ok me lo fa inserire
    al secondo ciclo mi da errore.
    codice:
    /*
    Exception in thread "main" java.util.InputMismatchException
            at java.util.Scanner.throwFor(Scanner.java:840)
            at java.util.Scanner.next(Scanner.java:1461)
            at java.util.Scanner.nextInt(Scanner.java:2091)
            at java.util.Scanner.nextInt(Scanner.java:2050)
            at provaArray.Test.main(Test.java:15)
    Java Result: 1
    
    */
    Perchè?

    Grazie...

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284

    Re: problema inserimento input array di oggetti

    Originariamente inviato da feys88
    Il problema è che non mi fa inserire l'eta in input:
    inserisco nome,cognome,eta al primo ciclo e ok me lo fa inserire
    al secondo ciclo mi da errore.

    Perchè?
    Il problema nasce in generale quando si mischiano nextLine() e nextXYZ() (XYZ altro tipo).

    Se per un nextInt() tu digiti 123 poi INVIO il nextInt ritorna effettivamente 123 ma il newline rimane ancora lì da processare (non viene scartato) e ad un successivo nextLine() viene "consumato" e preso subito immediatamente come riga "vuota", senza che tu possa inserire qualcosa per quel nextLine.

    Morale: o si "sa" come funziona il tutto e si mischiano i nextLine/nextXYZ in modo saggio .... oppure è bene prendere in input sempre una riga (nextLine() ) e poi eventualmente parsare la stringa per convertirla in int, long, ecc... secondo quanto necessario con i parseXXX() delle classi wrapper (Integer, Long, ecc...).
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    Utente di HTML.it
    Registrato dal
    Jul 2009
    Messaggi
    88
    In effetti hai ragione ho modificato il codice in questo modo e funziona.

    codice:
          for (int i=0;i<5;i++){
                nome=in.nextLine();
                cognome=in.nextLine();
                String num=in.nextLine();
                eta = Integer.parseInt(num);
                
                V[i]=new Persona(nome,cognome,eta);
            }
    Quindi l'alternativa dovrebbe essere sempre questo cioè convertire un int in una stringa con parseInt?
    Accetto se ce ne sono altre alternative.
    Comunque grazie del suggerimento.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.