Det er muligt at jeg kommer med et spm. mere senere - da jeg gerne skulle have det til at arbejde sammen med noget GUI - altså så man kan søge på hvem der er medlemmer ud fra et navn eller cpr.nr....
Hvis du synes det er forvirrende at bruge forskellige variabelnavne kan du f.eks. gøre sådan: class Mennesker { private String navn, adr; private int cpr;
public Mennesker (String navn, int cpr, String adr) { this.navn = navn; this.cpr = cpr; this.adr = adr; } }
Hvis nu en af personerne ændre navn kunne det måske være rart at kunne gøre, så derfor kan det være en god ide at lave get/set metoder til dine datamembers.
F.eks. class Mennesker { ..
public String getNavn() { return this.navn; }
public void setNavn(String navn) { this.navn = navn; } }
class Person { private Mennesker[] register; private int antal;
public Person() { register = new Mennesker[5]; antal = 0; }
public void tilfoj(String navn, int cpr, String adr) { register[antal] = new Mennesker(navn, cpr, adr); antal++; }
public String toString() { StringBuffer sb = new StringBuffer(""); for (int i = 0; i < register.length; i++) { if (i > 0) sb.append(","); sb.append(register[i]); } return sb.toString(); } }
class Mennesker { private String navn, adr; private int cpr;
public Mennesker(String name, int number, String adresse) { navn = name; cpr = number; adr = adresse; }
ok - nu skriver den det bare ud lidt dumt - hvad nu hvis jeg gerne ville have den til at skrive ud på hver linie, altså: navn, cpr, adr navn, cpr, adr osv...
kan det undgås at den skriver person[0] osv. med ud??
så kan du tilføje et linie skift hvor du synes det er nødvendigt public String toString() { StringBuffer sb = new StringBuffer(); for(int i=0;i<antal;i++) { String temp = "person[" + i + "]"; sb.append(temp); sb.append(register[i]); sb.append("\n"); } return sb.toString(); } }
OBS. det er ikke helt korrekt at gøre det på den måde - men jeg synes i dit tilfælde er det det nemmeste.
class Person { private Mennesker[] register; private int antal;
public Person() { register = new Mennesker[5]; antal = 0; }
public void tilfoj(String navn, int cpr, String adr) { register[antal] = new Mennesker(navn, cpr, adr); antal++; }
public String toString() { StringBuffer sb = new StringBuffer(""); for (int i = 0; i < antal; i++) { if (i > 0) sb.append(","); sb.append(register[i]); } return sb.toString(); }
public void print(PrintStream ps) { for (int i = 0; i < antal; i++) { ps.println(register[i]); } } }
class Mennesker { private String navn, adr; private int cpr;
public Mennesker(String name, int number, String adresse) { navn = name; cpr = number; adr = adresse; }
Fortsætter lige med arbejde lidt på det - vender tilbage senere - mht. til at få personregister til at arbejde sammen med GUI!
Er det svært at lave det sådan så en given bruger taster et cpr.nr. ind og klikker på en knap der hedder søg (og programmet så søger i arrayet) og der så herefter kommer en person frem med cprnr. navn og adresse i hver sin label? altså sådan her lidt "krreativt" illustreret grafisk:
Ovenstående udskriver dem eksplicit med en person per linie.
Grunden til at jeg ikke kan lide linie-skift i toString er at det kan totalt fucke output up, når man i andre sammenhænge bruger toString og forventer at det komemr ud i en linie.
public String toString() { StringBuffer sb = new StringBuffer(""); for (int i = 0; i < antal; i++) { if (i > 0) sb.append(","); sb.append(register[i]); } return sb.toString(); }
gør det samme som:
}
public String toString() { String res = ""; for (int i = 0; i < antal; i++) { if (i > 0) res = res + ","; res = res + register[i]; } return res; }
Men StringBuffer og append er bare mere effektivt (kører hurtigere).
Jeg har nu forsøgt og forsøgt, men kan ikke finde en løsning på mit problem. Ideen med programmet er, at ved at taste et cprnr ind, kun de første 6 ciffre foreløbig, så skulle den gerne finde cpr.nr, navn og adresse udfra arrayet og samtidig dele dem op så de kommer i hver sin label....
Jeg kan ikke finde ud af det - har forsøgt med en if-sætning men ved ikke om det er vejen frem...
Det har også gjort at jeg er kommet lidt i tvivl om mit program - hvad kalder jeg egentlig mit array - altså hvad hedder det...Jeg er helt tom i hovedet lige nu...
Programmet ser pt sådan her ud: import java.awt.*; import java.awt.event.*; import java.applet.*; import javax.swing.*;
public class GuiMouse extends JFrame { JTextField tal1; JTextField cpr_nr; JTextField navn; JTextField adresse; JButton knap; JLabel overskrift;
public GuiMouse() { tal1 = new JTextField(10); cpr_nr = new JTextField(10); navn = new JTextField(10); adresse = new JTextField(10); knap = new JButton("Find person"); overskrift = new JLabel("Medlemmer");
class Person { private Mennesker[] register; private int antal;
public Person() { register = new Mennesker[5]; antal = 0; }
public void tilfoj(String navn, int cpr, String adr) { register[antal] = new Mennesker(navn, cpr, adr); antal++;
}
public Menneske find(String navn) { for (int i = 0; i < antal; i++) { if(register[i].getNavn().equals(navn)) return register[i]; } return null; } public String toString() { String res = ""; for (int i = 0; i < antal; i++) { if (i > 0) res = res + ","; res = res + register[i]; } return res; }
}
class Mennesker { String navn, adr; int cpr;
public Mennesker(String name, int number, String adresse) { navn = name; cpr = number; adr = adresse;
import java.awt.*; import java.awt.event.*; import javax.swing.*; public class Gui extends xxxxx implements xxxx
{ private Button sog, slut;
private TextField cpr, navn, adresse;
private int cprint ; private int korrekt_resultat;
public Gui() //konstruktør, sætter vinduet op { setSize(200,200); //set vinduets størrelse setLocation(150,150); //og placering (målt i pixels) setTitle(getClass().getName()); //skriv klassens navn i titelbjælken
Container cP= getContentPane(); //referer til 'contentPane'-laget med cP
cP.add(new Label("sogefelt:")); //skriver ledeteksten 'sogefelt:' tal1= new TextField(20); //definerer og tilføjer tekstfeltet sogefelt cP.add(sogefelt);
sog= new Button("sog"); //definerer og tilføjer søge-knappen cP.add(sog); sog.addActionListener(this);
cP.add(new Label("CPR:")); //do. for CPR cpr= new TextField(20); //.. cP.add(cpr);
cP.add(new Label("Navn:")); //do. for Navn navn= new TextField(20); //.. cP.add(navn);
cP.add(new Label("Adresse:")); //do. for Adresse adresse= new TextField(20); //.. cP.add(resultat);
slut= new Button("slut"); //definerer og tilføjer slut-knappen cP.add(slut); slut.addActionListener(this); //registrerer slut-knappen, så tryk på den //kan opfanges }
Hey Arne jeg forstår ikke helt din kode her... public int find(String navn) { for (int i = 0; i < antal; i++) { if(register[i].getNavn().equals(navn)) return i; } return -1; }
Hvad sker der egentlig og hvor skal jeg sætte den ind?? Vil ovenstående kode også dele det op så den ud fra det nummer skrevet i den første label så finde den valgte person og skrive cpr.nr, navn og adr. ud i hver sit label??
Hvad kom du frem til Nocol? bare så andre kan se hvad der er sket her :-)
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.