Avatar billede Bennysørensen Praktikant
28. september 2003 - 22:36 Der er 7 kommentarer og
1 løsning

Vector-problem

Jeg har en vektor af personer, som jeg ikke kan regne ud hvordan returneres til en anden klasse

Jeg skal lave min Role-klasse om, så den refererer til dén person, den tilhører, men kan ikke finde andre metoder end get(int index) i JDK'en. Den bør vel kunne kombineres med elemantAt(int index), men lige hvordan...

Jeg ved ikke hvordan jeg returnerer lige præcis den rigtige person: Jeg kan ikke se hvad der styrer hvad mellem Person og Role.

Hele koden kommer her:

import java.util.Vector;

public class ReuseWithComposition{
    public static void main( String[] args ){
        Person p1 = new Person( "Freddy Fræk" );
        Role r1 = new Instructor( 12000 );
        p1.addRole( r1 );
        System.out.println( p1 );

        Person p2 = new Person( "Hans Ottosen" );
        Role r2 = new Student( Student.SWU );
        p2.addRole( r2 );
        System.out.println( p2 );
       
        Person p3 = new Person(  "Rasmus Lund" );
        Role r3 = new Student( Student.SWU );
        Role r4 = new Instructor( 200000 );
        p3.addRole( r3 );
        p3.addRole( r4 );
        System.out.println( p3 );
    }
}

class Person{
    private String fullName;
    private String eMail;
    private Vector roller = new Vector();
   
    public Person( String fullName ){ setFullName( fullName ); }

    public void setFullName( String fullName ){
        if( fullName == null || fullName.equals( "" ) ){
            throw new IllegalArgumentException( fullName + "is an Illegal name" );
        }
        else{
            this.fullName = fullName;
        }
    }

    public void setEMail( String eMail ){
        if( eMail == null || eMail.equals( "" ) ){
            throw new IllegalArgumentException( eMail + "is an Illegal e-mail" );
        }
        else{
            this.eMail = eMail;
        }
    }
   
    public String getFullName(){ return fullName; }
   
    public String getEMail(){ return eMail; }
   
    public void addRole( Role rolle ){
        if( rolle == null ){
            throw new IllegalArgumentException( rolle + " is not a legal role" );   
        }
        roller.add( rolle );
    }
   
    public Role getRole( int rolleNummer ){
        if( ! (roller.size() > rolleNummer) ){
            throw new IllegalArgumentException( "Der er ingen roller med nummer " + rolleNummer );
        }
        else {
            return (Role) roller.get( rolleNummer );
        }
    }
   
    public int getNumberOfRoler(){
        return roller.size();
    }

    public String toString(){
        String s = "Person[fullName=" + fullName;
        s += ", eMail=" + eMail;
        s += ", roller=" + roller + "]";   
        return s;
    }

}
class Role{

    Person rolle_person;
   
    public Role(Person p)
    {
        rolle_person = p;
    }
    public Person getPerson(int index)
    {
        ...æh....
    }

}
Avatar billede arne_v Ekspert
28. september 2003 - 22:49 #1
Et det ikke bare:

    public void addRole( Role rolle ){
        ...
        rolle.setPerson(this);
        roller.add( rolle );
    }

og:
 
    public setPerson(Person p)
    {
        rolle_person = p;
    }

    public Person getPerson()
    {
        return rolle_person;
    }

?

(fordi i din model så er kan en person have flere roller men en rolle
kan kun være tilnyttet en person)
Avatar billede ihtezaz Praktikant
28. september 2003 - 22:59 #2
Hej, jeg har et par ting til koden(stiller dem i punktform).
-Du burde initialiser din vector i kontruktøren i person klassen.
-Du skal bruge"return (Role)roller.elementAt( rolleNummer );" I person 
klassen. For der er ikke en get metode på vector klassen.
-I Role klassen er jeg ikke helt med på hvad du ønsker, at finde en person ud fra en rolle ?
Avatar billede arne_v Ekspert
28. september 2003 - 23:02 #3
Vector har haft get siden J2SE 1.2 !
Avatar billede ihtezaz Praktikant
28. september 2003 - 23:32 #4
Sorry Arne du har ret, har været ind og se.
Avatar billede Bennysørensen Praktikant
29. september 2003 - 03:55 #5
Nej, det skal pinedød være constructoren i Role, der tager referencen til Personen...det havde jeg lige glemt at fortællle.
Avatar billede arne_v Ekspert
29. september 2003 - 07:05 #6
Så laver du jo sådan en.

    public Role(Person p)
    {
        rolle_person = p;
    }

        Person p1 = new Person( "Freddy Fræk" );
        Role r1 = new Instructor( 12000 );
        p1.addRole( p1 );

evt. med flere argumenter på constructoren.

Jeh kan bare bedre lide den anden model, fordi den sikrer konsistens.
Avatar billede arne_v Ekspert
29. september 2003 - 07:38 #7
Det kunne du selvfølgelig også sikre med:

    public Role(Person p)
    {
        rolle_person = p;
        p.addRole( this );
    }

        Person p1 = new Person( "Freddy Fræk" );
        Role r1 = new Instructor( 12000 );
Avatar billede arne_v Ekspert
29. september 2003 - 07:40 #8
Hov - de 2 kommentarer er da fulde af tyrk fejl..
det er:

    public Role(Person p)
    {
        rolle_person = p;
    }

        Person p1 = new Person( "Freddy Fræk" );
        Role r1 = new Instructor( p1 );
        p1.addRole( r1 );

og:

    public Role(Person p)
    {
        rolle_person = p;
        p.addRole( this );
    }

        Person p1 = new Person( "Freddy Fræk" );
        Role r1 = new Instructor( p1 );
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