Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

230
Views
¿Por qué el HashMap no se imprime después de cargar los valores de ArrayList en él?

Estoy intentando escribir un programa para la escuela que cuente la frecuencia de tokens (palabras en este caso) en un archivo dado. El programa controlador debe usar una estructura de lista para obtener cada palabra en el mismo formato del archivo. Luego, se crea un objeto FreqCount y eventualmente usará el hashmap para contar la frecuencia del token. Obtuve el controlador para leer el archivo y colocarlo en una ArrayList, pero ahora el problema es que (a) el código para ingresar la lista no funciona, por lo que está vacío (b) la función de impresión no funciona correctamente (poco probable ya que lo arranqué directamente de w3schools para probar). He pensado en esto por un tiempo y no puedo entender por qué no funciona.

Conductor:

 package threetenProg3; import java.io.File; import java.io.FileNotFoundException; import java.util.Scanner; import java.util.ArrayList; import threetenProg3.FreqCount; public class Driver { public static void main(String[] args) throws FileNotFoundException{ File in = new File("test.txt"); Scanner scanFile = new Scanner(in); ArrayList<String> parsed = new ArrayList<String>(); FreqCount fc = new FreqCount(parsed); while(scanFile.hasNext()) { //if this ends up cutting off bottom line, make it a do while loop parsed.add(scanFile.next().toLowerCase()); } System.out.println("ArrayList: \n"); for(int i = parsed.size()-1; i>=0; i--) { //prints arraylist backwards System.out.println(parsed.get(i)); } System.out.println("\n Hashmap: \n"); fc.printMap(); scanFile.close(); } }

Recuento de frecuencias:

 package threetenProg3; import java.util.HashMap; import java.util.ArrayList; public class FreqCount { HashMap<String, Integer> map = new HashMap<String, Integer>(); FreqCount(ArrayList<String> plist){ for(int i = plist.size()-1; i>=0; i--) { //puts list into hashmap map.put(plist.get(i), 1); } } //methods public void printMap() { for (String i : map.keySet()) { System.out.println("key: " + i + " value: " + map.get(i)); } } }

Lo único que se me ocurrió fue cambiar la Lista a una ArrayList, pero eso no tuvo ningún efecto.

Editar: Me di cuenta de que olvidé un montón de cosas importantes aquí.

Archivo de texto:

 ONE TWO ThReE FoUR fIve six seven EIGHT NINE TEN ELEVEN

que salidas:

 eleven ten nine eight seven six five four three two one

Al imprimir la lista de arreglos, funciona perfectamente. El problema es cuando se trata de imprimir el hashmap. Actualmente, la salida para imprimir el mapa hash está en blanco (ya que no aparece nada después de "Hashmap:".

Gracias a cualquiera que pueda ayudar, los comentarios rápidos son muy apreciados :)

over 4 years ago · Santiago Trujillo
2 answers
Answer question

0

debe crear un contador de frecuencia después de leer la lista porque está insertando valores en el mapa en el constructor. Y dado que la lista aún está vacía cuando creó FreqCount, no ve ningún resultado.

 package threetenProg3; import java.io.File; import java.io.FileNotFoundException; import java.util.Scanner; import java.util.ArrayList; import threetenProg3.FreqCount; public class Driver { public static void main(String[] args) throws FileNotFoundException{ File in = new File("test.txt"); Scanner scanFile = new Scanner(in); ArrayList<String> parsed = new ArrayList<String>(); while(scanFile.hasNext()) { //if this ends up cutting off bottom line, make it a do while loop parsed.add(scanFile.next().toLowerCase()); } System.out.println("ArrayList: \n"); for(int i = parsed.size()-1; i>=0; i--) { //prints arraylist backwards System.out.println(parsed.get(i)); } System.out.println("\n Hashmap: \n"); FreqCount fc = new FreqCount(parsed); // Moved fc here fc.printMap(); scanFile.close(); } }
over 4 years ago · Santiago Trujillo Report

0

Esta línea:

 FreqCount fc = new FreqCount(parsed);

no "vincula" mágicamente la lista de matrices parsed al mapa. Simplemente agrega lo que está actualmente parsed en fc.map . Si examina su código, verá que parsed está vacío en el momento en que se ejecuta la línea anterior. Entonces no estás agregando nada al mapa.

Debe mover esa línea después de haberla agregado a la lista de arreglos. Por ejemplo, justo antes de imprimir "Hashmap:" :

 FreqCount fc = new FreqCount(parsed); System.out.println("\n Hashmap: \n"); fc.printMap();
over 4 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!