Avatar billede michelle_mikkelsen Nybegynder
04. februar 2003 - 11:04 Der er 11 kommentarer og
1 løsning

Programmet gennemløber ikke igennem metoden....

Jeg har et program der udskyder oplysninger om en givet person, når man indtaster personens CPR.nr.
Men når det er at jeg indtaster CPR.nr. så sker der ikke noget.....hvorfor....hmmmm
Jeg sender lige alle tre klasser....håber at der er nogen der kan hjælpe mig.....
---------------------------------------------------------
public class Array
{
    private Personnummer[] Personliste;

        public Array ()
        {
            Personliste = new Personnummer[3];


            Personliste[0] = new Personnummer ("2102811221","Christina Nielsen");
            Personliste[1] = new Personnummer ("2102811221","Benjamin Jakobsen");
            Personliste[2] = new Personnummer ("3112701656","Camilla Larsen");

        }

    static Personnummer[] personliste = {};

    static int sidste=1;
    static String fundet = "";


    public static String findperson(String cpr)

    {
        test:
        for (int i=0; i<sidste; i++)
        {
            if(personliste[i].getCpr().equals(cpr) == true)
            {
                fundet = personliste[i].getNavn();
                break test;
            }

        else
                fundet = "Ugyldig CPR.nr.! Personen findes ikke";

        }

        return fundet;

    }
}
----------------------------------------------------------
public class Person

    {
    private String cpr;
    private String navn;

    public Person(String pCpr, String pNavn)

        {
            cpr= pCpr;
            navn=pNavn;
        }

        public String getCpr(){return cpr; }
        public String getNavn(){return navn; }


            public String toString()

            {
                return cpr+ ", "+navn;
            }
}
----------------------------------------------------------
import java.awt.event.*;
import java.awt.*;
import java.applet.*;
import javax.swing.*;
import java.applet.Applet;

public class ObligatoriskUgeopgaveO4 extends JFrame implements ActionListener
{
        private    JButton søgKnap = new JButton("Søg");
        private    JButton annulerKnap = new JButton("Annuler");

        private    JTextField text  = new JTextField(15);
        private    JTextField text1 = new JTextField(30);
        private    JTextField text2 = new JTextField(30);
        private    JTextField text3 = new JTextField(30);
        private    JTextField text4 = new JTextField(30);
        private    JTextField text5 = new JTextField(30);

        private    JLabel fornavn = new JLabel  ("Fornavn    :");
        private    JLabel efternavn = new JLabel("Efternavn  :");
        private    JLabel addresse = new JLabel ("Adresse    :");
        private    JLabel postnr = new JLabel  ("Postnr.    :");
        private    JLabel by = new JLabel      ("By        :");

        private JTextField cpr;
        private JLabel svar;
        private String mcpr;
        private String mnavn;

public ObligatoriskUgeopgaveO4()
{


                Container cP = getContentPane();

                cP.setLayout(new FlowLayout());

                cpr= new JTextField(15);

                cP.add(new JLabel("Indtast CPR.nr."));
                cP.add(cpr);
                cP.add(søgKnap);
                cP.add(annulerKnap);
                cP.add(fornavn);
                cP.add(text1);
                cP.add(efternavn);
                cP.add(text2);
                cP.add(addresse);
                cP.add(text3);
                cP.add(postnr);
                cP.add(text4);
                cP.add(by);
                cP.add(text5);

                setContentPane(cP);


                søgKnap.addActionListener(this);
            }

              public void actionPerformed(ActionEvent e)


            {
                if (e.getSource() == søgKnap)
                {
                    mcpr = cpr.getText();
                    mnavn = Array.findperson(cpr.getText());

                    svar.setText(mnavn);
//                    svar.setForegrond(Color.blue);
                }
            }
}
Avatar billede jakoba Nybegynder
04. februar 2003 - 11:21 #1
du roder lidt rundt imellem de to definitioner:

    private Personnummer[] Personliste;
    static Personnummer[] personliste = {};

nogen gange bruger du 'Personliste' (stort P) og nogen gange 'personliste' (lille p)

    Er der overhovedet brug for 2 forskellige arrays der?

mvh JakobA
Avatar billede Slettet bruger
04. februar 2003 - 11:21 #2
din findPerson metode er statisk og bliver derfor ikke instantieret og konstruktøren ikke kaldt. den statiske personliste (med lille p) er et tomt array, og ser ud til det burde give NullPointerException

private Personnummer[] Personliste;
static Personnummer[] personliste = {};
public static String findperson(String cpr)
    {
        test:
        for (int i=0; i<sidste; i++)
        {
            if(personliste[i].getCpr().equals(cpr) == true)
            {
                fundet = personliste[i].getNavn();
                break test;
            }
        else
                fundet = "Ugyldig CPR.nr.! Personen findes ikke";
        }
        return fundet;
    }
}
Avatar billede jakoba Nybegynder
04. februar 2003 - 11:39 #3
og din variabel 'sidste' bør holdes opdateret så den passer med antallet af personer i arrayet.
Avatar billede michelle_mikkelsen Nybegynder
04. februar 2003 - 11:42 #4
Der er nemlig ikke brug for to arrays, jeg skal kun bruge et. Problemet er nu bare, hvad det er for et man ska bibeholde....... for sletter man det ene så viser programmet en hel masse fejl.....
Avatar billede jakoba Nybegynder
04. februar 2003 - 11:52 #5
hvad med:
  private static final int MAXPERSONER = 25;  // eller et andet tal

  private static Personnummer[] personliste = new Personnummer[MAXPERSONER];
  private static sidste = 0;  // fortæller hvormange personer der er i arrayet

og så en ny metode:

public static boolean indsaetPerson(String cpr, String navn)

der indsætter en ny person i arrayet hvis der er plads til flere
og returnerer true hvis der var plads og false hvis der ikke var plads.

mvh JakobA
Avatar billede michelle_mikkelsen Nybegynder
04. februar 2003 - 12:22 #6
jokoba ka du ik prøve at sende mig en version der kører nogen lunde...... fordi den version jeg har nu, er fuldstændigt ødelagt..... den viser nu 59 fejl......... den er helt gal.......
Avatar billede jakoba Nybegynder
04. februar 2003 - 12:32 #7
nixen bixen :-)
det er din hjemmeopgave, jeg vil kun give råd.

rådet lige nu er at rette de fejl en ad gangen (den øverste først, da det sandsynligvis er den der giver en masse følgefejl.)
Avatar billede jakoba Nybegynder
04. februar 2003 - 12:50 #8
en hel del af din problemer kunne komme af at du definerer arrayet som et der skal indeholde objekter af typen 'Personnummer', men har en klasse der hedder 'Person' som skal stoppes i det.
Avatar billede gybel Nybegynder
04. februar 2003 - 22:46 #9
Problemerne ligger i din Array klasse (dårligt navn forreste).

Sådan skal den laves:

public class Array1
{
    private Person[] personListe = new Person[3];;

        public Array1 ()
        {



            personListe[0] = new Person ("2102811221","Christina Nielsen");
            personListe[1] = new Person ("2102811221","Benjamin Jakobsen");
            personListe[2] = new Person ("3112701656","Camilla Larsen");

        }

    //static Personnummer[] personliste = {};

    //private int sidste=1;
    private String fundet = "";


    public String findperson(String cpr)

    {

        for (int i=0; i<personListe.length; i++)
        {
            if(personListe[i].getCpr().equals(cpr))
            {
                fundet = (String)personListe[i].getNavn();
                break;
            }

        else
                fundet = "Ugyldig CPR.nr.! Personen findes ikke";

        }

        return fundet;

    }
}
Avatar billede gybel Nybegynder
04. februar 2003 - 22:51 #10
Det gik galt.. nå men bemærk...
metoden findPerson er ikke statisk men benytter det array du opretter i construktoren og ikke noget med flere arrays.
En anden fejl i din forløkke er det bedst at bruge længden på dit array (sikre at der ikke kastes en exception.

Udover disse rettelser skal du lave om i din GUI klasse så du opretter et objekt af typen Array1 og kalder metoden findPerson derfra.

import java.awt.event.*;
import java.awt.*;
import java.applet.*;
import javax.swing.*;
import java.applet.Applet;

public class GUI extends JFrame implements ActionListener
{
        private    JButton søgKnap = new JButton("Søg");
        private    JButton annulerKnap = new JButton("Annuler");

        private    JTextField text  = new JTextField(15);
        private    JTextField text1 = new JTextField(30);
        private    JTextField text2 = new JTextField(30);
        private    JTextField text3 = new JTextField(30);
        private    JTextField text4 = new JTextField(30);
        private    JTextField text5 = new JTextField(30);

        private    JLabel fornavn = new JLabel  ("Fornavn    :");
        private    JLabel efternavn = new JLabel("Efternavn  :");
        private    JLabel addresse = new JLabel ("Adresse    :");
        private    JLabel postnr = new JLabel  ("Postnr.    :");
        private    JLabel by = new JLabel      ("By        :");

        private JTextField cpr;
        private JLabel svar;
        private String mcpr;
        private String mnavn;
        private Array1 personer;

public GUI()
{


                Container cP = getContentPane();
                personer = new Array1();

                cP.setLayout(new FlowLayout());

                cpr= new JTextField(15);

                cP.add(new JLabel("Indtast CPR.nr."));
                cP.add(cpr);
                cP.add(søgKnap);
                cP.add(annulerKnap);
                cP.add(fornavn);
                cP.add(text1);
                cP.add(efternavn);
                cP.add(text2);
                cP.add(addresse);
                cP.add(text3);
                cP.add(postnr);
                cP.add(text4);
                cP.add(by);
                cP.add(text5);

                setContentPane(cP);


                søgKnap.addActionListener(this);
            }

              public void actionPerformed(ActionEvent e)


            {
                if (e.getSource() == søgKnap)
                {
                    mcpr = cpr.getText();
                    mnavn = personer.findperson(cpr.getText());
                    System.out.println(mcpr);

                    text1.setText(mnavn);
//                    svar.setForegrond(Color.blue);
                }
            }

          public static void main(String[] args) {
              new GUI().show();
          }
}

Person klasse:

public class Person

    {
    private String cpr;
    private String navn;

    public Person(String pCpr, String pNavn)

        {
            cpr= pCpr;
            navn=pNavn;
        }

        public String getCpr(){return cpr; }
        public String getNavn(){return navn; }


            public String toString()

            {
                return cpr+ ", "+navn;
            }
}


Bemærk lige at koden er langt fra optimeret.. se lige lidt på det ;o)
Avatar billede =maddog= Nybegynder
05. februar 2003 - 01:10 #11
/*
Du kan med fordel anvende Hashtable. Det bliver for 'fnidret' med et array.
Hvis det er imperativt at du har et selvstændigt objekt til at udgøre en person
synes jeg du skulle lave det som en indre klasse (Person giver ingen mening uden listen),
selvom jeg selv ville have lavet det med cpr-nummeret som key.
*/
import java.util.Hashtable;
import java.util.Iterator;


public class PersonListe {
   
    private Hashtable personer;
    private int length;

        public PersonListe() {
            // Dan tom instans
            personer = new Hashtable();
            length = 0;
        }
       
        public PersonListe(PersonListe.Person p) {
            // Dan instans med en person
            personer = new Hashtable();
            length = 0;
            add(p);
        }
       
        public void add(PersonListe.Person p) {
            personer.put(new Integer(length),p);
            length++;
        }
       
        public void add(String cpr, String navn) {
            add(new Person(cpr,navn));
        }
       
        public PersonListe.Person find(PersonListe.Person p) {
            Person found=null; Object o;
            Iterator i = personer.values().iterator();
            while (i.hasNext()) {
                o = i.next();
                if (p.equals(o)) found = p;
              }
            return found;
        }
       
        public PersonListe.Person find(String cpr, String navn) {
            return find(new Person(cpr,navn));
        }
       
        public PersonListe.Person findCpr(String cpr) {
            Person found=null; Object o;
            Iterator i = personer.values().iterator();
            while (i.hasNext()) {
                o = i.next();
                if (o instanceof PersonListe.Person) {
                    if (((Person)o).getCpr().equals(cpr)) found = (Person)o;
                }
              }
            return found;
        }
       
        public PersonListe.Person findNavn(String navn) {
            Person found=null; Object o;
            Iterator i = personer.values().iterator();
            while (i.hasNext()) {
                o = i.next();
                if (o instanceof PersonListe.Person) {
                    if (((Person)o).getNavn().equals(navn)) found = (Person)o;
                }
              }
            return found;
        }
       
        public class Person {
            private String cpr;
            private String navn;

            public Person(String pCpr, String pNavn) {
                cpr= pCpr;
                navn=pNavn;
            }

            public String getCpr(){return cpr; }
            public String getNavn(){return navn; }
           
            public boolean equals(Object o) {
                if (!(o instanceof PersonListe.Person)) return false;
                return (((PersonListe.Person)o).getCpr().equals(cpr)&&
                        ((PersonListe.Person)o).getNavn().equals(navn));
            }


            public String toString() {
                return cpr+ ", "+navn;
            }
        }
       
        /*
        * En lille main klasse til at teste det hele virker
        */
        public static void main(String args[]) {
            PersonListe myList = new PersonListe();
            myList.add("2102811221","Christina Nielsen");
            myList.add("2102811222","Benjamin Jakobsen");
            myList.add("3112701656","Camilla Larsen");
            System.out.println("Kan vi finde en person med cpr 2102811221?");
            PersonListe.Person p = myList.findCpr("2102811221");
            if (p==null) System.out.println("Nej det kunne vi ikke.");
            else System.out.println("Jo minsandten. Det er goe gamle "+p.getNavn());
            System.out.println("Er Benjamin Jakobsen mon i kartoteket?");
            p = myList.findNavn("Benjamin Jakobsen");
            if (p==null) System.out.println("Nej det er han ikke.");
            else System.out.println("Vi har ham under\n"+p.toString()+"\nog vi ved hvor han bor!!");
        }
}
Avatar billede =maddog= Nybegynder
05. februar 2003 - 01:12 #12
.... en lille main klasse .... god morgen og tak for kaffe. Et lille latterbrøl til folket på min regning.
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