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à....
> come avviene la trasformazione della prima colonna che č di tipo
> stringa?
Double.parseDouble(String)
> Nel codice originale che sto riadattando le colonne erano tutte
> numeriche,posso usare Double.Parse...per una colonna di tipo stringa?
Tu l'hai detto (cit.)
> 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)
Come gia' detto, probabilmente passi un null al costruttore di
StringTokenizer.
--
Giambo - Occhio al filtro antispam _e_ alla whitelist !
> Salve ragazzi,
> public double[][]ReadArray(int Nrows,int Ncolumns,BufferedReader
> br)throws IOException
> {
> double[][]x=new double[Nrows][Ncolumns];
> for(int i=0; i<Nrows; i++)
> {
qui sposti
StringTokenizer tok=new StringTokenizer(br.readLine(),"");
> for(int j=0; j<Ncolumns; j++)
> {
questa la levi
> StringTokenizer tok=new StringTokenizer(br.readLine(),"");
> x[i][j]=Double.parseDouble(tok.nextToken().trim());/*restituisce il
> valore double rappresentato dalla stringa(token) */
> }
> }
> br.close();
questo spustalo nel main, e' piu pulito
>
>
> for(int i=0; i<Nrows; i++)
> {
> for(int j=0; j<Ncolumns; j++)
> {
> System.out.println(x[i][j]);
> }
> }
> return x;
> }
>
> Sbaglio qualcosa?
si
1) non resetti il puntatore di righe sul file che si fa con mark() /
reset() oppure chiudendo e riaprendo il file
2) nel metodo ReadArray hai messo la readline quando stai processando
le colonne
> 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();
qui metti
br.mark(99999);
> db.ColumnsNumber(br);
> System.out.println("Il numero di colonne e' :"+Ncolumns);
qui metti
br.reset();
perche ad ogni operazione sul file devi resettare la posizione del
puntatore alla riga,
anche qui metti
br.mark(99999);
> db.RowsNumber(br);
> System.out.println("Il numero di righe e' :"+Nrows);
anche qui metti
br.reset();
> 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());
> }
qui metti
br.close();
spostato dal metodo ReadArray()
> System.out.println("Fatto");
> }
>
>
> Ringrazio in anticipo chi mi aiuterà....
spero di essermi spiegato
ciao
giakyt
...
> 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?
la prima colonna dovresti memorizzarla in un altro array
ciao
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è?