Jump to content

Recommended Posts

Posted (edited)

Boas,

Estou aqui com um problema que não estou a conseguir resolver, a minha intenção ér ter um HashMap duplo que sirva de dicionário para diversas línguas, por exemplo se fizer Dicionario.add("portugues","HELLO","ola"); terei como chaves o "portugues" e o "HELLO" e o valor lá guardado seria a string "ola", o código que tenho é o seguinte:


public class Dicionario {

      HashMap <String, HashMap <String,String> > mapa;

      String chave = null;

   void add(String lingua, String indice, String palavra) {


      HashMap <String,String> novo = null;
      novo.put(indice, palavra);

      mapa.put(lingua,novo);

   }

   void defineLingua(String lingua) {
       this.chave=lingua;
   }

   public String get(String pesquisar)
   {
       String palavra=null;
       HashMap <String,String> procurar;
       procurar=mapa.get(chave);

       palavra=procurar.get(pesquisar);

       return palavra;
   }

}

O código está bastante simples e pela minha lógica deveria funcionar, no entanto por alguma razão que não entendo está a dar erro no método add, alguém me sabe dizer o que lá estou a fazer mal?

Cumprimentos

Edited by thoga31
GeSHi
Posted (edited)

Realmente o meu problema era mesmo só de estar a fazer isto á noite cansado e não vi que não tinha inicializado as variáveis decentemente, muito obrigado aos dois, no entanto agora surgiu-me outra coisa que eu não "esperava", tenho isto:


public class Dicionario {

   private HashMap <String, HashMap <String,String> > mapa ;
   private String chave;

   Dicionario(){
	   mapa = new HashMap();
	   chave = new String();
   }
   void add(String lingua, String indice, String palavra) {


		HashMap <String,String> novo = new HashMap();
		//System.out.print("adicionar " + indice + " " + palavra + "\n");
		novo.put(indice, palavra);

		//System.out.print("adicionar " + lingua + " " + novo.toString() + "\n");
		mapa.put(lingua,novo);

	}

		void defineLingua(String lingua) {
		this.chave=lingua;
		//System.out.print("para a lingua " + lingua + " existem: " + mapa.get(lingua).toString());
	}

	public String get(String pesquisar)
	{
		String palavra;
		HashMap <String,String> procurar;
		procurar=mapa.get(chave);

		palavra=procurar.get(pesquisar);

		return palavra;
	}

}

e por exemplo com esta main:

public static void main(String [] args){

	Dicionario d=new Dicionario();

	d.add("ingles","LIVRO","Book");
	d.add("frances","LIVRO","livre");
	d.add("portugues","LIVRO","livro");
	d.add("ingles","ANO","year");
	d.add("frances","ANO","an");
	d.add("portugues","ANO","ano");


	d.defineLingua("ingles");
	System.out.println(d.get("ANO")); //year
	d.defineLingua("portugues");
	System.out.println(d.get("ANO"));//ano
	d.defineLingua("frances");
	System.out.println(d.get("LIVRO"));//livre


}

O objectivo dos dois HashMaps seria por exemplo com a chave de lingua e com a chave da palavra ir buscar a tradução, no entanto ele está a sobrepor as linguas (chaves iguais, consigo aceder aos "ANO" mas não aos "LIVRO") será que consigo resolver isto com os dois HashMaps que tenho ou necessito estruturas de dados auxiliares?

Edited by Death_Knight
Posted

Isso compila sem warnings?

"[Os jovens da actual geração]não lêem porque não envolve um telecomando que dê para mirar e atirar, não falam porque a trapalhice é rainha e o calão é rei" autor: thoga31

Life is a genetically transmitted disease, induced by sex, with death rate of 100%.

Posted (edited)

Isso compila sem warnings?

Compila sem qualquer warning

nas maps, a chave é única, por isso nunca terás os dados que estás a usar

por outras palavras : tens de mudar completamente como estás a fazer

Então por exemplo como me aconselhas a colocar chaves "compostas por duas" ?

Exemplo:

A classe dicionário que estou a desenvolver armazena 3 Strings para cada palavra a pesquisar

Uma String da língua

Uma String da palavra em Inglês

Se tiver a palavra "adeus" a ideia era na classe ter como chaves (adicionadas nesse meu método add) "Português" e "Goodbye" representando por HashMaps a ideia original era:

HashMap <Chave1 (A lingua), HashMap <Chave Secundária (a palavra em Inglês), "Adeus" (ou a palavra a ser pesquisada pelo uso das duas chaves anteriores) > >

Espero ter-me explicado bem

Edited by Death_Knight
Posted

nop, seria melhor:

public class Dicionario
{
 protected Key
 {
   protected String lang;
   protected String handle;

   public Key(string lang, string handle)
   {
     this.lang = lang;
     this.handle = handle;
   }

   public getLang() { return this.lang; }
   public getHandle() { return this.handle; }

   public boolean equals(Object obj)
   {
     if ( this == obj ) return true;            // self-compare
     if ( !(obj instanceof Key) ) return false; // type check

     Key key = (Key)obj;
     return this.lang.compareTo(key.lang) == 0 && this.handle.compareTo(key.handle) == 0;
   }
 }

 protected HashMap<Key, String> list;

 public add(String lang, String handle, String entry)
 {
   list.put(Key(lang, handle), entry);
 }
}
IRC : sim, é algo que ainda existe >> #p@p

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.