Java - Variable en bucle no se llena

 
Vista:
Imágen de perfil de dryant
Val: 9
Ha aumentado 1 puesto en Java (en relación al último mes)
Gráfica de Java

Variable en bucle no se llena

Publicado por dryant (3 intervenciones) el 21/10/2020 09:09:21
Hola a todos, supongo que mi duda será una chorrada, pero llevo un rato y no consigo ver donde está el fallo.
Estoy recorriendo un HashMap<String, Integer> con intencion de guardarlo en un archivo de datos para posteriormente hacer una gráfica con GNUPLOT.
El archivo data.txt debe tener 2 columnas, una con la palabra del texto escaneado, y otra con la frecuencia que aparece esa palabra en dicho texto. Estos datos ya están recopilados y almacenados en el HashMap.
El caso es que iterando sobre el mapa, me esta fallando el llenado de la variable.
Si intento poner todas las claves, me funciona perfectamente.
Si intento poner todos los valores tambien me funciona perfectamente.
Pero si intento poner claves y valores, la variable no se llena y por consiguiente no se escribe el fichero...
Adjunto el código:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
try {
    String mensaje = "Inicio\n";
    int i = 1;
    FileWriter fichero = new FileWriter("data4.txt");
 
    Iterator<Map.Entry<String,Integer>> itr=  vfmap.entrySet().iterator();
    while(itr.hasNext())
    {
        mensaje = mensaje+i+(itr.next().getKey()) + "\t";
        mensaje = mensaje+"\t"+(itr.next().getValue()).toString()+"\n";
        i++;
    }
    mensaje = mensaje + "final";
 
    System.out.println(mensaje);
 
    fichero.write(mensaje);
    fichero.close();
 
} catch (Exception exception) {
 
    exception.printStackTrace();
 
}
Si probáis el código, comentando una de las dos líneas que empiezan por mensaje, funciona perfectamente, pero si estan las dos líneas de mensaje sin comentar se queda la variable vacía...
Se os ocurre por que?
Gracias de antemano!
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

Variable en bucle no se llena

Publicado por Tom (1718 intervenciones) el 21/10/2020 12:42:07
Cuesta entender lo que quieres decir con "el llenado de la variable" y cosas así.
Pero tu problema es casi con toda seguridad que estás haciendo 2 veces itr.next() en cada iteración.

Por otra pàrte tampoco parece que necesites ir incrementando i en el bucle ...

Harías más sencilla la iteración sobre tu hashmap así:

1
2
3
for (Map.Entry<String, Integer> entry : vfmap.entrySet()) {
    System.out.println(entry.getKey() + " = " + entry.getValue());
}

O así:

1
vfmap.forEach((key,value) -> System.out.println(key + " = " + value));
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
Imágen de perfil de dryant
Val: 9
Ha aumentado 1 puesto en Java (en relación al último mes)
Gráfica de Java

Variable en bucle no se llena

Publicado por dryant (3 intervenciones) el 21/10/2020 14:02:45
Hola Tom! Muchas gracias por responder.
El llenado de la variable me refería a asignar los valores del map a la variable, para después poder escribir el fichero con el contenido de la variable.
Lo de itr.next 2 veces en cada iteración ha sido un error resultante de tantas pruebas que he ido haciendo, ya que en un principio puse toda la instrucción en una linea, y después fui dividiendo la instrucción en varias lineas, para poder localizar el fallo, repetí la funcion itr.next() sin darme cuenta.
La primera opcion que das me ha funcionado perfectamente. Es la que he puesto.
La segunda sin embargo, aunque funciona lo que has puesto no sé como habría que ponerla si quisiera poner más de una instrucción en vez de solo una.

Muchas gracias por tu ayuda!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar