Visualizzazione dei risultati da 1 a 3 su 3
  1. #1

    problema con liste di array con java..

    allora breve spiegazione:

    prendo in input un file txt contenente circa 2000 righe dove ogni riga è formata da 130 valori.

    L'obbiettivo è prendere queste righe e inserirle in un vettore da 130 valori, dato che non conosco il numero di righe per ogni file txt ho bisogno che la dimensione della struttura dati sia dinamica, per questo ho pensato a linkedlist di double[]..

    il problema qual'è? semplice allora riesco per ogni riga a salvare i 130 valori nell'array ma quando vado a inserire questo array nella linkedlist ogni volta che lo inserisco mi sovrascrive il vecchio array, quindi alla fine nella linked list ho un solo elemento..
    (stessa cosa capita se uso arrayList..)

    come fare? non capisco perchè mi sovrascrive sempre l'elemento..nella lista c'è solo l'ultimo array dell'ultima riga letta...


    Codice:
    codice:
       public void match() throws Exception{
        	
        	double [][]j = new double[3000][132];
        	double keypoint[] = new double[134];
        	LinkedList<double[]> lista = new LinkedList<double[]>();
        	int i,k=0,g=0,l=0,u=0;
        	String val = "";
        	  double[] test= new double[132];
            FileInputStream f = new FileInputStream("/Users/loganwhitewolf/Tesi/workspace/immagini/img_sift1.txt");
            do{
        			i = f.read();
            
                	if((char)i == ' ' ){
                		
                    	//j[k][g]=Double.parseDouble(val);
                		keypoint[g] = 0;
                		keypoint[g]=Double.parseDouble(val);
                    	
                		val="";
                		l = -1;
                    	g++;
                    }
                	
                	else 
                    {	
                    	val = val + (char)i;
                    }
                
                
                	
                	
                	if((char)i == '\n')
                	{
                		lista.add(k,keypoint);
                		k++; 
    	            	g=0;
    	            	val= "";
    	            	l = 0;
                	}
                	
                	
    	    		//System.out.print(test[]);
    	    	
                
                	l++;
             
            }while(i != -1); 
        	test = (double[]) lista.get(1);
        	g=0;
        	while(g<132){
        		System.out.print(test[g]+ " ");
        		g++;}
        	System.out.print("\n");
        	
            f.close();
        }

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Innanzitutto una questione sul file. Parli di file "di testo" ma poi vedo che usi direttamente FileInputStream che invece è orientato ai byte. No. Stai solo facendo un lavoro inutile e poco "pulito" cercando tu spazi e newline.

    Meglio se leggi "a righe". Il FileInputStream incapsulalo in un InputStreamReader e a sua volta poi incapsulalo in un BufferedReader che ha il comodo readLine(). Leggi la riga e spezzala in "token" (es. con StringTokenizer), quindi fai il parsing dei token.

    Altra questione, i reference nel LinkedList. Hai istanziato 1 array di double che hai assegnato a keypoint.

    double keypoint[] = new double[134];

    Questo array è l'unico che hai .... quindi a) usi e riusi sempre questo, pertanto "sovrascrivi" tutto quanto ogni volta!! e b) essendo unico metti nel LinkedList sempre lo stesso identico reference, quindi alla fine il LinkedList contiene 2000 reference perfettamente uguali che fanno riferimento ad un unico array. No. Dovresti istanziare un nuovo array di double ad ogni nuova riga.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    grazie mille... ora la parte dell'array l'ho capita.. ora istanzio con new un array ogni volta.. grazie mille

    per la questione della riga.. mm dove posso capire come funziona lo string tokenizer?

    ancora grazie per l'aiuto

    ps:
    il file è una lista di circa 2000 righe e ogni riga ha 132 valori, il file è un .txt

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2026 vBulletin Solutions, Inc. All rights reserved.