PDA

View Full Version : [java] Semplice programma mi da Errore NullpointerException


AnthonyTex
08-09-2010, 13:46
Buongiorno a tutti sono alle prime armi nella programmazione in java e non riesco ad uscire da questa situzione: quando vado ad eseguire questo programma mi viene restituito l'errore NullPointerException qualcuno potrebbe gentilmente aiutarmi?:D grazie mille


public class MioDiz
{
final int MAX = 100;
public Coppia[] v = new Coppia[MAX];
private int taglia = 0;

private int cerca(String s)
{
for(int i=0; i<v.length; i++)
{
if (v[i].chiave.compareTo(s) == 0)
{ return i;}
}

return -1;
}


public void nuovo(String z) throws ErrorException
{ System.out.println(z);
if (cerca(z) == -1)
{v[taglia].chiave= z;
v[taglia].attributo = 0.0;
taglia++;
}
else
{ throw new ErrorException();}

}

public void versa(String s, double d) throws ErrorException
{
int i = cerca(s);
if (i != -1)
{ v[i].attributo += d; }
if (i == -1)
{ throw new ErrorException();}
}

public void preleva(String s, double d) throws ErrorException
{
int i = cerca(s);
if (i == -1)
{throw new ErrorException();}
if (i != -1)
{
if ((v[i].attributo - d) < 0 )
{throw new ErrorException();}
else
{ v[i].attributo = v[i].attributo - d;}
}
}

public void cancella(String s) throws ErrorException
{
int i = cerca(s);

if (i == -1)
{ throw new ErrorException();}
if (v[i].attributo != 0)
{throw new ErrorException();}

for (int j = i; j< taglia -1; j++)
{ v[j] = v[j +1]; }
}

public void saldo(String s) throws ErrorException
{ int i = cerca(s);
if(i == -1)
{throw new ErrorException();}
System.out.println(v[i].toString());

}

public String [] stampa()
{ String [] et = new String[MAX];
for (int k = 0; k< taglia; k++)
{
et[k] = v[k].toString(); }
return et;
}
}

Darecon
08-09-2010, 14:51
Puoi postare l'errore? Cosi' vediamo a che riga si verifica.. :)

AnthonyTex
08-09-2010, 15:00
Questo è l'errore

Exception in thread "main" java.lang.NullPointerException
at MioDiz.cerca(MioDiz.java:12)
at MioDiz.nuovo(MioDiz.java:22)
at Main.main(Main.java:20)

e queste sono le altre classi esclusa ErrorException

public class Coppia
{ public String chiave;
public Double attributo;
public Coppia (String c, Double a) { chiave = c; attributo = a; }
public String toString ()
{ return chiave + ':' + attributo; }
}





import java.util.Scanner;
import java.io.*;

public class Main
{
public static void main(String[] arg) throws IOException
{
MioDiz dizio = new MioDiz();
File archivio = new File(arg[0]);
File aggiornamento = new File(arg[1]);
File arcagg = new File("arcagg.txt");
PrintWriter out = new PrintWriter(arcagg);
Scanner leggiarch = new Scanner(archivio);
Scanner leggiagg = new Scanner(aggiornamento);

while (leggiarch.hasNextLine())
{
String [] v = leggiarch.nextLine().split(":");
System.out.println(v[0]+" "+v[1]);
dizio.nuovo(v[0]);
// dizio.versa(v[0], Double.parseDouble(v[1]));
}
leggiarch.close();

while (leggiagg.hasNextLine())
{
String [] v = leggiagg.nextLine().split(":");

if (v[0].equals("aggiungi") == true)
{ dizio.nuovo(v[1]);}

if (v[0].equals("versa") == true)
{ dizio.versa(v[1], Double.parseDouble(v[2]));}

if (v[0].equals("preleva") == true)
{ dizio.preleva(v[1], Double.parseDouble(v[2]));}

if (v[0].equals("cancella") == true)
{ dizio.cancella(v[1]);}

if (v[0].equals("saldo") == true)
{ dizio.saldo(v[1]);}

}

leggiagg.close();

String [] ant = new String[100];
ant = dizio.stampa();

for (int w = 0; w< ant.length; w ++)
{
out.println(ant[w]);
}

out.close();
}
}

Darecon
08-09-2010, 15:07
public Coppia[] v = new Coppia[MAX];

hai creato un vettore di coppia, ma le coppie non sono inizializzate, quindi i campi di questa classe:

public class Coppia
{ public String chiave;
public Double attributo;
public Coppia (String c, Double a) { chiave = c; attributo = a; }
public String toString ()
{ return chiave + ':' + attributo; }
}

non sono inizializzati.. Sempre che non ho visto male.. :D

AnthonyTex
08-09-2010, 15:10
public Coppia[] v = new Coppia[MAX];

hai creato un vettore di coppia, ma le coppie non sono inizializzate, quindi i campi di questa classe:

public class Coppia
{ public String chiave;
public Double attributo;
public Coppia (String c, Double a) { chiave = c; attributo = a; }
public String toString ()
{ return chiave + ':' + attributo; }
}

non sono inizializzati.. Sempre che non ho visto male.. :D

Ok grazie per la risposta e come faccio a inizializzarli ad un certo valore?

Darecon
08-09-2010, 15:12
Ok grazie per la risposta e come faccio a inizializzarli ad un certo valore?

public class Coppia
{ public String chiave;
public Double attributo;
public Coppia () { chiave = ""; attributo = 0.0; }
public String toString ()
{ return chiave + ':' + attributo; }
}

Prova cosi'..

AnthonyTex
08-09-2010, 15:17
Putroppo restituisce lo stesso errore :(

Darecon
08-09-2010, 15:27
if (v[i].chiave.compareTo(s) == 0)


l'errore e' qua, quindi o s e' null, o chiave ha dei campi null, o v e' null.. Puoi debuggarlo passo passo? Io in questo momento mi trovo impossibilitato.. :(

AnthonyTex
08-09-2010, 15:33
if (v[i].chiave.compareTo(s) == 0)


l'errore e' qua, quindi o s e' null, o chiave ha dei campi null, o v e' null.. Puoi debuggarlo passo passo? Io in questo momento mi trovo impossibilitato.. :(

s non è null gli arriva la stringa dal main(per essere sicuro ho infatti fatto System.out....) quello che non capisco è anche se voglio assegnare a v[i].chiave un certo valore mi da il solito errore per esempio v[i].chiave= "Ciao";

AnthonyTex
09-09-2010, 08:49
Nessuno può aiutarmi?? :'(

Darecon
09-09-2010, 09:56
Nessuno può aiutarmi?? :'(

Uppa tutto il pacchetto di sorgenti e i file di test grazie.. Provo a dargli un occhiata.. :)

Don[ITA]
09-09-2010, 11:29
Non hai inizializzato gli elementi del vettore public Coppia[] v = new Coppia[MAX];
Ti consiglio di inserire un costruttore nella classe MioDiz in cui li inizializzi:

...
final int MAX;
public Coppia[] v;
...
public MioDiz() {
MAX = 100;
v = new Coppia[MAX];
for(int i = 0; i < MAX; i++) v[i] = new Coppia("", 0.0);
}

public MioDiz(int size) {
MAX = size;
v = new Coppia[MAX];
for(int i = 0; i < MAX; i++) v[i] = new Coppia("", 0.0);
}
...

Cya

AnthonyTex
09-09-2010, 14:55
Grazie a tutti quanti Risolto grazie davvero:D