Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

235
Visualizações
¿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 Respostas
Responde à pergunta

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 Relatório

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 Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda