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

Dudas con Hashtable

Estas en el tema de Dudas con Hashtable en el foro de Java en Foros del Web. Estoy realizando un programa JAVA para que se imprima por pantalla el calendario. El literal del nombre de los meses dependerá del idioma que el ...
  #1 (permalink)  
Antiguo 21/01/2012, 05:28
 
Fecha de Ingreso: agosto-2007
Mensajes: 25
Antigüedad: 16 años, 8 meses
Puntos: 0
Dudas con Hashtable

Estoy realizando un programa JAVA para que se imprima por pantalla el calendario. El literal del nombre de los meses dependerá del idioma que el usuario introduzca por pantalla.

Me he creado un hashtable para que en cada clave guarde el idioma y en el campo de datos un array[12] con el nombre de cada mes en su idioma correspondiente.

El problema que me surge es que una vez cargados los datos en el hashtable. ¿Como recupero ese array[12] para poder ir leyendolo uno a uno? Marcado en rojo.

Muchas gracias.

Código:
String meses[] = new String [noMeses];	
		
BufferedReader fin = Text.open("entrada.txt");

Hashtable tablaMes = new Hashtable();

		
System.out.println("CALENDARIOS BILINGUES");		
		
//Declaro dos Hashtables, una para los meses y otra para los días de la semana
//Voy rellenando ambas tablas con los datos del fichero
for(int i=0;i<noDeIdiomas;i++){
	Calendario cal = new Calendario();
	cal.ponerIdioma(fin);
	
	for(int j=0;j<noMeses;j++){
		cal.ponerLiteralMeses(fin);
		meses[j] = cal.literalMes;
	}
	tablaMes.put(cal.idioma,meses);
}

//Muestro en pantalla los datos leidos		
for(Enumeration e = tablaMes.keys();e.hasMoreElements();){
	System.out.println("keys:"+(String)e.nextElement());
	String mes = (String)e.nextElement();
	
	//String sObj = (String)tablaMes.get(mes);
	String prueba[] = new String [noMeses];
	prueba = tablaMes.get(mes);
	
}
  #2 (permalink)  
Antiguo 21/01/2012, 07:32
 
Fecha de Ingreso: abril-2011
Mensajes: 1.342
Antigüedad: 13 años
Puntos: 344
Respuesta: Dudas con Hashtable

Puedes usar genéricos para que resulte más sencillo:

Código Java:
Ver original
  1. String meses[] = new String [noMeses]; 
  2.        
  3. BufferedReader fin = Text.open("entrada.txt");
  4.  
  5. Hashtable<String,String[]> tablaMes = new Hashtable<String,String[]>();
  6.  
  7.        
  8. System.out.println("CALENDARIOS BILINGUES");       
  9.        
  10. //Declaro dos Hashtables, una para los meses y otra para los días de la semana
  11. //Voy rellenando ambas tablas con los datos del fichero
  12. for(int i=0;i<noDeIdiomas;i++){
  13.     Calendario cal = new Calendario();
  14.     cal.ponerIdioma(fin);
  15.    
  16.     for(int j=0;j<noMeses;j++){
  17.         cal.ponerLiteralMeses(fin);
  18.         meses[j] = cal.literalMes;
  19.     }
  20.     tablaMes.put(cal.idioma,meses);
  21. }
  22.  
  23. //Muestro en pantalla los datos leidos     
  24. for(Enumeration e = tablaMes.keys();e.hasMoreElements();){
  25.    
  26.     String idioma = e.nextElement();   
  27.     System.out.println("Idioma:"+idioma);
  28.     String meses[] = new String [noMeses];
  29.     meses= tablaMes.get(mes);  
  30. }

También puedes usar el método entrySet:

Código Java:
Ver original
  1. Set<Map.Entry<String,String[]> entradas = tablaMes.entrySet();
  2.  
  3. for(Map.Entry<String,String[]> entrada : entradas){
  4.  
  5. String idioma = entrada.getKey();
  6. String[] meses = entrada.getValue();
  7. }
  #3 (permalink)  
Antiguo 21/01/2012, 10:26
 
Fecha de Ingreso: agosto-2007
Mensajes: 25
Antigüedad: 16 años, 8 meses
Puntos: 0
Respuesta: Dudas con Hashtable

He probado el primer caso y me da error de compilación en la línea:

Código:
Hashtable<String,String[]> tablaMes = new Hashtable<String,String[]>();
Errores:
1.- not a statement
2.- ";" expected

Estoy empezando con Java, y no se si será por la versión de Java que tengo:
1.- JAVA Version 6 Update 29
2.- j2sdk1.4.0

La librería java.util.* la tengo importada.

El segundo caso no lo conozco aún por lo que no me valdría utilizarlo.

Muchas gracias.
  #4 (permalink)  
Antiguo 21/01/2012, 11:19
 
Fecha de Ingreso: abril-2011
Mensajes: 1.342
Antigüedad: 13 años
Puntos: 344
Respuesta: Dudas con Hashtable

Pon el código completo, pero a mi me funciona bien.
  #5 (permalink)  
Antiguo 21/01/2012, 11:35
 
Fecha de Ingreso: agosto-2007
Mensajes: 25
Antigüedad: 16 años, 8 meses
Puntos: 0
Respuesta: Dudas con Hashtable

No sé si será problema de mi compilador: JCreator LE


Adjunto los fuentes. Con esto pretendo añadir que pida al usuario por teclado el nombre del idioma y muestre el nombre de los meses y dias de la semana en su correspondiente idioma.


CalendariosBiligunes.java

Código Javascript:
Ver original
  1. import java.io.*;
  2. import java.util.*;
  3. import javagently.*;
  4.  
  5. public class CalendariosBilingues {
  6.    
  7.     /**
  8.      * Method main
  9.      *
  10.      * @param args
  11.      *
  12.      */
  13.      
  14.     static final int noDeIdiomas = 2;
  15.     static final int noMeses = 12;
  16.     static final int noDias = 7;
  17.    
  18.     public static void main(String[] args) throws IOException {
  19.         // TODO: Add your code here
  20.    
  21.         String meses[] = new String [noMeses];
  22.         String dias[] = new String [noDias];
  23.    
  24.    
  25.        
  26.         BufferedReader fin = Text.open("entrada.txt");
  27.         BufferedReader in = Text.open(System.in);
  28.         Hashtable<String,String[]> tablaMes = new Hashtable<String,String[]>();
  29.         Hashtable<String,String[]> tablaDia = new Hashtable<String,String[]>();
  30.        
  31.        
  32.         System.out.println("CALENDARIOS BILINGUES");
  33.         System.out.println("=====================");
  34.        
  35.         //Declaro dos Hashtables, una para los meses y otra para los días de la semana
  36.         //Voy rellenando ambas tablas con los datos del fichero
  37.         for(int i=0;i<noDeIdiomas;i++){
  38.             Calendario cal = new Calendario();
  39.             cal.ponerIdioma(fin);
  40.            
  41.             for(int j=0;j<noMeses;j++){
  42.                 cal.ponerLiteralMeses(fin);
  43.                 meses[j] = cal.literalMes;
  44.             }
  45.             tablaMes.put(cal.idioma,meses);
  46.            
  47.             for(int j=0;j<noDias;j++){
  48.                 cal.ponerLiteralDias(fin);
  49.                 dias[j] = cal.literalDia;
  50.             }
  51.             tablaDia.put(cal.idioma,dias);
  52.         }
  53.        
  54.         //Muestro en pantalla los datos leidos     
  55.         System.out.println("Idioma\t\tMeses");
  56.         for(Enumeration e = tablaMes.keys();e.hasMoreElements();){
  57.             String idioma = (String)e.nextElement();
  58.            
  59.             String meses_nom[] = new String [noMeses];
  60.             meses_nom= tablaMes.get(idioma);
  61.  
  62.             for(int i=0;i<noMeses;i++){
  63.                 System.out.println(idioma+"\t\t"+meses_nom[i]); //Muestra idioma tabulado con el nombre del mes
  64.             }
  65.         }
  66.        
  67.         System.out.println();  
  68.     }  
  69. }

Calendarios.java
Código Javascript:
Ver original
  1. import java.io.*;
  2. import java.util.*;
  3. import javagently.*;
  4.  
  5. public class Calendario {
  6.    
  7.     String idioma, literalMes, literalDia;
  8.  
  9.    
  10.     public Calendario(){}
  11.    
  12.     void ponerIdioma(BufferedReader fin) throws IOException {
  13.         idioma = Text.readString(fin);
  14.         System.out.println("Idioma: "+idioma);
  15.        
  16.     }
  17.    
  18.     void ponerLiteralMeses(BufferedReader fin) throws IOException {
  19.         literalMes = Text.readString(fin);
  20.         System.out.println("literalMes: "+literalMes);
  21.     }
  22.    
  23.     void ponerLiteralDias(BufferedReader fin) throws IOException {
  24.         literalDia = Text.readString(fin);
  25.         System.out.println("literalDia: "+literalDia);
  26.     }      
  27. }
  #6 (permalink)  
Antiguo 21/01/2012, 12:34
 
Fecha de Ingreso: abril-2011
Mensajes: 1.342
Antigüedad: 13 años
Puntos: 344
Respuesta: Dudas con Hashtable

Yo lo he probado y funciona perfectamente.

El problema es el jdk, que es la versión 4 y para usar genéricos necesitas la version 1.5 como mínimo.

En caso de que no puedas, no puedes usar genéricos y tendrás que realizar los casting necesarios.

Etiquetas: dudas, 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 22:15.