salve a tutti
dopo la bellezza di 20 anni mi sto rimettendo a ripassare java in quanto ho la possibilitá di accedere ad un corso gratuito avanzato a scopo assunzione. dal momento che mi hanno chiesto una buona infarinatura base, oggi ho deciso di provare a costruire una piccola rubrica telefonica che acquisisce tramite un oggetto contatto, nome, cognome, numero e indirizzo di 5 persone massimo. queste 5 persone sono rappresentate da un array dell'oggetto persone di classe contatto. il codice é strutturato con un menu di selezione iniziale che in base al numero inserito, dovrebbe far inserire i dati, sovrascriverli in caso di array pieno o stampare tutto a video (almeno per il momento, successivamente vorrei portare tutto su un file per il salvataggio).
il problema attuale del codice che mi sta facendo uscire pazzo, é che dopo aver inserito i dati del primo utente, il software mi restituisce:
Exception in thread "main" java.lang.NullPointerException: Cannot invoke "Contatto.compilazione(String, String, String, String)" because "persone[a]" is null
at Main.main(Main.java:37)
altra cosa strana é che se non inserisco due volte il comando per l'acquisizione del primo valore, lo script passa direttamente al secondo. vi allego il codice. se qualcuno riuscisse a farmi capire dove sta il problema ve ne sarei grato.
Contatto.java
dopo la bellezza di 20 anni mi sto rimettendo a ripassare java in quanto ho la possibilitá di accedere ad un corso gratuito avanzato a scopo assunzione. dal momento che mi hanno chiesto una buona infarinatura base, oggi ho deciso di provare a costruire una piccola rubrica telefonica che acquisisce tramite un oggetto contatto, nome, cognome, numero e indirizzo di 5 persone massimo. queste 5 persone sono rappresentate da un array dell'oggetto persone di classe contatto. il codice é strutturato con un menu di selezione iniziale che in base al numero inserito, dovrebbe far inserire i dati, sovrascriverli in caso di array pieno o stampare tutto a video (almeno per il momento, successivamente vorrei portare tutto su un file per il salvataggio).
il problema attuale del codice che mi sta facendo uscire pazzo, é che dopo aver inserito i dati del primo utente, il software mi restituisce:
Exception in thread "main" java.lang.NullPointerException: Cannot invoke "Contatto.compilazione(String, String, String, String)" because "persone[a]" is null
at Main.main(Main.java:37)
altra cosa strana é che se non inserisco due volte il comando per l'acquisizione del primo valore, lo script passa direttamente al secondo. vi allego il codice. se qualcuno riuscisse a farmi capire dove sta il problema ve ne sarei grato.
Java:
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
int selezione=0;
String nome="a";
String cognome="a";
String numero="a";
String indirizzo="a";
int a=0, b=0;
Contatto[] persone = new Contatto[5];
do{
//stampa menu e acquisizione opzione:
System.out.printf("Rubrica 1.0 \n \n Seleziona l'opzione: \n 1- inserisci contatto \n 2- cerca contatto \n 3- salva contatti \n 4- visualizza rubrica completa \n 5- esci \n\n");
System.out.printf("inserisci numero opzione:");
//acquisizione opzione.
selezione=scan.nextInt();
System.out.println("hai selezionato:"+selezione);
switch(selezione) {
case 1:
if(a<5) {
System.out.println("nome:");
//non capisco perche'lo skippa.
nome = scan.nextLine();
nome = scan.nextLine();
System.out.println("cognome:");
cognome = scan.nextLine();
System.out.println("numero:");
numero = scan.nextLine();
System.out.println("indirizzo:");
indirizzo = scan.nextLine();
//passo dati allóggetto:
persone[a].compilazione( nome, cognome, numero, indirizzo);
a++;
}else {
System.out.println("memoria piena. seleziona la casella da sovrascrivere(1-5):");
b=a;
a = scan.nextInt();
//inserimento
System.out.println("nome:");
//non capisco perche'lo skippa se ne metto 1.
nome = scan.nextLine();
nome = scan.nextLine();
System.out.println("cognome:");
cognome = scan.nextLine();
System.out.println("numero:");
numero = scan.nextLine();
System.out.println("indirizzo:");
indirizzo = scan.nextLine();
//passo dati al costruttore dell'oggetto creato
persone[0].compilazione(nome, cognome, numero, indirizzo);
a=b;
}
break;
case 2:
//contatto.ricerca();
break;
case 3:
// contatto.salva();
break;
case 4:
for(int i=0;i<5;i++) {
if(persone[i]!=null)
persone[i].visualizzaDati();
else
System.out.println("contatto vuoto");
}
break;
case 5:
break;
default:
selezione = 0;
}
if(selezione==5)
System.out.printf("grazie per aver usato la rubrica!");
}while(selezione!=5);
}
}
Contatto.java
Java:
public class Contatto {
private String nome;
private String cognome;
private String numero;
private String indirizzo;
public Contatto() {
this.nome = "vuoto";
this.cognome = "vuoto";
this.numero = "vuoto";
this.indirizzo = "vuoto";
}
public void compilazione(String nome, String cognome, String numero, String indirizzo) {
this.nome = nome;
this.cognome = cognome;
this.numero = numero;
this.indirizzo = indirizzo;
}
public void visualizzaDati() {
System.out.printf("nome inserito:" + this.nome);
System.out.printf("cognome inserito:" + this.cognome);
System.out.printf("numero inserito:" + this.numero);
System.out.printf("indirizzo inserito:" + this.indirizzo);
}
}
Ultima modifica da un moderatore: