Ciao,
continua a non funzionare e mi dà l'errore:
Exception in thread "main" java.lang.NullPointerException
at Archivio.inserimento(Archivio.java:168)
at Archivio.inserimentoDizionario(Archivio.java:183)
at Archivio.main(Archivio.java:53)
ma non riesco a capire cosa non va
riposto il codice della classe e quello della classe Dizionario (dove avviene l'input testuale)
codice:
import java.io.*;
import java.util.List;
import java.util.Vector;
public class Archivio implements Serializable{
private Vector <Dizionario> archivioDizionari;
/**
* Costruttore
*/
public Archivio(int pos,String nomeDiz, String linguaInserita, Vector<Lemma> listaLemmi) {
Dizionario nuovoDizionario = new Dizionario(nomeDiz, linguaInserita, listaLemmi);
archivioDizionari = new Vector<Dizionario>();
archivioDizionari.add(pos,nuovoDizionario);
}
public Archivio(){
}
public static void main(String[] args) {
Archivio listaDizionari=new Archivio();
char scelta;
// ciclo principale
do{
scelta=menuPrincipale();
switch(scelta){
case 'V':
case'v':
case 'S':
case's': selezioneDizionario(listaDizionari);break;
case 'I':
case'i': inserimentoDizionario(listaDizionari);
case 'C':
case'c': rimozioneDizionario ();break;
case 'Z':
case'z': ;break;
}
}while(scelta!='e' && scelta!='E');
System.out.println("\nBye!");
}
// metodo che carica il menu principale
public static char menuPrincipale(){
String ok="VvIiCcRrSsUueE";
char scelta;
do{
System.out.println("|| MENU' PRINCIPALE ||");
System.out.println("");
System.out.println("[V/v] Visualizza i dizionari");
System.out.println("[S/s] Seleziona un dizionario");
System.out.println("[I/i] Inserisci un nuovo dizionario");
System.out.println("[C/c] Rimuovi un dizionario");
System.out.println("[R/r] Esegui una ricerca");
System.out.println("[S/s] Salva la collezione di dizionari ");
System.out.println("[U/u] Fai l'upload di una nuova collezione");
System.out.println("[e/E] Arrivederci!");
System.out.println("");
scelta=Input.readChar("fai la tua scelta:");
}while(ok.indexOf(scelta)<0);
return scelta;
}
// metodo per la selezione del dizionario
public static void selezioneDizionario(Archivio listaDizionari){
listaDizionari.selezioneDizionario(listaDizionari);
}
public void selezione(){
if(archivioDizionari.isEmpty()==true){
System.out.println("non ci sono dizionari, inserisci un nuovo dizionario");
menuPrincipale();
}
else{
String nome=Input.readString("Inserisci il nome del dizionario da cercare:");
ricercaNome(archivioDizionari,nome);
menuDizionario();
}
}
//metodo per la visualizzazione dei dizionari
public void visualizzaDizionario(){
if(archivioDizionari.isEmpty()==true){
System.out.println("non ci sono dizionari, inserisci un nuovo dizionario");
menuPrincipale();
}
else{
for(int pos=0; pos<=archivioDizionari.size();pos++)
System.out.print(archivioDizionari.indexOf(pos)+" "+archivioDizionari.get(pos).getNomeDizionario());
menuPrincipale();
} }
// metodo per ricerca per nome
public static boolean ricercaNome(Vector <Dizionario> archivioDizionari, String nome){
boolean nonTrovato=true;
for(int i=0; i<archivioDizionari.size() && nonTrovato; i++){
Dizionario d=archivioDizionari.elementAt(i);
if(d.getNomeDizionario().equals(nome.trim())){
nome=d.getNomeDizionario();
}
}
if(nonTrovato){
System.out.println("Parola non trovata!");
}
return nonTrovato;
}
// metodo per l'inserimento di un dizionario
public void inserimento(Dizionario nuovoDizionario){
/*if(pos<0 || pos>archivioDizionari.size() ||nuovoDizionario==null) {
return false;
}
else {
*/
archivioDizionari.add(nuovoDizionario);
}
// metodo statico per l'inserimento di un dizionario
public static void inserimentoDizionario( Archivio listaDizionari){
int pos=Input.readInt("Dammi una posizione valida: ");
Dizionario nuovoDizionario=Dizionario.leggiDizionario();
listaDizionari.inserimento(nuovoDizionario);
System.out.println(nuovoDizionario.getNomeDizionario());
menuPrincipale();
}
classe Dizionario (lettura dei dati in input)
codice:
public static Dizionario leggiDizionario(){
char uscita;
String nomeDiz="";
boolean controllo=true;
do{
nomeDiz=Input.readString("Inserisci il nome: ").toLowerCase().trim();
controllo=controlla(nomeDiz);
if(controllo){
System.out.println("Procedi!");
}else{
System.out.println("Errore!");
}
}while(!controllo);
String linguaInserita="";
do{
linguaInserita=Input.readString("Inserisci la lingua: ").toLowerCase().trim();
controllo=controlla(linguaInserita);
if(controllo){
System.out.println("Procedi!");
}else{
System.out.println("Errore!");
}
}while(!controllo);
Vector<Lemma> listaLemmi = new Vector<Lemma>();
do {
Lemma nuovolemma=Lemma.leggiLemma();
listaLemmi.add(nuovolemma);//legge un lemma
// lo inserisce in lemmi
uscita=Input.readChar("Vuoi inserire un nuovo dizionario? s/n:");
// e continua fino a quando si decide di smettere
} while(!controllo || uscita!='n');
// ordina il vettore di lemmi prima di creare l'oggetto dizionario
return new Dizionario(nomeDiz,linguaInserita,listaLemmi);
}