2013-05-05, 22:00
  #1
Medlem
Hej, jag har ett vldigt mrkligt och jobbigt problem med att matcha key. Hoppas ni vet vad det kan bero p. Det r s att jag har gjort en klass Databas med en hashmap som lagrar Ownerobjekt(egenskriven klass) som key och en annan klass som value. I owner har jag definierat hashCode och equals. Det r 10-siffrigt personnr som r key. Problemet ligger i att nr jag anvnder JOptionPane.showInputDialog fr att skriva in personnr s matchar inte nyckeln men om jag istllet skriver definierar personnr i koden s matchar den. Vet inte hur man lgger upp kod hr men kan visa med ett litet exempel.

Funkar INTE:
String id = JOptionPane.showInputDialog("Nr:");
(Skriver in "7503030043)
db.getOwner(id);

FUNKAR:
db.getOwner("7503030043");

Det konstiga r ocks att jag programmerat ett liknande system, en telefonbok, fast den var lttare d bara namn som String var key, och d funkade det utan minsta problem med JOptionPane.showInputDialog.
Citera
2013-05-05, 22:16
  #2
Medlem
usb3s avatar
Testa:

String id = (String) JOptionPane.showInputDialog("Nr:");
Citera
2013-05-05, 22:26
  #3
Moderator
Protons avatar
Citat:
Ursprungligen postat av freefestis
Hej, jag har ett vldigt mrkligt och jobbigt problem med att matcha key. Hoppas ni vet vad det kan bero p. Det r s att jag har gjort en klass Databas med en hashmap som lagrar Ownerobjekt(egenskriven klass) som key och en annan klass som value. I owner har jag definierat hashCode och equals. Det r 10-siffrigt personnr som r key. Problemet ligger i att nr jag anvnder JOptionPane.showInputDialog fr att skriva in personnr s matchar inte nyckeln men om jag istllet skriver definierar personnr i koden s matchar den. Vet inte hur man lgger upp kod hr men kan visa med ett litet exempel.

Funkar INTE:
String id = JOptionPane.showInputDialog("Nr:");
(Skriver in "7503030043)
db.getOwner(id);

FUNKAR:
db.getOwner("7503030043");

Det konstiga r ocks att jag programmerat ett liknande system, en telefonbok, fast den var lttare d bara namn som String var key, och d funkade det utan minsta problem med JOptionPane.showInputDialog.
Har du kollat vad du verkligen fr ut i din instans id? om det nu funkar med en hrdkodad strng borde det ju inte vara varken din equals-metod eller hashCode som r boven i dramat, utan snarare att du frn din showInputDialog fr ut ngt annat n det du tror. r det s att den skickar med entertryckningen med, eller nt annat som fintar bort equals? Du fr stta en brealpoint och kolla med en debugger helt enkelt. Borde du ju veta hur det funkar eftersom du vet att overrida equals och hashCode.
Citera
2013-05-05, 23:12
  #4
Medlem
Provade: String id = (String) JOptionPane.showInputDialog("Nr:"); men det funkade tyvrr inte.

I metoden getOwner i klassen Database s skriver jag ut id med System.out.println och ven id.hashCode() och owner.hashCode() och fr bda stten s skrivs hashcoden -2032772701 fr 7503030043. S det verkar ju som om id r precis samma String. Har inte s bra koll p debugger, fick inte ut ngot av det. Ska googla lite och prova mer imorrn.

Metoden getOwner ser ut typ s hr:
public Owner getOwner(String id)
Owner owner = new Owner(id);
table.containsKey(owner.hashCode());


I Owner ser metoderna ut s hr:
Kod:
public boolean equals(Object owner) {
    if (
owner instanceof Owner) {
        return ((
Owner)owner).getId == id;
    }
    return 
false;
}
    
public 
int hashCode() {
    return 
id.hashCode();

__________________
Senast redigerad av Proton 2013-05-06 kl. 06:51.
Citera
2013-05-05, 23:20
  #5
Medlem
hoppsan, lite trtt tror jag :S

public Owner getOwner(String id) {
......System.out.println("id: " + id + "id.hashcode " + id.hashCode());
......Owner owner = new Owner(id);
......System.out.println("owner.hashcode: " + owner.hashCode());
......if (table.containsKey(owner)) {
...........Set<Owner> set = table.keySet();
...........for (Owner o: set) {
.................if (o.getId() == id) {
....................return o;
.................}
..........}
......}
......return null;
Citera
2013-05-06, 06:55
  #6
Moderator
Protons avatar
Om id r en string r fljande sats felaktig i din equals-metod gissar jag:

Kod:
return ((Owner)owner).getId == id
iaf om getId returnerar en String, r det inte vrdet i din string du vill ha tag p och inte om referenserna r desamma?
Citera
2013-05-06, 12:28
  #7
Medlem
Du hade rtt! Nu funkar allt, getOwner, removeOwner mm. TACK!
Citera
2013-05-08, 20:50
  #8
Medlem
trimma den, kolla om den equals till den andra, och nej, anvnd inte == nr det gller strings
Citera

Skapa ett konto eller logga in för att kommentera

Du måste vara medlem för att kunna kommentera

Skapa ett konto

Det är enkelt att registrera ett nytt konto

Bli medlem

Logga in

Har du redan ett konto? Logga in här

Logga in