04. februar 2003 - 11:04Der 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 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 :");
nogen gange bruger du 'Personliste' (stort P) og nogen gange 'personliste' (lille p)
Er der overhovedet brug for 2 forskellige arrays der?
mvh JakobA
Synes godt om
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; } }
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.....
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.......
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.
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";
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.
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 :");
/* 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 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!!"); } }
.... en lille main klasse .... god morgen og tak for kaffe. Et lille latterbrøl til folket på min regning.
Synes godt om
Ny brugerNybegynder
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.