Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 12
  1. #1

    Programma Per La Gestione Di Una Cartolibreria

    Ciao a tutti,
    volevo chiedervi una vostra opinione riguardo l'errore java.lang.NullPointerException che non mi permette il corretto funzionamento del programma. Vi ringrazio per la cortese attenzione.

    codice:
    import java.util.Scanner;
    public class CartoTeck_20 
    {static Scanner leggi= new Scanner(System.in); static Prodotto vet[]= new Prodotto[1000];
     static Fornitore f[]= new Fornitore[1000];
    
    	public static void main(String[] args) 
    	{int com = 0;
    	  
    	  do{ System.out.print("I comandi sono i seguenti: \n1-Inserimento nuovo prodotto in negozio " +
    	  		"\n2-Approvigionamento di ulteriori quantità di prodotto" + "\n3-Vendita prodotti" +
    			  "\n4-Calcolo valore totale merci in magazzino" + "\n5-Visualizzazione scheda prodotto" +
    	  		   "\n6-Visualizzazione in base al fornitore" + "\n7-Disponibilita' prodotto\n"); 
    		    com=leggi.nextInt();
    			switch(com)
    			{case 1:
    				nuovoProd(); break;
    			 case 2:
    				rifornimento(); break;
    			 case 3:
    				vendita(); break;
    			 case 4:
    				calMerci(); break;
    			 case 5:
    				scheda(); break;
    			 case 6:
    				prodForn(); break;
    			 case 7:
    				disponibilita(); break;
    			}
    	     }while(com!=0);
    	}
        
    		public static void nuovoProd()
    		{ int i=0;
    		   vet[i]=new Prodotto();
    		    System.out.print("Inserire codice nuovo prodotto: ");
    			vet[i].codiceProdotto=leggi.next();
    			System.out.print("Inserire descrizione prodotto: ");
    		    vet[i].descrizione=leggi.next();
    		    System.out.print("Inserire prezzo d'acquisto:€ ");
    		    vet[i].prezzoAcquisto=leggi.nextFloat();
    		    System.out.print("Inserire prezzo di vendita:€ ");
    		    vet[i].prezzoVendita=leggi.nextFloat();
    		    System.out.print("Inserire quantita': ");
    		    vet[i].quantitaMag=leggi.nextInt();
    		    fornitore();
    		    i=i+1;
    		    
    		 
    		}
    	    
    			public static void rifornimento()
    			{String cerca;int quanti=0;int i=0;
    			 
    				System.out.print("Inserire codice prodotto: ");
    				cerca= leggi.next();
    				System.out.print("Inserire quantita' prodotto: ");
    				quanti= leggi.nextInt();
    			
    				for(i=0;i<1000;i++)
    				{if (cerca.equals(vet[i].codiceProdotto))
    				   {vet[i].quantitaMag= quanti+vet[i].quantitaMag;}
    				}
    			
    			}
    	        
    				public static void vendita()
    				{String cerca;int quanti=0;int i=0;
    				 
    					System.out.print("Inserire codice prodotto: ");
    					cerca= leggi.next();
    					System.out.print("Inserire quantita' prodotto: ");
    					quanti= leggi.nextInt();
    				
    					for(i=0;i<1000;i++)
    					{if (cerca.equals(vet[i].codiceProdotto))
    					   {vet[i].quantitaMag= vet[i].quantitaMag-quanti;}
    					}
    				
    				}
    	            
    					public static void calMerci()
    					{int i=0;float valore=0;float valoreTot=0;
    					
    						for(i=0;i<1000;i++)
    						{
    							valore= vet[i].prezzoAcquisto * vet[i].quantitaMag;
    						    valoreTot=valore+valoreTot;
    						}
    							System.out.print("Il valore totale delle merci in magazzino e': ");
    							System.out.print(valoreTot);
    					}
    	                
    						public static void scheda()
    						{String cod;int i=0;
    							System.out.print("Inserire il codice prodotto da visualizzare: ");
    						    cod=leggi.next();
    							    for(i=0;i<1000;i++)
    							    { if(cod.equals(vet[i].codiceProdotto))
    							         {System.out.print(vet[i].codiceProdotto);
    							          System.out.print(vet[i].descrizione);
    							          System.out.print(vet[i].prezzoAcquisto);
    							          System.out.print(vet[i].prezzoVendita);
    							          System.out.print(vet[i].quantitaMag);
    							          System.out.print(f[i].ragSoc);
    							          System.out.print(f[i].indirizzo);
    							          System.out.print(f[i].citta);
    							         }
    							    	
    							    }
    						    
    						}
    						
    							public static void prodForn()
    							{String nome;int i=0;
    							     
    							     System.out.print("Inserire ragione sociale fornitore: ");
    							     nome=leggi.next();
    							      for(i=0;i<1000;i++)
    								  { if(nome.equals(f[i].ragSoc))
    							         {System.out.print(vet[i].codiceProdotto);
    							          System.out.print(vet[i].descrizione);
    							          System.out.print(vet[i].prezzoVendita);
    							         }
    									  
    								  }
    							
    							}
    							
    								public static void disponibilita()
    								{int n=0;int i=0;
    									System.out.print("Inserire quantita' minima: ");
    								    n=leggi.nextInt();
    								    for(i=0;i<1000;i++)
    									  { if(vet[i].quantitaMag < n)
    								         {System.out.print(vet[i].codiceProdotto);
    								          System.out.println(vet[i].descrizione);
    								         }
    										  
    									  }
    								 
    								
    								}
    								
    									public static void fornitore()
    									{int i=0;
    										f[i]=new Fornitore();
    										System.out.print("Inserire ragione sociale fornitore: ");
    									    f[i].ragSoc=leggi.next();
    									    System.out.println("Inserire indirizzo fornitore: ");
    								        f[i].indirizzo=leggi.next();
    								        System.out.println("Inserire citta fornitore: ");
    								        f[i].citta=leggi.next();
    									}
    	
    } 
    
    public class Fornitore 
    { String ragSoc; String indirizzo; String citta; 
    
    }
    
    public class Prodotto 
    {float prezzoAcquisto=0;float prezzoVendita=0;int quantitaMag=0; String descrizione; String codiceProdotto;
    
    }

  2. #2
    Utente di HTML.it
    Registrato dal
    Dec 2009
    Messaggi
    613

    Re: Programma Per La Gestione Di Una Cartolibreria

    Metti il codice fra tag [CODE] per mantenerne l'indentazione e renderlo leggibile, e posta il messaggio dell'eccezione con tutta la stack trace e la riga che l'ha sollevata.

    Visto che vedo utilizzare array, assicurati di aver inizializzato i singoli elementi degli array oltre che l'array stesso, è un errore comune che causa quell'eccezione.

  3. #3
    Questo è l'errore che si presenta in ogni metodo del programma:
    codice:
    Exception in thread "main" java.lang.NullPointerException
    	at CartoTeck_20.calMerci(CartoTeck_20.java:87)
    	at CartoTeck_20.main(CartoTeck_20.java:22)
    codice:
    import java.util.Scanner;
    public class CartoTeck_20 
    {static Scanner leggi= new Scanner(System.in); static Prodotto vet[]= new Prodotto[1000];
     static Fornitore f[]= new Fornitore[1000];
    
    	public static void main(String[] args) 
    	{int com = 0;
    	  
     do{ System.out.print("I comandi sono i seguenti: \n1-Inserimento nuovo prodotto in negozio " +"\n2-Approvigionamento di ulteriori quantità di prodotto" + "\n3-Vendita prodotti" + "\n4-Calcolo valore totale merci in magazzino" + "\n5-Visualizzazione scheda prodotto" +"\n6-Visualizzazione in base al fornitore" + "\n7-Disponibilita' prodotto\n"); 
    		    com=leggi.nextInt();
    			switch(com)
    			{case 1:
    				nuovoProd(); break;
    			 case 2:
    				rifornimento(); break;
    			 case 3:
    				vendita(); break;
    			 case 4:
    				calMerci(); break;
    			 case 5:
    				scheda(); break;
    			 case 6:
    				prodForn(); break;
    			 case 7:
    				disponibilita(); break;
    			}
    	     }while(com!=0);
    	}
        
    		public static void nuovoProd()
    		{ int i=0;
    		   vet[i]=new Prodotto();
    		    System.out.print("Inserire codice nuovo prodotto: ");
    			vet[i].codiceProdotto=leggi.next();
    			System.out.print("Inserire descrizione prodotto: ");
    		    vet[i].descrizione=leggi.next();
    		    System.out.print("Inserire prezzo d'acquisto:€ ");
    		    vet[i].prezzoAcquisto=leggi.nextFloat();
    		    System.out.print("Inserire prezzo di vendita:€ ");
    		    vet[i].prezzoVendita=leggi.nextFloat();
    		    System.out.print("Inserire quantita': ");
    		    vet[i].quantitaMag=leggi.nextInt();
    		    fornitore();
    		    i=i+1;
    		    
    		 
    		}
    	    
    			public static void rifornimento()
    			{String cerca;int quanti=0;int i=0;
    			 
    			System.out.print("Inserire codice prodotto: ");
    			cerca= leggi.next();
    			System.out.print("Inserire quantita' prodotto: ");
    			quanti= leggi.nextInt();
    			
    			for(i=0;i<1000;i++)
    			{if (cerca.equals(vet[i].codiceProdotto))
    			{vet[i].quantitaMag= quanti+vet[i].quantitaMag;}
    			}
    			
    			}
    	        
    		public static void vendita()
    	       {String cerca;int quanti=0;int i=0;
    				 
    		System.out.print("Inserire codice prodotto: ");
    		cerca= leggi.next();
    		System.out.print("Inserire quantita' prodotto: ");
    		quanti= leggi.nextInt();
    				
    		for(i=0;i<1000;i++)
    		{if (cerca.equals(vet[i].codiceProdotto))
    	          {vet[i].quantitaMag= vet[i].quantitaMag-quanti;}
    		}
    				
    		}
    	            
    		public static void calMerci()
    		{int i=0;float valore=0;float valoreTot=0;
    					
    		for(i=0;i<1000;i++)
    		{valore= vet[i].prezzoAcquisto * vet[i].quantitaMag;
    		  valoreTot=valore+valoreTot;
    		}
    		System.out.print("Il valore totale delle merci in magazzino e':€ ");
    		System.out.print(valoreTot);
    		}
    	                
    		public static void scheda()
    		{String cod;int i=0;
    		  System.out.print("Inserire il codice prodotto da visualizzare: ");
    		  cod=leggi.next();
    		   for(i=0;i<1000;i++)
    		   { if(cod.equals(vet[i].codiceProdotto))
    		     {System.out.print(vet[i].codiceProdotto);
    		       System.out.print(vet[i].descrizione);
    		       System.out.print(vet[i].prezzoAcquisto);
    		       System.out.print(vet[i].prezzoVendita);
    		       System.out.print(vet[i].quantitaMag);
    		       System.out.print(f[i].ragSoc);
    		       System.out.print(f[i].indirizzo);
    		       System.out.print(f[i].citta);
    		     }
    							    	
    		  }
    						    
    		}
    						
    		public static void prodForn()
    		{String nome;int i=0;
    							     
    		 System.out.print("Inserire ragione sociale fornitore: ");
    		 nome=leggi.next();
    		 for(i=0;i<1000;i++)
    		  { if(nome.equals(f[i].ragSoc))
    		    {System.out.print(vet[i].codiceProdotto);
    		      System.out.print(vet[i].descrizione);
    		      System.out.print(vet[i].prezzoVendita);
    		    }
    									  
                      }  
    							
    	         }
    							
    	  public static void disponibilita()
    	  {int n=0;int i=0;
    	   System.out.print("Inserire quantita' minima: ");
    	   n=leggi.nextInt();
    	    for(i=0;i<1000;i++)
    	    { if(vet[i].quantitaMag < n)
    	      {System.out.print(vet[i].codiceProdotto);
    		 System.out.println(vet[i].descrizione);
    	      }
    										  
    	    }
    								 
    								
    	  }
    								
    	public static void fornitore()
            {int i=0;
    	  f[i]=new Fornitore();
    	  System.out.print("Inserire ragione sociale fornitore: ");
    	  f[i].ragSoc=leggi.next();
    	  System.out.println("Inserire indirizzo fornitore: ");
    	  f[i].indirizzo=leggi.next();
    	  System.out.println("Inserire citta fornitore: ");
    	  f[i].citta=leggi.next();
    	}
    	
    } 
    
    
    
    public class Fornitore 
    { String ragSoc; String indirizzo; String citta; 
    
    }
    
    public class Prodotto 
    {float prezzoAcquisto=0;float prezzoVendita=0;int quantitaMag=0; String descrizione;
    String codiceProdotto;
    
    }

  4. #4
    Utente di HTML.it
    Registrato dal
    Dec 2009
    Messaggi
    613
    Ti ripeto, metti il codice fra tag [CODE] che così è illeggibile, e visto che sai la riga che solleva l'eccezione, indicacela.

    Comunque mi sembra che nel metodo calMerci l'unica cosa che possa sollevare una NPE è l'utilizzo degli elementi degli array, li hai inizializzati tutti uno per uno?

  5. #5

    Moderazione

    Originariamente inviato da Kaamos
    Ti ripeto, metti il codice fra tag [CODE] che così è illeggibile, e visto che sai la riga che solleva l'eccezione, indicacela.
    Confermo su entrambe le questioni; ora edito io (dato che l'autore di un post può editarlo solo per un'ora), ma nei prossimi post ricordati di inserire il codice tra tag CODE, così:
    [code]
    incolla qui il codice
    [/code]

    A proposito di questa e altre questioni, ti raccomando la lettura del regolamento.
    Amaro C++, il gusto pieno dell'undefined behavior.

  6. #6
    Tutti i campi del record sono stati inizializzati. Il problema dell' Exception in thread "main" java.lang.NullPointerException é presente in tutti i metodi tranne il primo. In alcuni metodi viene visualizzato sia l'errore, sia l'output del metodo.

  7. #7
    Utente di HTML.it
    Registrato dal
    Dec 2009
    Messaggi
    613
    Originariamente inviato da tommy_007
    Tutti i campi del record sono stati inizializzati. Il problema dell' Exception in thread "main" java.lang.NullPointerException é presente in tutti i metodi tranne il primo. In alcuni metodi viene visualizzato sia l'errore, sia l'output del metodo.
    Ripeto, il messaggio d'errore indica la riga che solleva l'eccezione, indicacela.
    effeffe

  8. #8
    Utente di HTML.it
    Registrato dal
    Mar 2010
    Messaggi
    4
    Ciao, secondo me il problema sta nel fatto che nel metodo calMerci, vai a calcolare il valore della variabile tot utilizzando gli attributi "quantitaMag" e "prezzoAcquisto". Quindi a meno che tu non abbia riempito tutto il vettore "vet", il programma si troverà ad accedere ad attributi di oggetti che non sono mai stati creati.
    Quindi per risolvere il problema, potresti creare un metodo per il caricamento del vettore, ed andandoci ad istanziare un oggetto ogni volta che aumenti l'indice, tipo:
    codice:
    public static void caricamento()
                    {int i;
                      for(i=0; i<1000; i++)
                           {vet[i]=new Prodotto();
                            }
                    }
    Poi però devi anche eliminare l'istruzione:
    codice:
    vet[i]=new Prodotto();
    dal metodo "nuovoProd", e devi andare a modificarci un contatore da creare in globale, che vai ad aumentare ogni volta che crei un nuovo prodotto, e non la variabile "i", che invece viene azzerata ad ogni chiamata del metodo

  9. #9

    Errori

    codice:
    at CartoTeck_20.rifornimento(CartoTeck_20.java:61) 	at CartoTeck_20.main(CartoTeck_20.java:18)
    codice:
    at CartoTeck_20.vendita(CartoTeck_20.java:76) 	at CartoTeck_20.main(CartoTeck_20.java:20)
    codice:
    at CartoTeck_20.calMerci(CartoTeck_20.java:87) 	at CartoTeck_20.main(CartoTeck_20.java:22)
    codice:
    at CartoTeck_20.scheda(CartoTeck_20.java:99) 	at CartoTeck_20.main(CartoTeck_20.java:24)
    codice:
    at CartoTeck_20.prodForn(CartoTeck_20.java:120) 	at CartoTeck_20.main(CartoTeck_20.java:26)
    codice:
    at CartoTeck_20.disponibilita(CartoTeck_20.java:135) 	at CartoTeck_20.main(CartoTeck_20.java:28)

  10. #10
    Utente di HTML.it L'avatar di Alex'87
    Registrato dal
    Aug 2001
    residenza
    Verona
    Messaggi
    5,802

    Re: Errori

    Originariamente inviato da tommy_007
    codice:
    at CartoTeck_20.rifornimento(CartoTeck_20.java:61) 	at CartoTeck_20.main(CartoTeck_20.java:18)
    codice:
    at CartoTeck_20.vendita(CartoTeck_20.java:76) 	at CartoTeck_20.main(CartoTeck_20.java:20)
    codice:
    at CartoTeck_20.calMerci(CartoTeck_20.java:87) 	at CartoTeck_20.main(CartoTeck_20.java:22)
    codice:
    at CartoTeck_20.scheda(CartoTeck_20.java:99) 	at CartoTeck_20.main(CartoTeck_20.java:24)
    codice:
    at CartoTeck_20.prodForn(CartoTeck_20.java:120) 	at CartoTeck_20.main(CartoTeck_20.java:26)
    codice:
    at CartoTeck_20.disponibilita(CartoTeck_20.java:135) 	at CartoTeck_20.main(CartoTeck_20.java:28)
    Ma secondo te lo stack trace così è leggibile? O_o
    SpringSource Certified Spring Professional | Pivotal Certified Enterprise Integration Specialist
    Di questo libro e degli altri (blog personale di recensioni libri) | ​NO M.P. TECNICI

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.