Avatar billede missmalik Nybegynder
10. november 2004 - 21:44 Der er 29 kommentarer og
1 løsning

Problemer med HashMap. den retunere null, istedet for value

Hej, jeg sidder og har problemer med HashMap klassen.
Jeg skal lave et telefon bog eksempel og har implementeret følgende:

public MapTester()
    {

        phoneBook= new HashMap();
    }


   
    public void enterNumber(String name, String number)
    {
        phoneBook.put( "charles  ","(531) ");
        phoneBook.put( "Lisa  ","(666) ");
        phoneBook.put( "Martin  ","(999) ");
       
    }
 
   


    public String lookupNumber( String name)
    {
       
        String  number =( String)phoneBook.get(name, number);
        return(number) ;
               
        }
}

Hvergang jeg compiler så er der ikke nogen syntaks fejl, men når jeg prøver at køre programet, så siger den nullpoint..
Hvordan får man den til at retunere den rigtige key til den rigtige værdi

På forhånd tak
Avatar billede kalp Novice
10. november 2004 - 21:48 #1
public enterNumber(String name, String number)
    {
        phoneBook.put( "charles  ","(531) ");
        phoneBook.put( "Lisa  ","(666) ");
        phoneBook.put( "Martin  ","(999) ");
       
    }


?
Avatar billede kalp Novice
10. november 2004 - 21:48 #2
ahh nej.. overså noget
Avatar billede arne_v Ekspert
10. november 2004 - 21:49 #3
String  number =( String)phoneBook.get(name, number);

bør give compile fejl - det må skule være:

String  number =( String)phoneBook.get(name);
Avatar billede kalp Novice
10. november 2004 - 21:51 #4
like til dit nick name... bør det ikke være

missmalike?
Avatar billede arne_v Ekspert
10. november 2004 - 21:51 #5
Og det er svært ikke at tro andet end at

public void enterNumber(String name, String number)
    {
        phoneBook.put( "charles  ","(531) ");
        phoneBook.put( "Lisa  ","(666) ");
        phoneBook.put( "Martin  ","(999) ");
     
    }

skulle være

public void enterNumber(String name, String number)
    {
        phoneBook.put( name, number);
     
    }

og

enterNumber( "charles  ","(531) ");
enterNumber( "Lisa  ","(666) ");
enterNumber( "Martin  ","(999) ");
Avatar billede missmalik Nybegynder
10. november 2004 - 21:55 #6
Hey arne

hov, det er mig som har skrevet forkert, der skal kun stå number..
men den retunerer stadigvæk null.
Jeg har også ændret værdierne, så der er en () udenom...
Avatar billede arne_v Ekspert
10. november 2004 - 21:56 #7
Du mener at der kun skal stå name ikke ?
Avatar billede arne_v Ekspert
10. november 2004 - 21:57 #8
Og kalder du metoden med et navn som falst er sat ind ?
Avatar billede missmalik Nybegynder
10. november 2004 - 22:00 #9
public void enterNumber(String name, String number)
    {
        phoneBook.put( "charles  ","(531) ");
        phoneBook.put( "Lisa  ","(666) ");
        phoneBook.put( "Martin  ","(999) ");
       
    }
 
    public String lookupNumber( String name)
    {
       
        String  number =( String)phoneBook.get(name);
        return(number) ;



Jeg er ikke lige helt med på det eksempel du gav udenover
Avatar billede arne_v Ekspert
10. november 2004 - 22:03 #10
Min 21:51:50 kommentar har intet med dit problem at gøre bare et generelt godt råd.

Hvad kalder du lookupNumber med ?
Avatar billede missmalik Nybegynder
10. november 2004 - 22:09 #11
hvad jeg kalder den med.... igen er jeg ikke med
public String lookupNumber( String name)..


jeg skal bruge get metoden, så den retuner værdi som hører til den bestemte key..
Når jeg går og taster " charles" for jeg null tilbage i hovedet, istedet for 531
Avatar billede arne_v Ekspert
10. november 2004 - 22:11 #12
" charles" skal give null
"charles  " skal give "(531) "
Avatar billede kalp Novice
10. november 2004 - 22:12 #13
public String lookupNumber(String number)
    {
       
        String  number =(String)phoneBook.get(number);
        return(number) ;
               
        }
Avatar billede kalp Novice
10. november 2004 - 22:12 #14
er faktisk forvirret
Avatar billede missmalik Nybegynder
10. november 2004 - 22:12 #15
charles skal da give 531....
Avatar billede arne_v Ekspert
10. november 2004 - 22:13 #16
charles efterfulgt af mellemrum skal give 531
mellemrum efterfulgt af charles skal give null
Avatar billede arne_v Ekspert
10. november 2004 - 22:14 #17
kalp>

slå number op med number ??
Avatar billede missmalik Nybegynder
10. november 2004 - 22:18 #18
nu går det da helt galt for os drenge..

Jeg skal bruge name , til at slå number op med

så må metoden vel hedde..

public String lookupNumber(String name)
    {
       
        String  number =(String)phoneBook.get(name);
        return(number) ;
               
        }
Avatar billede arne_v Ekspert
10. november 2004 - 22:19 #19
ja !
Avatar billede missmalik Nybegynder
10. november 2004 - 22:21 #20
men den retunere stadigvæk null
Avatar billede arne_v Ekspert
10. november 2004 - 22:23 #21
Og du kalde med charles efterfulgt af mellemrum og ikke mellemrum efterfulgt af charles
eller bare charles ?
Avatar billede kalp Novice
10. november 2004 - 22:32 #22
arne_v:


10/11-2004 22:14:06

Jeg ved det godt: ) derfor jeg skrev min kommentar lige efter.. så den var galt hehe
Avatar billede missmalik Nybegynder
10. november 2004 - 22:36 #23
Jeg ved ikke hvad jeg gjorder, men nu virker det
Avatar billede kalp Novice
10. november 2004 - 22:37 #24
din ekspert hehe
Avatar billede kalp Novice
10. november 2004 - 22:37 #25
jeg var ellers lige ved at have løsningen :p
Avatar billede kalp Novice
10. november 2004 - 22:39 #26
package Telefonbog;

import javax.swing.JFrame;
import java.awt.Dimension;
import javax.swing.JPanel;
import java.awt.Rectangle;
import javax.swing.JTextField;
import javax.swing.JLabel;
import javax.swing.JButton;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;

public class TelefonbogFrame extends JFrame
{
  private TelefonbogControl tc;
  private JPanel jPanel1 = new JPanel();
  private JTextField jTextField1 = new JTextField();
  private JTextField jTextField2 = new JTextField();
  private JLabel jLabel1 = new JLabel();
  private JLabel jLabel2 = new JLabel();
  private JButton jButton1 = new JButton();
  private JButton jButton2 = new JButton();
  private JLabel jLabel3 = new JLabel();
  private JButton jButton3 = new JButton();
  public TelefonbogFrame()
  {
    try
    {
      jbInit();
      tc = new TelefonbogControl();
    }
    catch(Exception e)
    {
      e.printStackTrace();
    }

  }

  private void jbInit() throws Exception
  {
    this.getContentPane().setLayout(null);
    this.setSize(new Dimension(400, 300));
    this.setTitle("Telefonbog");
    jPanel1.setBounds(new Rectangle(0, 0, 390, 265));
    jPanel1.setLayout(null);
    jTextField1.setBounds(new Rectangle(105, 20, 195, 35));
    jTextField2.setBounds(new Rectangle(105, 75, 195, 35));
    jLabel1.setText("Navn");
    jLabel1.setBounds(new Rectangle(10, 20, 70, 35));
    jLabel2.setText("Telefonnummer");
    jLabel2.setBounds(new Rectangle(10, 75, 90, 35));
    jButton1.setText("Indsæt");
    jButton1.setBounds(new Rectangle(105, 145, 85, 35));
    jButton1.addActionListener(new ActionListener()
      {
        public void actionPerformed(ActionEvent e)
        {
          jButton1_actionPerformed(e);
        }
      });
    jButton2.setText("Find Nummer");
    jButton2.setBounds(new Rectangle(195, 145, 105, 35));
    jButton2.addActionListener(new ActionListener()
      {
        public void actionPerformed(ActionEvent e)
        {
          jButton2_actionPerformed(e);
        }
      });
    jLabel3.setText(" ");
    jLabel3.setBounds(new Rectangle(15, 235, 370, 25));
    jButton3.setText("Antal");
    jButton3.setBounds(new Rectangle(105, 190, 85, 30));
    jButton3.addActionListener(new ActionListener()
      {
        public void actionPerformed(ActionEvent e)
        {
          jButton3_actionPerformed(e);
        }
      });
    jPanel1.add(jButton3, null);
    jPanel1.add(jLabel3, null);
    jPanel1.add(jButton2, null);
    jPanel1.add(jButton1, null);
    jPanel1.add(jLabel2, null);
    jPanel1.add(jLabel1, null);
    jPanel1.add(jTextField2, null);
    jPanel1.add(jTextField1, null);
    this.getContentPane().add(jPanel1, null);
  }

  private void jButton1_actionPerformed(ActionEvent e)
  {
    String navn = jTextField1.getText();
    int tlfNr = Integer.parseInt(jTextField2.getText());
    tc.indsætPerson(navn, tlfNr);
    jLabel3.setText("Ny person indsat");
  }

  private void jButton3_actionPerformed(ActionEvent e)
  {
    jLabel3.setText("Der er " + tc.antalPersoner() + " person(er) i telefonbogen");
  }

  private void jButton2_actionPerformed(ActionEvent e)
  {
    String navn = jTextField1.getText();
    int nr = tc.findTlflNrForNavn(navn);
    if (nr >=0)
      jTextField2.setText("" + nr);
    else
    {
      jTextField1.setText("");
      jLabel3.setText("Navnet findes ikke");
    }
  }
}














package Telefonbog;

import java.util.ArrayList;

public class TelefonbogControl
{
  ArrayList TListe;
  public TelefonbogControl()
  {
    TListe = new ArrayList();
  }

  public void indsætPerson(String n, int tn)
  {
    Person p = new Person(n, tn);
    TListe.add(p);
  }
  /**
  * Finder personen med det angivne navn og returnerer telefonnummeret;
  * Hvis personen ikke findes returneres -1.
  */
  public int findTlflNrForNavn(String n)
  {
    boolean found = false;
    int i = 0;
    while(i< TListe.size() && !found)
    {
      if ( ((Person)TListe.get(i)).navn.equals(n) )
      {
        found = true;       
      }
      else
        i++;
    }
    if (i< TListe.size())
      return ((Person)TListe.get(i)).tlfNr;
    else
      return -1;
  }
  public int antalPersoner()
  {
    return TListe.size();
  }
}








package Telefonbog;

import java.awt.Frame;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import javax.swing.UIManager;
import java.awt.Dimension;
import java.awt.Toolkit;

public class TelefonbogApp
{
  public TelefonbogApp()
  {
    Frame frame = new TelefonbogFrame();
    Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
    Dimension frameSize = frame.getSize();
    if (frameSize.height > screenSize.height)
    {
      frameSize.height = screenSize.height;
    }
    if (frameSize.width > screenSize.width)
    {
      frameSize.width = screenSize.width;
    }
    frame.setLocation((screenSize.width - frameSize.width) / 2, (screenSize.height - frameSize.height) / 2);
    frame.addWindowListener(new WindowAdapter()
      {
        public void windowClosing(WindowEvent e)
        {
          System.exit(0);
        }
      });
    frame.setVisible(true);
  }

  public static void main(String[] args)
  {
    try
    {
      UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
    }
    catch(Exception e)
    {
      e.printStackTrace();
    }

    new TelefonbogApp();
  }
}





package Telefonbog;


public class Person
{
  String navn;
  int tlfNr;
 
  public Person(String n, int tn)
  {
    navn = n;
    tlfNr = tn;
  }
}
Avatar billede missmalik Nybegynder
11. november 2004 - 09:39 #27
hold da helt ferie....

jamen jeg siger tak for hjælpen ....
Avatar billede kalp Novice
11. november 2004 - 10:45 #28
ingen årsag: )
Avatar billede kalp Novice
22. november 2004 - 11:49 #29
læg et svar og luk spørgsmålet:)
Avatar billede missmalik Nybegynder
16. december 2004 - 12:55 #30
tak for hjælpen
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester