Oprettet lør. d. 07. juni 2003 kl. 13:41:57

doktoren
doktoren (15.380 point. Point ude: 160)

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?

Skrevet lør. d. 07. juni 2003 kl. 13:47:12| #1

repsak
repsak (18.927 point)
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 :-)

Skrevet lør. d. 07. juni 2003 kl. 13:55:07| #2

arne_v
arne_v (1.005.618 point)
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(...);

Skrevet lør. d. 07. juni 2003 kl. 13:55:49| #3

doktoren
doktoren (15.380 point)
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?

Skrevet lør. d. 07. juni 2003 kl. 13:55:59| #4

arne_v
arne_v (1.005.618 point)
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.

Skrevet lør. d. 07. juni 2003 kl. 13:57:43| #5

doktoren
doktoren (15.380 point)
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

Skrevet lør. d. 07. juni 2003 kl. 13:59:37| #6

arne_v
arne_v (1.005.618 point)
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);
  ...
}

Skrevet lør. d. 07. juni 2003 kl. 14:01:39| #7

arne_v
arne_v (1.005.618 point)
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.

Skrevet lør. d. 07. juni 2003 kl. 14:05:18| #8

doktoren
doktoren (15.380 point)
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..

Skrevet lør. d. 07. juni 2003 kl. 14:12:32| #9

doktoren
doktoren (15.380 point)
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);
  ...
}

Skrevet lør. d. 07. juni 2003 kl. 14:26:47| #10

arne_v
arne_v (1.005.618 point)
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;
      }
  }
  ...
}

Skrevet lør. d. 07. juni 2003 kl. 14:27:22| #11

arne_v
arne_v (1.005.618 point)
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;
      }
  }
  ...
}

Skrevet lør. d. 07. juni 2003 kl. 14:51:45| #12

doktoren
doktoren (15.380 point)
tak skal du have!

Skrevet lør. d. 07. juni 2003 kl. 14:54:39| #13

arne_v
arne_v (1.005.618 point)
STOR og MAXI klasserne skal så også have deres metoder
med de rigtige regler.

Skrevet lør. d. 07. juni 2003 kl. 14:58:02| #14


Skrevet lør. d. 07. juni 2003 kl. 14:58:53| #15

doktoren
doktoren (15.380 point)
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

Skrevet lør. d. 07. juni 2003 kl. 15:01:24| #16

arne_v
arne_v (1.005.618 point)
Nej - ikke nødvendigt - bare stil det her.

Skrevet lør. d. 07. juni 2003 kl. 15:02:37| #17

arne_v
arne_v (1.005.618 point)
Men vi skal nok lige se koden som den ser ud nu.

Skrevet lør. d. 07. juni 2003 kl. 18:18:57| #18

doktoren
doktoren (15.380 point)
havde slet ikke set at du havde skrevet herinde...så jeg oprettede alligevel et nyt spørgsmål, men pyt med det

Skrevet lør. d. 07. juni 2003 kl. 18:47:11| #19

arne_v
arne_v (1.005.618 point)
Du fik jo hjælp af repsak, så helt fint.

Skrevet lør. d. 07. juni 2003 kl. 19:06:34| #20

doktoren
doktoren (15.380 point)
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

Skrevet lør. d. 07. juni 2003 kl. 19:12:23| #21

arne_v
arne_v (1.005.618 point)
Du må gerne spørge - og du behøver ikke at oprette et nyt spørgsmål
(jeg har fået point flere gange).

Skrevet lør. d. 07. juni 2003 kl. 19:13:37| #22

doktoren
doktoren (15.380 point)
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

Skrevet lør. d. 07. juni 2003 kl. 19:19:21| #23

doktoren
doktoren (15.380 point)
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?

Skrevet lør. d. 07. juni 2003 kl. 19:23:49| #24

arne_v
arne_v (1.005.618 point)
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.

Skrevet lør. d. 07. juni 2003 kl. 19:24:08| #25

arne_v
arne_v (1.005.618 point)
Har du lige tilføjet metoder eller omdøbt klasser ?

Skrevet lør. d. 07. juni 2003 kl. 19:26:31| #26

doktoren
doktoren (15.380 point)
jeg har rykket nogle af metoderne op i basisklassen "brev"

Skrevet lør. d. 07. juni 2003 kl. 19:26:52| #27

doktoren
doktoren (15.380 point)
/**
* 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;

    }
}

Skrevet lør. d. 07. juni 2003 kl. 19:29:10| #28

arne_v
arne_v (1.005.618 point)
public class BREV  {

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

constructoren skal hedde BREV !

Skrevet lør. d. 07. juni 2003 kl. 19:30:02| #29

arne_v
arne_v (1.005.618 point)
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);
}

Skrevet lør. d. 07. juni 2003 kl. 19:32:09| #30

doktoren
doktoren (15.380 point)
ok -det vidste jeg ikke..

Skrevet lør. d. 07. juni 2003 kl. 19:33:45| #31

doktoren
doktoren (15.380 point)
men hvad betyder "super"

Skrevet lør. d. 07. juni 2003 kl. 19:36:26| #32

arne_v
arne_v (1.005.618 point)
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.

Skrevet lør. d. 07. juni 2003 kl. 19:36:45| #33

doktoren
doktoren (15.380 point)
og vil det sige at basisklassen ikke skal have nogen constructor overhovedet?

Skrevet lør. d. 07. juni 2003 kl. 20:12:14| #34

arne_v
arne_v (1.005.618 point)
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).

Skrevet lør. d. 07. juni 2003 kl. 20:15:49| #35

doktoren
doktoren (15.380 point)
hmmm...tror sgu snart jeg bliver nødt t at give op...tror det bliver lidt for indviklet til mit niveau:(

Skrevet lør. d. 07. juni 2003 kl. 20:18:52| #36

arne_v
arne_v (1.005.618 point)
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);
  }
...

Skrevet lør. d. 07. juni 2003 kl. 20:30:34| #37

doktoren
doktoren (15.380 point)
men så skriver den stadig "cannot resolve symbol variable v"

Skrevet lør. d. 07. juni 2003 kl. 20:31:23| #38

doktoren
doktoren (15.380 point)
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);

}

Skrevet lør. d. 07. juni 2003 kl. 20:33:06| #39

arne_v
arne_v (1.005.618 point)
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.

Skrevet lør. d. 07. juni 2003 kl. 20:33:55| #40

doktoren
doktoren (15.380 point)
aaahhh...så det skal jeg bruge i den class jeg har kaldt for "main"?

Skrevet lør. d. 07. juni 2003 kl. 21:17:06| #41

arne_v
arne_v (1.005.618 point)
Ja.

Logikken er den at du undersøger hvilken type brev det er og så
creater du et brev af den type.

Skrevet søn. d. 08. juni 2003 kl. 12:25:25| #42

doktoren
doktoren (15.380 point)
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.

Skrevet søn. d. 08. juni 2003 kl. 12:27:52| #43

doktoren
doktoren (15.380 point)
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;

    }

Skrevet søn. d. 08. juni 2003 kl. 12:29:03| #44

doktoren
doktoren (15.380 point)
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;

    }

}

Skrevet søn. d. 08. juni 2003 kl. 13:01:03| #45

arne_v
arne_v (1.005.618 point)
Der er faldet en:

publi String toString()

ud af din kode !

Skrevet søn. d. 08. juni 2003 kl. 13:01:36| #46

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

Skrevet søn. d. 08. juni 2003 kl. 13:09:10| #47

doktoren
doktoren (15.380 point)
men når jeg så skriver det, får jeg fejlmeldingen "illegal start of expression"...

Skrevet søn. d. 08. juni 2003 kl. 14:34:33| #48

arne_v
arne_v (1.005.618 point)
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;
    }

}

Skrevet søn. d. 08. juni 2003 kl. 14:36:15| #49

arne_v
arne_v (1.005.618 point)
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();
}

Skrevet søn. d. 08. juni 2003 kl. 14:37:10| #50

arne_v
arne_v (1.005.618 point)
Så skal STANDARD og STOR og MAXI alle have en metode:

double getPorto() {
}

der udregner porto !

Skrevet søn. d. 08. juni 2003 kl. 14:37:56| #51

arne_v
arne_v (1.005.618 point)
To små hovsaer:

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

2)  du må godt lave getPorto til public.

Skrevet søn. d. 08. juni 2003 kl. 14:40:47| #52

doktoren
doktoren (15.380 point)
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?

Skrevet søn. d. 08. juni 2003 kl. 15:12:21| #53

doktoren
doktoren (15.380 point)
men hvorfor får jeg hele tiden fejlmeldingen: "cannot resolve symbol"?

Skrevet søn. d. 08. juni 2003 kl. 16:01:10| #54

arne_v
arne_v (1.005.618 point)
Svært at sige: hvilken linie ? og hvilket symbol ?

Skrevet søn. d. 08. juni 2003 kl. 16:21:38| #55

arne_v
arne_v (1.005.618 point)
Og ingen panik.

Hvis ikke du har fået styr på det i aften, så skal jeg lave 4 klasser
til dig der virker.

Skrevet søn. d. 08. juni 2003 kl. 17:36:37| #56

doktoren
doktoren (15.380 point)
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();
}

Skrevet søn. d. 08. juni 2003 kl. 17:39:54| #57

arne_v
arne_v (1.005.618 point)
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.

Skrevet søn. d. 08. juni 2003 kl. 17:44:38| #58

doktoren
doktoren (15.380 point)
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;
     
    }

Skrevet søn. d. 08. juni 2003 kl. 17:46:52| #59

arne_v
arne_v (1.005.618 point)
Du kalder jo ikke super (BREV constructor).

Skrevet søn. d. 08. juni 2003 kl. 17:47:37| #60

arne_v
arne_v (1.005.618 point)
En af dine holdkammerater (3131) har iøvrigt lige stillet "samme spørgsmål".

:-)

Skrevet søn. d. 08. juni 2003 kl. 17:53:16| #61

doktoren
doktoren (15.380 point)
ja -det kan jeg se...er da heldigvis ikke den eneste, der ikke har styr på det:)

Skrevet søn. d. 08. juni 2003 kl. 17:56:27| #62

doktoren
doktoren (15.380 point)
men det, at jeg ikke kalder super, har det noget med det at gøre?

Skrevet søn. d. 08. juni 2003 kl. 17:57:48| #63

doktoren
doktoren (15.380 point)
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);
}

Skrevet søn. d. 08. juni 2003 kl. 17:58:13| #64


Skrevet søn. d. 08. juni 2003 kl. 17:58:37| #65

arne_v
arne_v (1.005.618 point)
Iøvrigt håber jeg at have et illustrativt eksempel klar om 10-20 minutter.

Skrevet søn. d. 08. juni 2003 kl. 18:00:34| #66


Skrevet søn. d. 08. juni 2003 kl. 18:02:38| #67

doktoren
doktoren (15.380 point)
har du messenger?

Skrevet søn. d. 08. juni 2003 kl. 18:04:33| #68

arne_v
arne_v (1.005.618 point)
Nix.

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

:-)

Skrevet søn. d. 08. juni 2003 kl. 18:10:08| #69

arne_v
arne_v (1.005.618 point)
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);
    }
}

Skrevet søn. d. 08. juni 2003 kl. 18:10:48| #70

arne_v
arne_v (1.005.618 point)
Når man kører test får man:

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

hvilket vistnok er korrekt.

Skrevet søn. d. 08. juni 2003 kl. 18:16:16| #71

doktoren
doktoren (15.380 point)
laver lige hurtigt noget mad -vender tilbage inden så længe

Skrevet søn. d. 08. juni 2003 kl. 18:59:00| #72

doktoren
doktoren (15.380 point)
ked af det...men det virker altså heller ikke hos mig:(

Skrevet søn. d. 08. juni 2003 kl. 18:59:48| #73

doktoren
doktoren (15.380 point)
må jeg evt sende alle 4 klasser til dig, for jeg kan snart ikke overskue det længere:(

Skrevet søn. d. 08. juni 2003 kl. 19:00:10| #74

doktoren
doktoren (15.380 point)
har sikkert bare lavet nogle dumme fejl som jeg ikke kan se

Skrevet søn. d. 08. juni 2003 kl. 19:07:01| #75

arne_v
arne_v (1.005.618 point)
arne_v@mail.danbbs.dk

Skrevet søn. d. 08. juni 2003 kl. 19:23:57| #76

doktoren
doktoren (15.380 point)
tak!
har lige sendt en mail til dig...

Skrevet søn. d. 08. juni 2003 kl. 21:37:15| #77

doktoren
doktoren (15.380 point)
du er godt nok kommet på arbejde m vores opgave nu....:)

Skrevet søn. d. 08. juni 2003 kl. 22:29:43| #78

doktoren
doktoren (15.380 point)
Nu virker det sgu!!!! :) :) :)

Skriv et indlæg




Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] [img]link til billede[/img]
Web- og emailadresser omdannes automatisk til links

Log ind

   

   

Seneste spørgsmål

Gentegne JPanel ved tryk på JButton

Oprettet den 8. februar 2012 kl. 22.15
odsgaard giver 30 point for svar | Giv et svar »

Eksempel på kommunikation med webserver

Oprettet den 7. februar 2012 kl. 09.23
larsande giver 30 point for svar | Giv et svar »

Java JDK compiler til BlueJ

Oprettet den 3. februar 2012 kl. 14.26
andersmnielsen giver 60 point for svar | Giv et svar »

Seneste guides

Installer win 7
Den gode bruger


   




Tips & Tricks fra PC World

Teaser billede

Her er fem sjove danske websider du skal kende

Trænger dine lattermuskler til en omgang fitness på dansk? Vi viser vej til fem websider fyldt med humor og vanvittig satire.


Anmeldelser fra PC World

Teaser billede

Test: Denne super-tablet er iPads hårdeste konkurrent

Eee Pad Transformer Prime er frygtindgydende med sin quadcore processor og evne til at trylle sig om til bærbar. Apple bør kigge i bagspejlet, for Asus' tablet-pc kommer buldrende - og gør det...


Seneste blogindlæg

Teaser billede

Tvangslukke spørgsmål: Hvad er den bedste løsning?

Hej Vi har mange åbne spørgsmål på Eksperten. Vi ville gerne tvangslukke dem - så et spørgsmål efter f.eks. 6 måneder lukkes. Men der er et par uklarheder som ville være gode at få lidt input til:...


Nyheder fra PC World

Teaser billede

Nu kan du snart hente Windows 8

Den nye offentlige betaversion af Windows 8 er klar i denne måned.


Nyheder fra Computerworld

Teaser billede

Måske snart slut med Androids helt store problem

Android-platformen har længe været plaget af et særligt problem. Men måske er problemet nu ved at være elimineret.


Kurser
Samarbejdspartnere

Udgiver · © 2012 IDG Danmark A/S · Hørkær 18 · 2730 Herlev · Tlf.: 77 300 300 · Fax: 77 300 301 · Brug af personoplysninger