Newsgroup: it.comp.java
Titolo: file txt in array multidimensionale di double...

Salve ragazzi,
volevo chiedervi un grande aiuto per un grosso problema che sto
riscontrando con un mio programmino java(sono ancora inesperto).
Vorrei che mi aiutaste  ad analizzare il codice che ho scritto per
questa funzione.
Parto da del codice già scritto per un problema analogo.
Il problema originale prevedeva un file di 2 colonne fisse e numero di
righe variabili.
La funzione dovrebbe prendere in ingresso un file txt del tipo
nome dato dato dato....
xyz 23.4 345...............
e caricarlo, dopo averne riconosciuto numero righe e colonne, in un
array bidimensionale di double.
Uno dei miei dubbi è:
come avviene la trasformazione della prima colonna che è di tipo
stringa?
Nel codice originale che sto riadattando le colonne erano tutte
numeriche,posso usare Double.Parse...per una colonna di tipo stringa?
Il codice era(il numero di righe era calcolato precedentemente e
passato come parametro)
public double[][]ReadArray(int Nrows)throws IOException
{
FileReader fr=new FileReader(fileName);
BufferedReader in=new BufferedReader(fr);
double[][] x=new double[Nrows][2];
double[][]x=new double[Nrows][Ncolumns];
for(int i=0; i<Nrows; i++)
{
StringTokenizer tok=new StringTokenizer(in.readLine(),"");
x[i][0]=Double.parseDouble(tok.nextToken().trim());
x[i][1]=Double.parseDouble(tok.nextToken().trim());
}
in.close();
for(int j=0; j<Nrows; j++)
{
System.out.println(x[j][0]+""+x[j][1]);
}
return x;
}
Questo stesso codice devo "adattarlo"(potrei anche cambiarlo se ne
fossi capace...) ad un problema analogo ma con numero di colonne
variabili(non più 2 ) e numero righe variabili.
Il problema l'ho risolto in un'altra funzione che passa direttamente
numero righe e colonne.
Anche l'operazione di FileReader e BufferedReader l'ho messa nel main
perchè comune a più funzioni.
Il mio codice è questo,passo al metodo numero righe,colonne e br
caricato nel main).
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++)
{
StringTokenizer tok=new StringTokenizer(br.readLine(),"");
x[i][j]=Double.parseDouble(tok.nextToken().trim());/*restituisce il
valore double rappresentato dalla stringa(token) */
}
}
br.close();
for(int i=0; i<Nrows; i++)
{
for(int j=0; j<Ncolumns; j++)
{
System.out.println(x[i][j]);
}
}
return x;
}
Sbaglio qualcosa?
In questa situazione l'errore è
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:47)
at AddDb.main(AddDb.java:90)
Il main è:
public static void main(String[] args)throws IOException {
FileReader file = new FileReader(fileName);
BufferedReader br = new BufferedReader(file);
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");
}
Ringrazio in anticipo chi mi aiuterà....

 at AddDb.main(AddDb.java:90)
Come gia' detto, probabilmente passi un null al costruttore di 
StringTokenizer.
-- 
Giambo - Occhio al filtro antispam _e_ alla whitelist !

 Ringrazio in anticipo chi mi aiuterà....
spero di essermi spiegato
ciao
giakyt

 stringa?
la prima colonna dovresti memorizzarla in un altro array
ciao

Giakyt sei stato grande........non ho parole,ho risolto il problema,
anche se parzialmente.
Ho tolto per ora dal file txt la colonna relativa al tipo stringa e ho
lasciato solo i numeri per testare la funzione così com'è.
Gli ho passato un file di una sola riga banalissimo
4 2 3 3 4 3 6 4
e la funzione mi calcola righe,colonne ma mi dà questa eccezione
Il numero di colonne e' :8
Il numero di righe e' :1
Caricamento dell'array di double in corso.....
Exception in thread "main" java.lang.NumberFormatException: For input
string: "4
     2   3   3    4    3     6  4"
        at sun.misc.FloatingDecimal.readJavaFormatString(Unknown
Source)
        at java.lang.Double.parseDouble(Unknown Source)
        at AddDb.ReadArray(AddDb.java:49)
        at AddDb.main(AddDb.java:93)
Perchè?

ti ho mandato AddDb.java modificato che non da l'eccezione che dici