Avatar billede doktoren Nybegynder
07. juni 2003 - 13:41 Der er 77 kommentarer og
1 løsning

hjælp til programmering i blue-j

Hej!
Er kørt lidt fast i et blue-j projekt...
Mine koder i en af klasserne ser sådan ud:


/**
* Write a description of class STANDARD here.
*
* @author Anders
* @version
*/
public class STANDARD /* extends BREV */ {
    // instance variables - replace the example below with your own
    private double længde;
    private double bredde;
    private double tykkelse;
    private double vægt;
    private String destination;

    /**
    * Constructor for objects of class STANDARD
    */
    public STANDARD(double v, double l, double b, double t, String d) {
        vægt = v;
        destination = d;
        længde = l;
        bredde = b;
        tykkelse = t;
    }

    /**
    * An example of a method - replace this comment with your own
    *
    * @param  y  a sample parameter for a method
    * @return    the sum of x and y
    */
  public double getLængde() {
      return længde;
  }
  public void setLængde(double l) {
        længde = l;
    }
    public double getBredde() {
        return bredde;
    }
    public void setBredde(double b) {
        bredde = b;
    }
    public double getTykkelse() {
        return tykkelse;
    }
    public void setTykkelse(double t) {
        tykkelse = t;
    }
    public double getVægt() {
        return vægt;
    }
    public void setVægt(double v) {
        vægt = v;
    }
    public String getDestination() {
        return destination;
    }
    public void setDestination(String d) {
        destination = d;
    }
    public String toString() {
        double porto = 0; // <-----
        if (vægt <= 50)
            if (destination.equals("Danmark")) {
                porto = 4.25;
            }

        if (vægt <= 50)
            if (destination.equals("Europa")) {
                porto = 5.50;
            }

        if (vægt <= 50)
            if (destination.equals("Øvrigeudland")) {
                porto = 6.50;
            }
       
        return " Vægt: " + vægt + " Porto: " + porto;

    }
}

Men programmet skal kun tage højde for denne klasse, hvis længden <= 23, bredden <= 17 og tykkelsen <= 0.5.

skal jeg skrive dette som if-sætninger inde i denne klasse -eller skal jeg skrive i en basis-klasse, at den skal gå til denne klasse, hvis den opfylder disse krav?
Avatar billede repsak Nybegynder
07. juni 2003 - 13:47 #1
hvis klassen ikke skal tages ibrug hvis din betingelse ikke er opfyldt så bør du placere if-en udenfor klassen. Eller vil du oprette et unødvendigt objekt :-)
Avatar billede arne_v Ekspert
07. juni 2003 - 13:55 #2
Det kan laves på flere måder.

En af dem er:

lav en basis-klasse BREV

public class BREVFactory {
    public static BREV getBREV(double v, double l, double b, double t, String d) {
        if(...) {
            return new STANDARD(v,l,b,t,d);
        } else if(...) {
            return new XXXX(v,l,b,t,d);
        } else {
            return new YYYY(v,l,b,t,d);
        }
  }
}

Og så erstat:

STANDARD brev = new STANDARD(...);

med:

BREV brev = BREVFactory.getBREV(...);
Avatar billede doktoren Nybegynder
07. juni 2003 - 13:55 #3
ok -så jeg skal altså placere den i en anden klasse? Men hvordan får jeg så programmet til at gå til denne klasse hvis betingelserne er opfyldt?
Avatar billede arne_v Ekspert
07. juni 2003 - 13:55 #4
Men den er måske lidt svær at gennemskue.

Og for at den virker godt skal al fælles funktionalitet også
flyttes til BREV.
Avatar billede doktoren Nybegynder
07. juni 2003 - 13:57 #5
ja..den er lidt svær at gennemskue...men jeg kan lige prøve at se, om jeg kan finde ud af at flytte alt det fælles til klassen brev
Avatar billede arne_v Ekspert
07. juni 2003 - 13:59 #6
Hvis du vil have en simplere løsning tilføjer du bare en metode
til din eksisternde STANDARD klasse:

public static boolean isCorectType(double v, double l, double b) {
  if(...) {
      return true;
  } else {
      return false;
  }
}

og bruger:

if(STANDARD.isCorrectType(v,l,b)) {
  STANDARD brev = new STANDARD(v,l,b,t,d);
  ...
} else if(XXXX.isCorrectType(v,l,b)) {
  XXXX brev = new XXXX(v,l,b,t,d);
  ...
} else  {
  YYYY brev = new YYYY(v,l,b,t,d);
  ...
}
Avatar billede arne_v Ekspert
07. juni 2003 - 14:01 #7
Mit første forslag om en factory løsning er nok den bedste.
Men du slipper sikkert ikke for nogle abstrakte metoder i
basis klassen.
Avatar billede doktoren Nybegynder
07. juni 2003 - 14:05 #8
nej -det har du ret i...vil bare gerne være færdig meget snart, men jeg slipper nok ikke udenom at lave en ekstra klasse...er bare lidt bange for at det hele så pludselig ikke virker..
Avatar billede doktoren Nybegynder
07. juni 2003 - 14:12 #9
er det sådan jeg skal gøre det?

  public static boolean isCorectType(double v, double l, double b) {
  if(længde <= 23) {
      return true;
  } else {
      return false;
  }
}

public static boolean isCorectType(double v, double l, double b) {
  if(bredde <= 17) {
      return true;
  } else {
      return false;
  }
}
public static boolean isCorectType(double v, double l, double b) {
  if(tykkelse <= 0.5) {
      return true;
  } else {
      return false;
  }
}


if(STANDARD.isCorrectType(v,l,b)) {
  STANDARD brev = new STANDARD(v,l,b,t,d);
  ...
} else if(STOR.isCorrectType(v,l,b)) {
  STOR brev = new STOR(v,l,b,t,d);
  ...
} else  {
  MAXI brev = new MAXI(v,l,b,t,d);
  ...
}
Avatar billede arne_v Ekspert
07. juni 2003 - 14:26 #10
De 3 metoder skal være i hver sin klasse.

Og jeg er ikke sikker på at reglerne er rigtige:

Eksempel:

public class STANDARD {
  ...
  public static boolean isCorectType(double længde, double bredde, double tykkelse) {
      if((længde <= 23) && (bredde <= 17) && (tykkelse < 0.5)) {
        return true;
      } else {
        return false;
      }
  }
  ...
}
Avatar billede arne_v Ekspert
07. juni 2003 - 14:27 #11
public class STANDARD {
  ...
  public static boolean isCorectType(double længde, double bredde, double tykkelse) {
      if((længde <= 23) && (bredde <= 17) && (tykkelse <= 0.5)) {
        return true;
      } else {
        return false;
      }
  }
  ...
}
Avatar billede doktoren Nybegynder
07. juni 2003 - 14:51 #12
tak skal du have!
Avatar billede arne_v Ekspert
07. juni 2003 - 14:54 #13
STOR og MAXI klasserne skal så også have deres metoder
med de rigtige regler.
Avatar billede doktoren Nybegynder
07. juni 2003 - 14:58 #14
jeps:)
Avatar billede doktoren Nybegynder
07. juni 2003 - 14:58 #15
men nu virker de ikke efter jeg har gjort det...ved ikke om du kan se fejlen...jeg synes ikke jeg kan se den..kan lige oprette et nyt spørgsmål
Avatar billede arne_v Ekspert
07. juni 2003 - 15:01 #16
Nej - ikke nødvendigt - bare stil det her.
Avatar billede arne_v Ekspert
07. juni 2003 - 15:02 #17
Men vi skal nok lige se koden som den ser ud nu.
Avatar billede doktoren Nybegynder
07. juni 2003 - 18:18 #18
havde slet ikke set at du havde skrevet herinde...så jeg oprettede alligevel et nyt spørgsmål, men pyt med det
Avatar billede arne_v Ekspert
07. juni 2003 - 18:47 #19
Du fik jo hjælp af repsak, så helt fint.
Avatar billede doktoren Nybegynder
07. juni 2003 - 19:06 #20
men må jeg spørge dig om noget mere, Arne? (Du er jo efterhånden rimelig meget inde i min opgave) -skal nok lige oprette et nyt spørgsmål
Avatar billede arne_v Ekspert
07. juni 2003 - 19:12 #21
Du må gerne spørge - og du behøver ikke at oprette et nyt spørgsmål
(jeg har fået point flere gange).
Avatar billede doktoren Nybegynder
07. juni 2003 - 19:13 #22
du har jo også hjulpet mig meget, så jeg vil gerne give dig points...men jeg skal lige finde ud af, hvad det helt konkret er jeg skal spørge om -skriver lige om 2 minutter
Avatar billede doktoren Nybegynder
07. juni 2003 - 19:19 #23
når jeg compiler mine 4 klasser, får jeg fejlmeldingen:

"invalid method declaration;return type required"

Kan endnu engang ikke finde ud af, hvad der går galt...men ved ikke om det er nemmest at jeg paster dem ind her -eller er det nemmere at jeg sender dem til dig?
Avatar billede arne_v Ekspert
07. juni 2003 - 19:23 #24
Det lyder som en:

public xxxx() {

som kun er lovlig hvis xxxx er constructor ellers skal det være:

public void xxxx() {
public int xxxx() {
etc.etc.
Avatar billede arne_v Ekspert
07. juni 2003 - 19:24 #25
Har du lige tilføjet metoder eller omdøbt klasser ?
Avatar billede doktoren Nybegynder
07. juni 2003 - 19:26 #26
jeg har rykket nogle af metoderne op i basisklassen "brev"
Avatar billede doktoren Nybegynder
07. juni 2003 - 19:26 #27
/**
* Write a description of class BREV here.
*
* @author anders
* @version 10.06.03
*/
public class BREV  {
    // instance variables - replace the example below with your own
    private double længde;
    private double bredde;
    private double tykkelse;
    private double vægt;
    private String destination;

    /**
    * Constructor for objects of class BREV
    */
    public STANDARD(double v, double l, double b, double t, String d) {
        vægt = v;
        destination = d;
        længde = l;
        bredde = b;
        tykkelse = t;
    }
   
   

    /**
    * An example of a method - replace this comment with your own
    *
    * @param  y  a sample parameter for a method
    * @return    the sum of x and y
    */
  public double getLængde() {
      return længde;
  }
  public void setLængde(double l) {
        længde = l;
    }
    public double getBredde() {
        return bredde;
    }
    public void setBredde(double b) {
        bredde = b;
    }
    public double getTykkelse() {
        return tykkelse;
    }
    public void setTykkelse(double t) {
        tykkelse = t;
    }
    public double getVægt() {
        return vægt;
    }
    public void setVægt(double v) {
        vægt = v;
    }
    public String getDestination() {
        return destination;
    }
    public void setDestination(String d) {
        destination = d;
    }
    public String toString() {
        double længde = 0; // <-----
        if (længde <= 23)
            {
                brev = standard;
            }

  if(STANDARD.isCorrectType(v,l,b)) {
  STANDARD brev = new STANDARD(v,l,b,t,d);

} else if(STOR.isCorrectType(v,l,b)) {
  STOR brev = new STOR(v,l,b,t,d);
 
} else  {
  MAXI brev = new MAXI(v,l,b,t,d);

}
       
        return " Vægt: " + vægt + " Porto: " + porto;

    }
}
Avatar billede arne_v Ekspert
07. juni 2003 - 19:29 #28
public class BREV  {

  public STANDARD(double v, double l, double b, double t, String d) {

constructoren skal hedde BREV !
Avatar billede arne_v Ekspert
07. juni 2003 - 19:30 #29
Vær opmærksom på at constructore ikke arves d.v.s. at du i STANDARD
skal have en:

public STANDARD(double v, double l, double b, double t, String d) {
  super(v,l,b,t,d);
}
Avatar billede doktoren Nybegynder
07. juni 2003 - 19:32 #30
ok -det vidste jeg ikke..
Avatar billede doktoren Nybegynder
07. juni 2003 - 19:33 #31
men hvad betyder "super"
Avatar billede arne_v Ekspert
07. juni 2003 - 19:36 #32
Hvis klasse B arver fra klasse A og så kan B referere til A som
"super" ligesom den kan referere til sig selv som "this".

Det ovenfor betyder bare at STANDARD's constructor kalde BREV's
consuctor med de samme argumenter.
Avatar billede doktoren Nybegynder
07. juni 2003 - 19:36 #33
og vil det sige at basisklassen ikke skal have nogen constructor overhovedet?
Avatar billede arne_v Ekspert
07. juni 2003 - 20:12 #34
Jo.

Basis klassen skal have en constructor som gør noget.

De afledte klasser skal have en constructor som kalder
basis klassens constructor (og eventuelt gør noget mere - men
det behøver du ikke).
Avatar billede doktoren Nybegynder
07. juni 2003 - 20:15 #35
hmmm...tror sgu snart jeg bliver nødt t at give op...tror det bliver lidt for indviklet til mit niveau:(
Avatar billede arne_v Ekspert
07. juni 2003 - 20:18 #36
Det er ikke så svært:

public class BREV  {
    // instance variables - replace the example below with your own
    private double længde;
    private double bredde;
    private double tykkelse;
    private double vægt;
    private String destination;

    /**
    * Constructor for objects of class BREV
    */
    public BREV(double v, double l, double b, double t, String d) {
        vægt = v;
        destination = d;
        længde = l;
        bredde = b;
        tykkelse = t;
    }

...

public class STANDARD extends BREV {
  public STANDARD(double v, double l, double b, double t, String d) {
      super(v,l,b,t,d);
  }
...
Avatar billede doktoren Nybegynder
07. juni 2003 - 20:30 #37
men så skriver den stadig "cannot resolve symbol variable v"
Avatar billede doktoren Nybegynder
07. juni 2003 - 20:31 #38
altså i følgende stykke:

if(STANDARD.isCorrectType(v,l,b)) {
  STANDARD brev = new STANDARD(v,l,b,t,d);

} else if(STOR.isCorrectType(v,l,b)) {
  STOR brev = new STOR(v,l,b,t,d);
 
} else  {
  MAXI brev = new MAXI(v,l,b,t,d);

}
Avatar billede arne_v Ekspert
07. juni 2003 - 20:33 #39
Det stykke skal ikke være i hverken BREV eler STANDARD.

Det skal være i det kode som skal bruge et brev. Dit hoved-program
eller lignende.
Avatar billede doktoren Nybegynder
07. juni 2003 - 20:33 #40
aaahhh...så det skal jeg bruge i den class jeg har kaldt for "main"?
Avatar billede arne_v Ekspert
07. juni 2003 - 21:17 #41
Ja.

Logikken er den at du undersøger hvilken type brev det er og så
creater du et brev af den type.
Avatar billede doktoren Nybegynder
08. juni 2003 - 12:25 #42
har lige et spørgsmål mere, og da det stadig omhandler denne opgave, stiller jeg lige spørgsmålet herinde...skal nok oprette et nyt spørgsmål med points.
Avatar billede doktoren Nybegynder
08. juni 2003 - 12:27 #43
når jeg compiler får jeg i alle mine classes fejlmeldingen:
"return outside method" ved følgende sætning:

{
        return " Vægt: " + vægt + " Porto: " + porto;

    }
Avatar billede doktoren Nybegynder
08. juni 2003 - 12:29 #44
det er jo nok længere oppe det går galt, men jeg kan ikke finde ud af, hvor...

/**
* Write a description of class BREV here.
*
* @author anders
* @version 10.06.03
*/

    public class BREV  {
    // instance variables - replace the example below with your own
    private double længde;
    private double bredde;
    private double tykkelse;
    private double vægt;
    private String destination;

    /**
    * Constructor for objects of class BREV
    */
    public BREV(double v, double l, double b, double t, String d) {
        vægt = v;
        destination = d;
        længde = l;
        bredde = b;
        tykkelse = t;
    }

    /**
    * An example of a method - replace this comment with your own
    *
    * @param  y  a sample parameter for a method
    * @return    the sum of x and y
    */
  public double getLængde() {
      return længde;
  }
  public void setLængde(double l) {
        længde = l;
    }
    public double getBredde() {
        return bredde;
    }
    public void setBredde(double b) {
        bredde = b;
    }
    public double getTykkelse() {
        return tykkelse;
    }
    public void setTykkelse(double t) {
        tykkelse = t;
    }
    public double getVægt() {
        return vægt;
    }
    public void setVægt(double v) {
        vægt = v;
    }
    public String getDestination() {
        return destination;
    }
    public void setDestination(String d) {
        destination = d;
    }

{
        return " Vægt: " + vægt + " Porto: " + porto;

    }

}
Avatar billede arne_v Ekspert
08. juni 2003 - 13:01 #45
Der er faldet en:

publi String toString()

ud af din kode !
Avatar billede arne_v Ekspert
08. juni 2003 - 13:01 #46
public String toString(){
        return " Vægt: " + vægt + " Porto: " + porto;
    }
Avatar billede doktoren Nybegynder
08. juni 2003 - 13:09 #47
men når jeg så skriver det, får jeg fejlmeldingen "illegal start of expression"...
Avatar billede arne_v Ekspert
08. juni 2003 - 14:34 #48
package test;

/**
* Write a description of class BREV here.
*
* @author anders
* @version 10.06.03
*/

public class BREV {
    // instance variables - replace the example below with your own
    private double længde;
    private double bredde;
    private double tykkelse;
    private double vægt;
    private String destination;

    /**
    * Constructor for objects of class BREV
    */
    public BREV(double v, double l, double b, double t, String d) {
        vægt = v;
        destination = d;
        længde = l;
        bredde = b;
        tykkelse = t;
    }

    /**
    * An example of a method - replace this comment with your own
    *
    * @param  y  a sample parameter for a method
    * @return    the sum of x and y
    */
    public double getLængde() {
        return længde;
    }
    public void setLængde(double l) {
        længde = l;
    }
    public double getBredde() {
        return bredde;
    }
    public void setBredde(double b) {
        bredde = b;
    }
    public double getTykkelse() {
        return tykkelse;
    }
    public void setTykkelse(double t) {
        tykkelse = t;
    }
    public double getVægt() {
        return vægt;
    }
    public void setVægt(double v) {
        vægt = v;
    }
    public String getDestination() {
        return destination;
    }
    public void setDestination(String d) {
        destination = d;
    }

    public String toString() {
        return " Vægt: " + vægt + " Porto: " + porto;
    }

}
Avatar billede arne_v Ekspert
08. juni 2003 - 14:36 #49
Giver fejl på porto !

Jeg forslår at du laver følgende:

/**
* Write a description of class BREV here.
*
* @author anders
* @version 10.06.03
*/

abstract public class BREV {
    // instance variables - replace the example below with your own
    private double længde;
    private double bredde;
    private double tykkelse;
    private double vægt;
    private String destination;

    /**
    * Constructor for objects of class BREV
    */
    public BREV(double v, double l, double b, double t, String d) {
        vægt = v;
        destination = d;
        længde = l;
        bredde = b;
        tykkelse = t;
    }

    /**
    * An example of a method - replace this comment with your own
    *
    * @param  y  a sample parameter for a method
    * @return    the sum of x and y
    */
    public double getLængde() {
        return længde;
    }
    public void setLængde(double l) {
        længde = l;
    }
    public double getBredde() {
        return bredde;
    }
    public void setBredde(double b) {
        bredde = b;
    }
    public double getTykkelse() {
        return tykkelse;
    }
    public void setTykkelse(double t) {
        tykkelse = t;
    }
    public double getVægt() {
        return vægt;
    }
    public void setVægt(double v) {
        vægt = v;
    }
    public String getDestination() {
        return destination;
    }
    public void setDestination(String d) {
        destination = d;
    }

    public String toString() {
        return " Vægt: " + vægt + " Porto: " + getPorto();
    }

    abstract double getPorto();
}
Avatar billede arne_v Ekspert
08. juni 2003 - 14:37 #50
Så skal STANDARD og STOR og MAXI alle have en metode:

double getPorto() {
}

der udregner porto !
Avatar billede arne_v Ekspert
08. juni 2003 - 14:37 #51
To små hovsaer:

1)  ignorer den "package test" jeg satte ind i den første version.

2)  du må godt lave getPorto til public.
Avatar billede doktoren Nybegynder
08. juni 2003 - 14:40 #52
ok-det prøver jeg lige at lege med...:)
og i de andre tre klasser skal jeg så bare fjerne alt det som også står her?
Avatar billede doktoren Nybegynder
08. juni 2003 - 15:12 #53
men hvorfor får jeg hele tiden fejlmeldingen: "cannot resolve symbol"?
Avatar billede arne_v Ekspert
08. juni 2003 - 16:01 #54
Svært at sige: hvilken linie ? og hvilket symbol ?
Avatar billede arne_v Ekspert
08. juni 2003 - 16:21 #55
Og ingen panik.

Hvis ikke du har fået styr på det i aften, så skal jeg lave 4 klasser
til dig der virker.
Avatar billede doktoren Nybegynder
08. juni 2003 - 17:36 #56
hold da op...du er godt nok flink...vil gerne sende lidt rødvin eller et eller andet til dig.
Men den skriver faktisk "cannot resolve symbol" flere forskellige steder, bl.a. i flg.:


public BREV(double v, double l, double b, double t, double p, String d) {
        vægt = v;
        destination = d;
        længde = l;
        bredde = b;
        tykkelse = t;
        porto = p;      <--------------------------------
    }


og i flg.:

public String toString() {            <--------------------------------
        return " Vægt: " + vægt + " Porto: " + getPorto();
    }

    abstract double getPorto();
}
Avatar billede arne_v Ekspert
08. juni 2003 - 17:39 #57
Den første tror jeg bare skal helt slettes.

Du gemmer ikke porto. Den beregner du.

Den sidste lyder som om getPorto ikke er blevet erklæret som en
abstrakt metode.
Avatar billede doktoren Nybegynder
08. juni 2003 - 17:44 #58
Når nu jeg har slettet det første, skriver den stadig dette "cannot resolve symbol -constructor BREV" i flg. stykke -og jeg kan virkelig ikke se mig ud af, hvad der skulle være galt..


    public MAXI(double v, double l, double b, double t, String d) {
        vægt = v;
        destination = d;
        længde = l;
        bredde = b;
        tykkelse = t;
     
    }
Avatar billede arne_v Ekspert
08. juni 2003 - 17:46 #59
Du kalder jo ikke super (BREV constructor).
Avatar billede arne_v Ekspert
08. juni 2003 - 17:47 #60
En af dine holdkammerater (3131) har iøvrigt lige stillet "samme spørgsmål".

:-)
Avatar billede doktoren Nybegynder
08. juni 2003 - 17:53 #61
ja -det kan jeg se...er da heldigvis ikke den eneste, der ikke har styr på det:)
Avatar billede doktoren Nybegynder
08. juni 2003 - 17:56 #62
men det, at jeg ikke kalder super, har det noget med det at gøre?
Avatar billede doktoren Nybegynder
08. juni 2003 - 17:57 #63
så det er altså denne her jeg skal have ind?:

public STANDARD(double v, double l, double b, double t, String d) {
  super(v,l,b,t,d);
}
Avatar billede arne_v Ekspert
08. juni 2003 - 17:58 #64
Ja.
Avatar billede arne_v Ekspert
08. juni 2003 - 17:58 #65
Iøvrigt håber jeg at have et illustrativt eksempel klar om 10-20 minutter.
Avatar billede doktoren Nybegynder
08. juni 2003 - 18:00 #66
:) JUBII
Avatar billede doktoren Nybegynder
08. juni 2003 - 18:02 #67
har du messenger?
Avatar billede arne_v Ekspert
08. juni 2003 - 18:04 #68
Nix.

Jeg er alt for gammel til den slags og bruger kun email.

:-)
Avatar billede arne_v Ekspert
08. juni 2003 - 18:10 #69
Følgende eksempel illusterer brug af abstrakt basis-klasse og factory.

Det er næppe en komplet implementering af den logik I skal bruge.

Der er sikkert også andre måder at gøre det på.

Men det compiler og kører !

abstract public class Brev {
    protected int vægt;
    protected String land;
    public Brev(int vægt, String land) {
        this.vægt = vægt;
        this.land = land;
    }
    public String getLand() {
        return land;
    }
    public int getVægt() {
        return vægt;
    }
    public void setLand(String land) {
        this.land = land;
    }
    public void setVægt(int vægt) {
        this.vægt = vægt;
    }
    abstract public double beregnPorto();
    public String toString() {
        return "[Vægt=" + vægt + ",Land=" + land + ", Porto=" + beregnPorto() + "]";
    }
}

public class StandardBrev extends Brev {
    public StandardBrev(int vægt, String land) {
        super(vægt, land);
    }
    public double beregnPorto() {
        return 0; // <--------- skal laves
    }
}

public class StorBrev extends Brev {
    public StorBrev(int vægt, String land) {
        super(vægt, land);
    }
    public double beregnPorto() {
        if(land.equals("Danmark")) {
            if(vægt < 50) {
                return 5.50;
            } else if(vægt < 100) {
                return 6.50;
            } else if(vægt < 250) {
                return 12.00;
            } else if(vægt < 500) {
                return 20.00;
            } else {
                return 28.00;
            }
        } else if(land.equals("Europa")) {
            if(vægt < 50) {
                return 8.50;
            } else if(vægt < 100) {
                return 12.00;
            } else if(vægt < 250) {
                return 19.00;
            } else if(vægt < 500) {
                return 33.00;
            } else {
                return 57.00;
            }
        } else {
            if(vægt < 50) {
                return 11.50;
            } else if(vægt < 100) {
                return 18.00;
            } else if(vægt < 250) {
                return 33.00;
            } else if(vægt < 500) {
                return 56.00;
            } else {
                return 95.00;
            }
        }
    }
}

public class MaxiBrev extends Brev {
    public MaxiBrev(int vægt, String land) {
        super(vægt, land);
    }
    public double beregnPorto() {
        return 0; // <--------- skal laves
    }
}

public class BrevFabrik {
    public static Brev hentBrev(double længde, double højde, double tykkelse, int vægt, String land) {
        if((længde < 23) && (højde < 17) && (tykkelse < 0.5)) {
            return new StandardBrev(vægt, land);
        } else if((længde < 33) && (højde < 237) && (tykkelse < 2)) {
            return new StorBrev(vægt, land);
        } else {
            return new MaxiBrev(vægt, land);
        }
    }
}

public class Test {
    public static void main(String[] args) {
        Brev brev = BrevFabrik.hentBrev(25,10,1,200, "Danmark");
        System.out.println(brev);
    }
}
Avatar billede arne_v Ekspert
08. juni 2003 - 18:10 #70
Når man kører test får man:

[Vægt=200,Land=Danmark, Porto=12.0]

hvilket vistnok er korrekt.
Avatar billede doktoren Nybegynder
08. juni 2003 - 18:16 #71
laver lige hurtigt noget mad -vender tilbage inden så længe
Avatar billede doktoren Nybegynder
08. juni 2003 - 18:59 #72
ked af det...men det virker altså heller ikke hos mig:(
Avatar billede doktoren Nybegynder
08. juni 2003 - 18:59 #73
må jeg evt sende alle 4 klasser til dig, for jeg kan snart ikke overskue det længere:(
Avatar billede doktoren Nybegynder
08. juni 2003 - 19:00 #74
har sikkert bare lavet nogle dumme fejl som jeg ikke kan se
Avatar billede arne_v Ekspert
08. juni 2003 - 19:07 #75
arne_v@mail.danbbs.dk
Avatar billede doktoren Nybegynder
08. juni 2003 - 19:23 #76
tak!
har lige sendt en mail til dig...
Avatar billede doktoren Nybegynder
08. juni 2003 - 21:37 #77
du er godt nok kommet på arbejde m vores opgave nu....:)
Avatar billede doktoren Nybegynder
08. juni 2003 - 22:29 #78
Nu virker det sgu!!!! :) :) :)
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

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