L'errore che ottengo a livello di esecuzione è:
Exception in thread "main" java.lang.NullPointerException
at java.util.StringTokenizer.<init>(Unknown Source)
at java.util.StringTokenizer.<init>(Unknown Source)
at AddDb.ReadArray(AddDb.java:41)
at AddDb.main(AddDb.java:74)
Il codice che ho sviluppato è il seguente:
import java.util.*;
import java.io.*;
public class AddDb {
private static String fileName="Affymetrix_dati.txt";
private static int Ncolumns=0;
private static int Nrows=0;
/*AddDb(String fN)//Il costruttore della classe
{
fileName=fN;
}*/
public int ColumnsNumber(BufferedReader br)throws IOException {
String line = br.readLine(); //legge una linea di testo terminata da /n
o /r e la restituisce come stringa
StringTokenizer st = new StringTokenizer(line); /*La classe
StringTokenizer permette la divisione di una
stringa in tokens (Il tokenizer usa il set di delimitatori di default ,
che è " \t\n\r\f": lo spazio, il tab, l'invio.
I delimitatori non vengono trattati come token.*/
Ncolumns=st.countTokens(); //calcola il numero di token,in questo caso
è il numero di colonne
return Ncolumns;
}
public int RowsNumber(BufferedReader br)throws IOException {
String line = br.readLine();
while (line != null) { //ciclo che conta il numero di righe
arrestandosi al null che indica la fine del file
Nrows++;
line = br.readLine();
}
return Nrows;
}
public double[][]ReadArray(int Nrows,int Ncolumns,BufferedReader
br)throws IOException
{
double[][]x=new double[Nrows][Ncolumns];
for(int i=0; i<Nrows; i++)
{
for(int j=0; j<Ncolumns; j++)
{
try
{
StringTokenizer tok=new StringTokenizer(br.readLine(),"");
x[i][j]=Double.parseDouble(tok.nextToken().trim());//resituisce il
valore double rappresentato dalla stringa(token).
}
catch(IOException e){
System.out.println(e.getMessage());
}
}
}
br.close();
for(int i=0; i<Nrows; i++)
{
for(int j=0; j<Ncolumns; j++)
{
System.out.println(x[i][j]);
}
}
return x;
}
public static void main(String[] args)throws IOException {
FileReader file = new FileReader(fileName); //classe per la lettura di
file di caratteri
BufferedReader br = new BufferedReader(file); /*Legge testo da uno
stream di caratteri di ingresso,
bufferizzando i caratteri in maniera da garantire efficienza di
lettura.*/
double[][]Array;
AddDb db=new AddDb();
db.ColumnsNumber(br);
System.out.println("Il numero di colonne e' :"+Ncolumns);
db.RowsNumber(br);
System.out.println("Il numero di righe e' :"+Nrows);
System.out.println("Caricamento dell'array di double in corso.....");
try
{
System.out.println(db.ReadArray(Nrows,Ncolumns,br));
}
catch(IOException e){
System.out.println(e.getMessage());
}
System.out.println("Fatto");
}
}
> L'errore che ottengo a livello di esecuzione č:
>
> Exception in thread "main" java.lang.NullPointerException
> at java.util.StringTokenizer.<init>(Unknown Source)
> at java.util.StringTokenizer.<init>(Unknown Source)
Probabilmente passi al costruttore di StringTokenizer una stringa che e'
null.
--
Giambo - Occhio al filtro antispam _e_ alla whitelist !
StringTokenizer tok=new StringTokenizer(br.readLine(),"");
x[i][j]=Double.parseDouble(tok.nextToken().trim());//
Come faccio per risolvere il problema?
> at AddDb.ReadArray(AddDb.java:41)
Hai provato almeno ad isolare cosa succede alla riga 41?
Lo stacktrace indica la riga di sorgente dove l'eccezione è scatenata.
Il tipo di eccezione indica che viene usato un'oggetto non
inizializzato o a null.
La NullPointerException non va gestita, va prevenuta. Una volta
individuato qual'è il reference che in quella riga è a null decidi
cosa fare sulla base della logica del tuo programma.
> Salve a tutti,
> vorrei chiedervi un aiuto.
> Non riesco a gestire correttamente un'eccezione.
> Chi può aiutarmi ad eliminarlo?
> Grazie
>
> L'errore che ottengo a livello di esecuzione è:
>
> Exception in thread "main" java.lang.NullPointerException
> at java.util.StringTokenizer.<init>(Unknown Source)
> at java.util.StringTokenizer.<init>(Unknown Source)
> at AddDb.ReadArray(AddDb.java:41)
> at AddDb.main(AddDb.java:74)
>
> ... ...
sposta
try {
StringTokenizer tok=new StringTokenizer(br.readLine(),"");
catch(IOException e) {
System.out.println(e.getMessage());
}
nel primo for
ciao