Visualizzazione dei risultati da 1 a 5 su 5
  1. #1
    Utente di HTML.it
    Registrato dal
    Aug 2014
    Messaggi
    12

    problemi dati collaudo java

    Salve a tutti. Devo implementare una classe Palestra con la relativa classe collaudo dove devo inserire per forza in questa classe i dati collaudo (dati dal docente).
    Il codice mi da il seguente errore:
    codice:
    Exception in thread "main" java.lang.NullPointerException
        at Operazioni.showTab(Operazioni.java:52)
        at Test.main(Test.java:52)
    Questa è la classe dei costruttori:

    codice:
    public class Iscritti {
    
        /**
         * COSTRUTTORI
         */
        
        public Iscritti(String cognome, String nome, String data, String tipo)
        {
            this.cognome=cognome;
            this.nome=nome;
            this.data=data;
            this.tipo=tipo;
        }
        
        public String getName()
        {
            return nome;
        }
        
        public String getSur()
        {
            return cognome;
        }
        
        public String getDate()
        {
            return data;
        }
        
        public String getType()
        {
            return tipo;
        }
        
    //campi esemplare
        private String nome;
        private String cognome;
        private String data;
        private String tipo;
        
    
    }
    
    Questa è la classe dei metodi:
    
    
    import java.text.ParseException;
    import java.text.SimpleDateFormat;
    import java.util.Date;
    import java.util.Scanner;
    
    public class Operazioni {
        
        Scanner in = new Scanner(System.in);
        
        //DATI INPUT
        public Iscritti[] datiInput()
        {
            System.out.println("QUANTI ISCRITTI VUOI INSERIRE?");
            int num = in.nextInt();
            Iscritti[] iscritti = new Iscritti[num];
            for(int i=0;i<iscritti.length;i++)
            {
                System.out.println("Cognome iscritto "+(i+1)+": ");
                String cognome = in.next();
                System.out.println("Nome iscritto "+(i+1)+": ");
                String nome = in.next();
                System.out.println("Data iscrizione iscritto "+(i+1)+": ");
                String data = in.next();
                System.out.println("tipo abbonamento iscritto "+(i+1)+": ");
                String tipo = in.next();
                
                iscritti[i]= new Iscritti(cognome,nome,data,tipo);
            }
            return(iscritti);
        }
        
     
        //Visualizzazione array in forma tabellare
        
        public void showTab(Iscritti[]v)
        {
            String divider = "___________________________________________________";
            String title1 = "COGNOME";
            String title2 = "NOME";
            String title3 = "DATA";
            String title4 = "TIPO";
            
            System.out.printf("%-15s %-15s %-15s %-15s %n", title1, title2, title3, title4);
            System.out.println(divider);
            System.out.println("");
            
            for(int i=0;i<v.length;i++)
            {
                String name = v[i].getName();
                String surname = v[i].getSur();
                String date= v[i].getDate();
                String type= v[i].getDate();
                
                System.out.printf("%-15s %-15s %-15s %-15s %n", surname, name, date, type);
            
            }
            System.out.println(divider);
            System.out.println("");
        
        }
        
        //ORDINAMENTO ARRAY IN BASE AL COGNOME
        //(insertion sort)
        
        public void ordSur(Iscritti[]v)
        {
            Iscritti temp;
            for(int i=1;i<v.length;i++)
            {
                for(int j=i;j>0;j--)
                {
                    if((v[j].getSur()).compareToIgnoreCase(v[j-1].getSur())<0)
                    {
                        temp = v[j];
                        v[j]=v[j-1];
                        v[j-1]=temp;
                    }
                }
            }
        }
        
        //TRASFORMO LA STRINGA CORRISPONDENTE ALLA DATA IN UNA DATA VERA
    
        private static Date trasf(String data)
        {
            Date data1=null;
            try{
                SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy");
                data1 = sdf.parse(data);
            
            }catch(ParseException ex){ex.printStackTrace();}
            
            return(data1);
        }
        
        
        //ABBONAMENTO CHE SCADE PER PRIMO
        public void scadenza(Iscritti[] v)
        {
            //array di date
    
            Date[] array = new Date[v.length];
            for(int i=0;i<array.length;i++)
            {
                array[i]=Operazioni.trasf(v[i].getDate());
            }
            
            //contiene i dati del minimo
            Iscritti min= v[0];
            Date temp= array[0];
            for(int i=1;i<v.length;i++)
            {
                if((array[i]).compareTo(temp)<0)
                {
                    min = v[i];
                    temp = array[i];
                }
            }
            
            System.out.println(min.getSur()+", "+min.getName()+", "
                    +min.getDate()+", "+min.getType());
            
        }
        
        //CALCOLO PERCENTUALE DIVERSI TIPI ABBONAMENTO
        public void percAbb(Iscritti[]v)
        {
            int contA=0;
            int contB=0;
            int contC=0;
            
            for(int i=0;i<v.length;i++)
            {
                if((v[i].getType()).equalsIgnoreCase("A"))
                {
                    contA++;
                }
                if((v[i].getType()).equalsIgnoreCase("B"))
                {
                    contB++;
                }
                if((v[i].getType()).equalsIgnoreCase("C"))
                {
                    contC++;
                }
            }
            int somma = contA+contB+contC;
            int percA = (100/somma)*contA;
            int percB = (100/somma)*contB;
            int percC = (100/somma)*contC;
            
            System.out.println("Percentuale abb.A: "+percA+"%");
            System.out.println("Percentuale abb.B: "+percB+"%");
            System.out.println("Percentuale abb.C: "+percC+"%");
    
        }
        
         
    }
    
    E questa è la classe collaudo:
    import java.util.Scanner;
    
    
    public class Test {
        
        public static Iscritti[] datiCollaudo()
        {
            Iscritti[] v = new Iscritti[5];
            v[0]= new Iscritti("Panucci", "Luigi", "15/10/2012", "A");
            v[1]= new Iscritti("Biffi", "Andrea", "22/11/2012", "B");
            v[2]= new Iscritti("Ambruoso", "Ugo", "18/12/2012", "C");
            v[3]= new Iscritti("Diana", "Elena", "04/01/2013", "C");
            v[4]= new Iscritti("Giacchi", "Maria", "07/01/2013", "B");
            
            return (v);
        }
    
        public static void main(String[] args) {
            // TODO Auto-generated method stub
            
            Scanner in = new Scanner(System.in);
            int scelta;
            Iscritti[] iscritti = null;
            Operazioni temp;
            
            do{
                System.out.println("Scegli un'operazione: "
                        +"\n1.Popolamento con dati da tastiera"
                        +"\n2.Popolamento con dati di collaudo"
                        +"\n3.Visualizzazione array in forma tabellare"
                        +"\n4.Ordinamento dell'array per cognome"
                        +"\n5.Abbonamento che scade per primo"
                        +"\n6.Percentuale diversi tipi abbonamento"
                        +"\n7.Termina programma.");
                
                scelta = in.nextInt();
                
                switch(scelta)
                {
                case 1:
                    temp=new Operazioni();
                    iscritti=temp.datiInput();
                    break;
                    
                case 2:
                    temp = new Operazioni();
                    datiCollaudo();
                    break;
                    
                case 3:
                    temp = new Operazioni();
                    temp.showTab(iscritti);
                    break;
                    
                case 4:
                    temp = new Operazioni();
                    temp.ordSur(iscritti);
                    break;
                    
                case 5:
                    temp = new Operazioni();
                    temp.scadenza(iscritti);
                    break;
                    
                case 6:
                    temp = new Operazioni();
                    temp.percAbb(iscritti);
            
                }
    
                
            }while(scelta!=7);
            System.out.println("Programma terminato!");
            
        }
    
    }
    Vi ringrazio in anticipo
    Ultima modifica di MItaly; 27-08-2014 a 00:06 Motivo: Tag CODE

  2. #2

    Moderazione

    Benvenuto sul forum! Ti ricordo che:
    • le discussioni relative a Java non sono trattate qui, ma nell'apposita sottosezione;
    • il codice va specificato tra tag [CODE] ... [/CODE], altrimenti perde indentazione e evidenziazione della sintassi.


    Ora correggo io e provvedo a spostare il thread, in futuro imposta correttamente la discussione fin da subito; nel frattempo ti consiglio di dare un'occhiata al regolamento.
    Amaro C++, il gusto pieno dell'undefined behavior.

  3. #3
    Utente di HTML.it L'avatar di Nikopol
    Registrato dal
    Jan 2011
    Messaggi
    120
    Ciao,
    il problema è che il metodo nel main datiCollaudo() retituisce un Array di Iscritti, ma quando lo richiami nello switch lo usi come se fosse un void:
    codice:
         case 2:
              temp = new Operazioni();
              datiCollaudo();
              break;
    quindi i dati di collaudo non vengono salvati da nessuna parte e invocando il metodo showTab() su un array vuoto ovviamante viene lanciato un NullPointerException.

    Per risolvere dovresti assegnare a iscritti l'array restituito da datiCollaudo()
    codice:
        case 2:
                 temp = new Operazioni();
                 iscritti=datiCollaudo();
                 break;
    PS: Ti consiglio di eseguire sempre i null check.
    La Guida Galattica è infallibile.
    È la realtà, spesso, ad essere inesatta.

  4. #4
    Utente di HTML.it
    Registrato dal
    Feb 2007
    Messaggi
    4,157
    Quote Originariamente inviata da Nikopol Visualizza il messaggio

    PS: Ti consiglio di eseguire sempre i null check.
    più che il null check, quando si usano strutture dati, preferisco avere una struttura vuota.
    Posso avere un minimo di risorse in più occupate, ma, specie nei casi in cui passo per metodi privati o comunque non esposti al pubblico, evito di preoccuparmi e di fare un if spesso inutile
    RTFM Read That F*** Manual!!!

  5. #5
    Utente di HTML.it
    Registrato dal
    Aug 2014
    Messaggi
    12
    Grazie mille Nikopol!! finalmente ho risolto

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.