Hilfe bei Translator-Aufgabe

julia1997

Bekanntes Mitglied
Was mache ich falsch?

Java:
import java.util.HashMap;
import java.util.*;

public class Translator <T1,T2> {
   
Map<String, Integer> tl = new HashMap<String, Integer>();
   
    //put
    public void put(String string, Integer integer){
        tl.put(string, integer);
        System.out.println(tl);
        }
   
    //translate
    public Object translate (Integer integer){
        Object value = tl.get(integer);
        return value;
        }
   
    //retranslate
        public Object retranslate(HashMap hm, Object value) {
            for (Object o : hm.keySet()) {
              if (hm.get(o).equals(value)) {
                return o;
              }
            }
            return null;
          }
   
   
    //test
    public static void main(String [] args){
        Translator <String , Integer > numbers = new Translator <String , Integer >();
        numbers.put("ONE", 1);
        numbers.put("TWO", 2);
        numbers.put("THREE", 3);
        System.out.println(numbers.translate(3));
        System.out.println(numbers.retranslate(tl,"three"));
    }
   
   
}
 
Zuletzt bearbeitet von einem Moderator:

mrBrown

Super-Moderator
Mitarbeiter
Du übergibst #retranslate eine HashMap, was aber überflüssig ist, #retranslate soll ja mit der eigenen HashMap, also der der des Transistors arbeiten.

In der Main kannst du tl nicht benutzen, da die main static ist, tl aber zu einem Object gehört.
 

julia1997

Bekanntes Mitglied
Java:
import java.util.HashMap;
import java.util.*;

public class Translator <T1,T2> {
   
Map<String, Integer> tl = new HashMap<String, Integer>();
   
    //put
    public void put(String string, Integer integer){
        tl.put(string, integer);
        System.out.println(tl);
        }
   
    //translate
    public Object translate (Integer integer){
        Object value = tl.get(integer);
        return value;
        }
   
    //retranslate
        public Object retranslate(Object value) {
            for (Object o : tl.keySet()) {
              if (tl.get(o).equals(value)) {
                return o;
              }
            }
            return null;
          }
   
   
    //test
    public static void main(String [] args){
        Translator <String , Integer > numbers = new Translator <String , Integer >();
        numbers.put("ONE", 1);
        numbers.put("TWO", 2);
        numbers.put("THREE", 3);
        System.out.println(numbers.translate(3));
        System.out.println(numbers.retranslate("three"));
    }
   
   
}
 

mrBrown

Super-Moderator
Mitarbeiter
Compilert es so und funktioniert es? Falls nein, welche Fehler gibt es?


Du solltest dir noch mal Nutzung von Generics angucken, bisher ist das eine falsche Verwendung.
 

mrBrown

Super-Moderator
Mitarbeiter
Was kann ich machen damit nicht 0 zurückgegeben wird

0 wird nicht zurückgegeben, sondern null.


Beim put benutzt du eine falsche Reihenfolge - oder bei der Benutzung.
Beim put ist der String der key, beim translate versuchst du aber den Integer als key zu benutzen -> Also kann nichts passendes gefunden werden.
Beim retranslate suchst du nach dem key (es sollte aber nach Value gesucht werden), in deiner Map existiert aber "three" nicht.

Du solltest also am besten die Parameter und Funktion von translate und retranslate anpassen, und die so umschreiben, dass Groß/Kleinschreibung ignoriert wird, wenn gewünscht.

Außerdem: Guck dir Generics an.
 

julia1997

Bekanntes Mitglied
0 wird nicht zurückgegeben, sondern null.


Beim put benutzt du eine falsche Reihenfolge - oder bei der Benutzung.
Beim put ist der String der key, beim translate versuchst du aber den Integer als key zu benutzen -> Also kann nichts passendes gefunden werden.
Beim retranslate suchst du nach dem key (es sollte aber nach Value gesucht werden), in deiner Map existiert aber "three" nicht.

Du solltest also am besten die Parameter und Funktion von translate und retranslate anpassen, und die so umschreiben, dass Groß/Kleinschreibung ignoriert wird, wenn gewünscht.

Außerdem: Guck dir Generics an.

retranslate funktioniert jetzt ! danke! aber was kann ich bei translate ändern?
 

julia1997

Bekanntes Mitglied
Java:
import java.util.HashMap;
import java.util.*;

public class Translator <T1,T2> {
   
Map<String, Integer> tl = new HashMap<String, Integer>();
   
    //put
    public void put(String string, Integer integer){
        tl.put(string, integer);
        System.out.println(tl);
        }
   
    //translate
    public Object translate (String string){
        Object value = tl.get(string);
        return value;
        }
   
    //retranslate
        public Object retranslate(Object value) {
            for (Object o : tl.keySet()) {
              if (tl.get(o).equals(value)) {
                return o;
              }
            }
            return null;
          }
   
    //test
    public static void main(String [] args){
        Translator <String , Integer > numbers = new Translator <String , Integer >();
        numbers.put("ONE", 1);
        numbers.put("TWO", 2);
        numbers.put("THREE", 3);
        System.out.println(numbers.translate("three"));
        System.out.println(numbers.retranslate(3));
    }
   
   
}
 

mrBrown

Super-Moderator
Mitarbeiter
Als key fügst du "THREE" hinauf, suchst aber nach "three".

Entweder du benutzt beim Aufruf #translate den richtigen Key, oder innerhalb der Methoden von translate (nötig wären #put und #translate) konvertierst du jeden String erst in Großbuchstaben, bevor irgendwas damit gemacht wird
 

julia1997

Bekanntes Mitglied
Java:
//translate
    public Object translate(Object value) {
        for (Object o : tl.values()) {
          if (tl.get(o).equals(value)) {
            return o;
          }
        }
        return null;
      }
   
    //retranslate
        public Object retranslate(Object value) {
            for (Object o : tl.keySet()) {
              if (tl.get(o).equals(value)) {
                return o;
              }
            }
            return null;
          }


Gibt es kein Gegenstück zu keySet und get?
 

Neue Themen


Oben