Foros del Web » Programación para mayores de 30 ;) » Java »

[SOLUCIONADO] Entrar en un bucle, problema por filereader

Estas en el tema de Entrar en un bucle, problema por filereader en el foro de Java en Foros del Web. Hola a todos!! Sigo con el proyecto en java, y estoy teniendo problema en el momento de pasar un fichero a una matriz. Concretamente el ...
  #1 (permalink)  
Antiguo 21/03/2015, 10:06
Avatar de maiksix  
Fecha de Ingreso: noviembre-2014
Ubicación: Sabadell
Mensajes: 124
Antigüedad: 9 años, 5 meses
Puntos: 1
Entrar en un bucle, problema por filereader

Hola a todos!!

Sigo con el proyecto en java, y estoy teniendo problema en el momento de pasar un fichero a una matriz. Concretamente el problema está en que no entra en el bucle.

Creo que la lógica es correcta, paso a enteros cada concepto del fichero ya que la matriz es entera, tengo un matriz definida, etc... así que no se porque es el fallo.

He marcado en rojo donde me supongo que esta el fallo.

A ver si alguien sabe porque puede suceder esto :)

Gracias y un saludo!

Código:
public static void readLinks() throws FileNotFoundException, IOException {
	      int nNodes = 0;
	   
	      
	      FileReader fr = new FileReader(archivo_links_A320);
	      BufferedReader br = new BufferedReader(fr);
	      String linea;
	      
	 //1. Count the number of lines (Nodes)     
	      while( (linea = br.readLine()) != null ){
	    	 nNodes++;
	      }//end while "linea" 
	      
	      matriz=new int[nNodes][nNodes];
	      
	// 2. Create matrix and fill i
      while( (linea = br.readLine()) != null ){
    	  //READ LINE PER LINE
        	String [] splitter= linea.split(" "); //Split "linea" for its spaces
        	for(int x=0; x<nNodes; x++){ //this loop saves the new coordinates.
        		for(int i=0; i<splitter.length;i++){
        		matriz[x][i]=Integer.parseInt(splitter[i]);
        		System.out.println(matriz[x][i]);
        		System.out.println("parse: "+i);
        		}//for
        	}//for	
       }//end while "linea"  
      
     //Auxiliar Shows the matrix
    	  
     /* for(int a=0; a<nNodes; a++){ //this loop saves the new coordinates.
  		for(int b=0; b<nNodes; b++){
  		System.out.println(matriz[a][b]);
  		}//for
  	  }//for*/
      
      fr.close();
      
      
      }// end read links
__________________
Going hard for too long... Can't get enough
  #2 (permalink)  
Antiguo 21/03/2015, 12:56
Avatar de Profesor_Falken  
Fecha de Ingreso: agosto-2014
Ubicación: Mountain View
Mensajes: 1.323
Antigüedad: 9 años, 8 meses
Puntos: 182
Respuesta: Entrar en un bucle, problema por filereader

Buenas,

Has leido ya el fichero entero para contar las líneas, por lo que ya no hay más lineas que leer.

O bien abres otra vez el fichero o bien abres una vez sólo el fichero y en lugar de contar las líneas para reservar arrays utilizas estructuras dinámicas.

Un saludo
__________________
If to err is human, then programmers are the most human of us
  #3 (permalink)  
Antiguo 21/03/2015, 12:58
Avatar de Xerelo  
Fecha de Ingreso: mayo-2009
Mensajes: 2.175
Antigüedad: 15 años
Puntos: 306
Respuesta: Entrar en un bucle, problema por filereader

Me suena que alguien te había comentado que era ineficiente que leyeras dos veces el fichero, una para contar las líneas y otra para leer las líneas.

Pues no sólo es ineficiente, si no que tal y cómo lo tienes es normal que nunca te entre en el segundo bucle.

Cita:
//1. Count the number of lines (Nodes)
while( (linea = br.readLine()) != null ){
nNodes++;
}//end while "linea"
¿Cuándo acaba este bucle? Cuando llegas al final del archivo. Y erróneamente supones que al empezar el siguiente bucle el puntero volverá al principio del fichero.

Cita:
while( (linea = br.readLine()) != null ){
//READ LINE PER LINE
String [] splitter= linea.split(" "); //Split "linea" for its spaces
for(int x=0; x<nNodes; x++){ //this loop saves the new coordinates.
for(int i=0; i<splitter.length;i++){
matriz[x][i]=Integer.parseInt(splitter[i]);
System.out.println(matriz[x][i]);
System.out.println("parse: "+i);
}//for
}//for
}//end while "linea"
__________________
Cada vez que solucionas los problemas de alguien que no se esfuerza, piensa en que el día de mañana puede llegar a ser tu compañero de trabajo, o peor, tu jefe.
  #4 (permalink)  
Antiguo 21/03/2015, 13:33
Avatar de maiksix  
Fecha de Ingreso: noviembre-2014
Ubicación: Sabadell
Mensajes: 124
Antigüedad: 9 años, 5 meses
Puntos: 1
Respuesta: Entrar en un bucle, problema por filereader

Hola! y gracias por comentar.

Si que me lo dijo Profesor_Falken que era ineficiente, y de hecho lo arregle para otros ficheros usando ArrayList. Lo que no se es como hacer una matriz dinámicamente... Por eso lo leo, y luego lo lleno...Se que es ineficiente, pero para no atascarme ahí he hecho eso.

En cuanto a la pregunta tenéis razón. Lo he probado antes de subir al foro la duda añadiendo lo siguiente:

Código:
br = new BufferedReader(fr);

justo antes del
Código:
while( (linea = br.readLine()) != null ){
//READ LINE PER LINE
String [] splitter= linea.split(" "); //Split "linea" for its spaces
for(int x=0; x<nNodes; x++){ //this loop saves the new coordinates.
for(int i=0; i<splitter.length;i++){
matriz[x][i]=Integer.parseInt(splitter[i]);
System.out.println(matriz[x][i]);
System.out.println("parse: "+i);
}//for
}//for	
}//end while "linea"

No debería así volver a iniciar el fichero?

Si tenéis algún tutoríal o algo para hacer lo de las matrices dinámicamente estaría encantado :) Aunque ahora buscare yo alguno!

Gracias!
__________________
Going hard for too long... Can't get enough
  #5 (permalink)  
Antiguo 21/03/2015, 15:05
Avatar de Xerelo  
Fecha de Ingreso: mayo-2009
Mensajes: 2.175
Antigüedad: 15 años
Puntos: 306
Respuesta: Entrar en un bucle, problema por filereader

Las probabilidades de que encuentres un tutorial para hacer matrices dinámicas es mínimo, no vas a encontrar un tutorial para todo lo que quieras hacer y menos para cosas tan sencillas y que no tienen ninguna complejidad.

Tú quieres aprender a programar, y eso es precisamente lo que tienes que hacer, aprender a usar las herramientas de las que dispones para resolver problemas.

Profesor_falken ya te ha dado las posibilidades, o "reinicias" el fichero con el BufferedReader o lees el fichero y cuentas las líneas a la vez. A menos que estés usando ficheros de cientos de megas, ¿qué te impide guardar las líneas en un ArrayList?.

Luego ese List lo conviertes en una matriz o en lo que tú quieras.
__________________
Cada vez que solucionas los problemas de alguien que no se esfuerza, piensa en que el día de mañana puede llegar a ser tu compañero de trabajo, o peor, tu jefe.
  #6 (permalink)  
Antiguo 23/03/2015, 10:44
Avatar de maiksix  
Fecha de Ingreso: noviembre-2014
Ubicación: Sabadell
Mensajes: 124
Antigüedad: 9 años, 5 meses
Puntos: 1
Respuesta: Entrar en un bucle, problema por filereader

Hola a todos.

Con la ayuda que me habéis dado he podido terminar el problema que tenía. He hecho lo que ha comentado Xerelo. Así que ya lo marco como solucionado.

Muchas gracias y un saludo! :)
__________________
Going hard for too long... Can't get enough

Etiquetas: bucle, string
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 21:50.