Avatar billede 3072 Nybegynder
08. juni 2003 - 21:26 Der er 92 kommentarer og
1 løsning

BlueJ problemer igen igen

Dette er også et spørgsmål til postsystemet med de tre forskellige brevkategorier.
Jeg læste at der var nogle der fik at vide at de skulle lave abstrakte klasser over brev hvordan gør man det helt præcist.
Avatar billede arne_v Ekspert
08. juni 2003 - 21:30 #1
Det er en måde at lave det på - der er mange andre.

Jeg postede noget kode tidligere iidag i http://www.eksperten.dk/spm/361739
(se 08/06-2003 18:10:08).
Avatar billede arne_v Ekspert
08. juni 2003 - 21:32 #2
Koden er ikke "færdig", men den illusterer både abstrakt basis-klasse
og factory.

Hvis du ikke er for skrap til Java bør du måske starte med en
simplere løsning.

F.eks. bare en enkelt klasse og en masse if sætninger til at udregne
porto.
Avatar billede 3072 Nybegynder
08. juni 2003 - 21:35 #3
Jeg er ikke helt inde i det, men vil gerne vide lidt mere
Avatar billede arne_v Ekspert
08. juni 2003 - 21:35 #4
Prøv og kig på det kode eksempel jeg refererede til først.
Avatar billede 3072 Nybegynder
08. juni 2003 - 21:51 #5
Ok, så vil jeg lige spørge dig hvorfor bruges der private double til længde? Hvorfor skrives der public void? Og hvad betyder det når der står public double?
Avatar billede arne_v Ekspert
08. juni 2003 - 21:54 #6
Længde gemmes som double for at kunne håndtere decimaler f.eks. 29.7 cm.

Længde er private fordi den skal accesses gennem setLængde og
getLængde metoderne (og de er public).

void betyder at metoden ikke returnerer noget.

public betyder at metoden kan kaldes af al kode.
Avatar billede 3072 Nybegynder
08. juni 2003 - 21:59 #7
Ok, det vil altså sige at jeg kan godt skrive public int hvis der kun er tale om heltal og ikke andet. 

Hvad nu hvis man ikke ønsker at lave de abstrakte klasser men kun en klasse for brevene er det så også muligt?  Og hvilken løsning er bedst og nemmest at arbejde med?
Avatar billede arne_v Ekspert
08. juni 2003 - 22:06 #8
Ja - hvis det kun er heltal kan du bare erklære den int.

Du kan godt lave kun en klasse der indeholde hele logikken (hvis din opgave
formulering tillader det).

Løsningen med en abstrakt basis klasse og en factory er mere avanceret end
en stor klasse.

Men for at forstå den skal man have rimelig styr på Java.

Har du styr på abstrakte klassser og metoder ?

Hvis ikke tror jeg at du skal vælge en simplere løsning.
Avatar billede 3072 Nybegynder
08. juni 2003 - 22:11 #9
Jeg har ikke styr på abstrakte klasser og metoder, derfor vil jeg også gerne vide om det ikke var lettere at lave en klasse hvis man altså kan det.

Hvis man kan hvordan starter man så koden for det?
Avatar billede arne_v Ekspert
08. juni 2003 - 22:15 #10
Det kan du godt og det er nok mindre krævende med hensyn
til Java finesser.

Umiddelbart vil jeg tro at du skal starte med at lave en constructor
med et antal argumenter som beskriver brevet og noget kode der
gemmer dem.

Og så laver du en beregnPorto metode der udfra disse oplysninger
beregner den korrekte porto.

Det må være det allermest simple.
Avatar billede 3072 Nybegynder
08. juni 2003 - 22:23 #11
ok, så er problemet bare lige at jeg ikke er sikker på hvordan man laver en constructor og metoder til den.

Constructoren hører den ikke til efter public class {private String destination; osv}. Er du muligt at du kan give mig et hint på koden der skal efterfølge denne class?
Avatar billede arne_v Ekspert
08. juni 2003 - 22:49 #12
en constructor er en metode uden type med samme navn som klassen.

Eksempel:

public class Brev {
  public Brev(int l, int b, int t, int v, String d) {
  }
}
Avatar billede 3072 Nybegynder
08. juni 2003 - 23:02 #13
Ok tusind tak for al din hjælp, det var pænt af dig, det kan være jeg vender tilbage på et senere tidspunkt med flere spørgsmål.
Avatar billede arne_v Ekspert
08. juni 2003 - 23:07 #14
Du er velkommen.
Avatar billede 3072 Nybegynder
09. juni 2003 - 10:43 #15
Så har lavet et en klasse som vi snakkede om i går, kan du sige om det jeg har gjort indtil videre er rigtigt?


public class Category
{
    // instance variables
    private int length, width, weight;
    private double thickness;   
    private String country;

    /**
    * Constructor for objects of class Category
    */
    public Category(String c, int l, int w, int  we, int t)
    {
        // initialise instance variables
        length = l;
        width = w;
        weight = we;
        thickness = t;
    }
Avatar billede arne_v Ekspert
09. juni 2003 - 10:51 #16
Det ser meget fronuftigt ud (bortset fra at jeg tror du mangler at gemme
country).


Men det er nok porto beregningen der er det tricky.
Avatar billede 3072 Nybegynder
09. juni 2003 - 11:02 #17
Nå, ja det skal jeg lige huske at gøre. Men skal de forskellige typer af breve ikke også nævnes?

Hvordan går jeg det her?
Avatar billede 3072 Nybegynder
09. juni 2003 - 11:28 #18
Hvis det nu stadig skal være meget meget simpelt, kan jeg så ikke lave 2 klasser en hvor jeg beskriver brevene altså standard, large og maxi og en med porto.

Uden at det bliver med de abstrakte klasser du talte om i aftes er det også en mulighed?
Avatar billede arne_v Ekspert
09. juni 2003 - 12:41 #19
Porto beregning er oplagt en metode og ikke en klasse.
Avatar billede arne_v Ekspert
09. juni 2003 - 12:42 #20
Med hensyn til type kunne du jo f.eks. lave en metode:

public String getType()

der beregnede type "Standard", "Stor" eller "Maxi" udfra målene
som du har gemt.

Men der er altså mange måder at gøre det på.
Avatar billede 3072 Nybegynder
09. juni 2003 - 12:49 #21
Ja, det er snart klar over :), men som sagt så skal det bare være så simpelt som muligt så jeg har en lille chance for at forstå hvad det er jeg har med at gøre:)

Hvis jeg bruger public string er det så ikke her jeg skal bruge new type = Standard?
Eller hvad det nu er jeg skal have frem.
Avatar billede arne_v Ekspert
09. juni 2003 - 12:52 #22
Næ jeg forestillede mig noget så simpelt som:

public String getType() {
  if(...) {
      return "Standard";
  } else if(...) {
      return "Stor";
  } else {
      return "Maxi";
  }
}
Avatar billede 3072 Nybegynder
09. juni 2003 - 12:58 #23
ok tak, det vil jeg prøve det ser noget mere overskueligt ud, men lad os nu om jeg kan få det til at virke:)
Avatar billede arne_v Ekspert
09. juni 2003 - 13:02 #24
Og så er der også porto beregningen !

:-)
Avatar billede 3072 Nybegynder
09. juni 2003 - 13:09 #25
Ser det her rigtig ud indtil nu?

public class Category
{
    // instance variables
    private int length, width, weight;
    private double thickness;   
   
   

    /**
    * Constructor for objects of class Category
    */
public Category(int l, int w, int  we, int t)
    {
        // initialise instance variables
        length = l;
        width = w;
        weight = we;
        thickness = t;
       
    }
   
    /**
    * Find out which type of letter we are dealing with according to weight,
      width, length and thicknes.
     
      public String getType(){ if(l <= 23) && (w <= 17) && (we <=50) &&
      (t <=0.5)
      {
      return "Standardletter";
      }
      else if {if(l <= 33) && (w <= 23) && (we <= 1000) && (t <= 2)
      {
      return " Largeletter";
      }
      else if(l <= 60> && (l + w + t <= 90) && (we <= 2000)
      {
      return "Maxiletter";
      }
      }


Eller er det helt hen i skove?
Avatar billede 3072 Nybegynder
09. juni 2003 - 13:20 #26
Den der med portoberegningen ja, det skal noke blive sjovt:), men det er vel også en masse if else sætninger. Hvor land er inkludereret ikke?
Avatar billede arne_v Ekspert
09. juni 2003 - 13:30 #27
Det oversætter ikke !

Jeg vil anbefale dig løbende at oversætte så du ikke får for mange fejl.
Avatar billede arne_v Ekspert
09. juni 2003 - 13:30 #28
Den her versionb oversætter:

public class Category {
    // instance variables
    private int length, width, weight;
    private double thickness;

    /**
    * Constructor for objects of class Category
    */
    public Category(int l, int w, int we, int t) {
        // initialise instance variables
        length = l;
        width = w;
        weight = we;
        thickness = t;

    }

    /**
    * Find out which type of letter we are dealing with according to weight,
    * width, length and thicknes.
    */

    public String getType() {
        if ((length <= 23) && (width <= 17) && (weight <= 50) && (thickness <= 0.5)) {
            return "Standardletter";
        } else if ((length <= 33) && (width <= 23) && (weight <= 1000) && (thickness <= 2)) {
            return " Largeletter";
        } else if ((length <= 60) && (length + width + thickness <= 90) && (weight <= 2000)) {
            return "Maxiletter";
        } else {
            return "Not a letter";
        }
    }
}
Avatar billede 3072 Nybegynder
09. juni 2003 - 13:39 #29
Når jeg compiler får jeg følgende fejlmelding her: illegal start of expression public String getType(){ if(l <= 23) && (w <= 17) && (we <=50) &&

(Alt hvad jeg har skrevet indtil videre ser sådan ud.)

public class Category
{
    // instance variables
    private int length, width, weight;
    private double thickness;   
    private string country;
   

    /**
    * Constructor for objects of class Category
    */
public Category(int l, int w, int  we, int t)
    {
        // initialise instance variables
        length = l;
        width = w;
        weight = we;
        thickness = t;
        country = c;
    }
   
    //*Find out which type of letter we are dealing with according to weight,width, length and thicknes.*/
     
      public String getType(){ if(l <= 23) && (w <= 17) && (we <=50) &&
      (t <=0.5)
      {
      return "Standardletter";
      }
      else if {if(l <= 33) && (w <= 23) && (we <= 1000) && (t <= 2)
      {
      return " Largeletter";
      }
      else if(l <= 60> && (l + w + t <= 90) && (we <= 2000)
      {
      return "Maxiletter";
      }
      }
   
   
      //* Then we have to make the postage calculation according to weight
        * country.*/

   
       


}
Avatar billede arne_v Ekspert
09. juni 2003 - 13:42 #30
Du mangler parentser omkring hele if udtrykker - det er:

if ( (...) && (...) && (...) ) {
Avatar billede 3072 Nybegynder
09. juni 2003 - 13:52 #31
Har sat parenteser nu, men får så følgende fejlmelding: ";" expected
      public String getType()if((l <= 23) && (w <= 17) && (we <=50) && .............

Hvad mener du med ikke oversætter?
Avatar billede arne_v Ekspert
09. juni 2003 - 14:13 #32
"ikke oversætter" = "fejl ved oversættelse"
Avatar billede arne_v Ekspert
09. juni 2003 - 14:13 #33
Nu mangler der vist en "{" mellem "getTtype()" og "if".
Avatar billede 3072 Nybegynder
09. juni 2003 - 14:20 #34
ok, Nu får jeg denne fejlmeddelse : Illegal start of expression

      else if((l <= 60>) && (l + w + t <= 90) && (we <= 2000))
Avatar billede arne_v Ekspert
09. juni 2003 - 14:25 #35
Der er en ">" for meget efter 60.
Avatar billede 3072 Nybegynder
09. juni 2003 - 14:31 #36
ok er fjernet tak. Nu får jeg denne fejlemelding:

Cannot resolve symbol symbol:     private string country;

Her er det jeg har skrevet:
public class Category
{
    // instance variables
    private int length, width, weight;
    private double thickness;   
    private string country;
Avatar billede 3072 Nybegynder
09. juni 2003 - 14:31 #37
Er det fordi jeg ikke har country med i If else?
Avatar billede arne_v Ekspert
09. juni 2003 - 14:40 #38
Nej du har stavet string med lille s (det er String med stort S).
Avatar billede 3072 Nybegynder
09. juni 2003 - 14:46 #39
Nu kommer følgende fejlmelding;

cannot resolve symbol
symbol: variable c location: class Category country c;

// initialise instance variables
        length = l;
        width = w;
        weight = we;
        thickness = t;
        country = c;
    }
Avatar billede arne_v Ekspert
09. juni 2003 - 14:47 #40
Er c i argument-listen til constructoren ?
Avatar billede 3072 Nybegynder
09. juni 2003 - 14:53 #41
Ja jeg har skrevet den med forkortelsen c, det skulle jeg måske ikke

public class Category
{
    // instance variables
    private int length, width, weight;
    private double thickness;   
    private String country;
   

    /**
    * Constructor for objects of class Category
    */
public Category(int l, int w, int  we, int t)
    {
        // initialise instance variables
        length = l;
        width = w;
        weight = we;
        thickness = t;
        country = c;
Avatar billede arne_v Ekspert
09. juni 2003 - 15:00 #42
Den er ikke i argument listen:

public Category(int l, int w, int  we, int t)

public Category(int l, int w, int  we, int t, String c)
Avatar billede 3072 Nybegynder
09. juni 2003 - 15:02 #43
Nej det kan jeg godt se nu. :)
Avatar billede 3072 Nybegynder
09. juni 2003 - 15:04 #44
Hvis jeg skriver den i argumentlisten går det så ikke galt når skriver if, else? Der skal land jo ikke blandes ind det skal jo først ind når jeg skal til at beregne portoen
Avatar billede arne_v Ekspert
09. juni 2003 - 15:06 #45
Nej.

Det er ikke et krav at man skal bruge variable til noget.
Avatar billede 3072 Nybegynder
09. juni 2003 - 15:12 #46
Ok, nu får jeg så følgende fejlmelding: cannot resolve symbol symbol: variable l location: class category       if((l <= 23) && (w <= 17) && (we <=50) &&

Alt hvad jeg skrevet til det er her:
public String getType(){
      if((l <= 23) && (w <= 17) && (we <=50) &&
      (t <=0.5))     
      {
      return "Standardletter";
      }
      else if ((l <= 33) && (w <= 23)&&(we <= 1000) && (t <= 2))
      {
      return " Largeletter";
      }
      else if ((l <= 60)&&(l + w + t <= 90)&&(we <= 2000))
      {
      return "Maxiletter";
      }
      else
      {
      return "Not a letter";



Kan alle de fejlmeldinger blive ved? :(
Avatar billede 3072 Nybegynder
09. juni 2003 - 16:00 #47
Hvorfor vil den ikke compile når jeg har lavet forkortelser?
Avatar billede arne_v Ekspert
09. juni 2003 - 17:29 #48
Du skal bruge length som er navnet på instans varieblen ikke l som er
navnet på argumentet i constructoren.
Avatar billede 3072 Nybegynder
09. juni 2003 - 18:53 #49
Der forstår jeg ikke helt hvad forskellen er?
Avatar billede arne_v Ekspert
09. juni 2003 - 19:11 #50
Argumentet til constructoren kan kun bruges i selve constructoren.

Instans variablen kan bruges i alle metoder.
Avatar billede 3072 Nybegynder
09. juni 2003 - 19:16 #51
ok tak igen, du er en MEGET MEGET MEGET stor hjælp. Nu kommer det som jeg så frygter allermest ved opgaven nemlige portoberegning.

Kan jeg godt lave den oveni alt det andet jeg har skrevet?
Avatar billede arne_v Ekspert
09. juni 2003 - 19:19 #52
Ja - du laver bare en ny metode calculatePorto nedenunder
getType metoden.
Avatar billede 3072 Nybegynder
09. juni 2003 - 19:23 #53
ok kan jeg så også bruge if-else metoden her eller skal der noget mere avanceret til?
Avatar billede arne_v Ekspert
09. juni 2003 - 19:25 #54
Jeg tror den er umulig at lave uden if else.
Avatar billede 3072 Nybegynder
09. juni 2003 - 19:27 #55
ok, jeg prøver at se hvad jeg kan gøre ved den.
Avatar billede 3072 Nybegynder
09. juni 2003 - 19:29 #56
Er der andre muligheder end if-else som stadigvæk er simple og forholdsvis nemme at forstå?
Avatar billede arne_v Ekspert
09. juni 2003 - 19:32 #57
Ikke nogen som er relevant til problem-stillingen.
Avatar billede 3072 Nybegynder
09. juni 2003 - 19:33 #58
Ok tak, jeg kigger på det og håber jeg kan få det til at lykkes:)
Avatar billede 3072 Nybegynder
09. juni 2003 - 19:43 #59
Skulle country ikke også være nævnt et eller andet sted i opgaven ligesom brevetyperne er?
Avatar billede arne_v Ekspert
09. juni 2003 - 19:46 #60
Ikke forstået.

Du gemmer conutry i constructor og kan bruge den i porto beregning.
Avatar billede 3072 Nybegynder
09. juni 2003 - 19:52 #61
Det kan jeg simpelthen ikke se logikken i det her. Jeg skal have country, vægt og brevtypen ind i if-else og return skal være postage.

Jeg skulle vist have givet op for længe for længe siden:(
Avatar billede arne_v Ekspert
09. juni 2003 - 19:56 #62
vægt og country er instans variable
brev type kan du beregne med getType

altså har du alt det du skal bruge !
Avatar billede 3072 Nybegynder
09. juni 2003 - 19:59 #63
ok jeg prøver og ser hvad jeg kan få ud af det. Atter engang tak.
Avatar billede 3072 Nybegynder
09. juni 2003 - 20:12 #64
Jeg har fået sat det her ind til videre er det den rigtige fremgangsmåde?


        public String calculatePostage()
        {
        if ((weight <= 50) && (country.equals("Denmark"))
        {
        return "weight" + Weight + "postage" + postage
        }
Avatar billede arne_v Ekspert
09. juni 2003 - 20:14 #65
Jeg ville nok lave det som:

public double calculatePostage() {
    if ((weight <= 50) && country.equals("Denmark")) {
        return 4.25;
    }
    return -1.0;
}
Avatar billede 3072 Nybegynder
09. juni 2003 - 20:17 #66
Hvorfor return -1.0; Og hvad med brevtypen
Avatar billede arne_v Ekspert
09. juni 2003 - 20:21 #67
Java compileren vil brokke sig hvis der ikke altid er en retur værdi.

Jeg troede at du skulel sætte brev type ind, men lad gå:

public double calculatePostage() {
    if (getType().equals("Standardletter") && (weight <= 50) && country.equals("Denmark")) {
        return 4.25;
    }
    return -1.0;
}

du har stadig lidt der mangler inden de 2 andre brev typer er supporteret !
Avatar billede 3072 Nybegynder
09. juni 2003 - 20:25 #68
Det skulle jeg også, men jeg kunne ikke se hvor det skulle ind henne, det ser så nemt ud for dem der virkelig kan det her.

Ok, vil det så sige at return altid er -1.0?
Avatar billede 3072 Nybegynder
09. juni 2003 - 20:33 #69
kan jeg godt køre if hele vejen ned for først til sidst at skrive else { return no letter}?
Avatar billede 3072 Nybegynder
09. juni 2003 - 20:50 #70
Hvorfor får jeg denne fejlmelding return outside method 5.50 ?

Her er hvad jeg har skrevet:
{
        if ((getType().equals("Largeletter")) && (weight <= 50) &&
        country.equals("Denmark"))
      {
      return 5.50;
      }
      return -1.0;
      }
Avatar billede arne_v Ekspert
09. juni 2003 - 20:52 #71
Det lyder som om det står uden for en metode.
Avatar billede 3072 Nybegynder
09. juni 2003 - 20:58 #72
Ja, så langt er jeg også med:) Men det står nøjagtig ligesom den med 4.25 og der fik jeg ingen fejl ved compilingen,
Avatar billede arne_v Ekspert
09. juni 2003 - 21:00 #73
Prøv lige og post hele koden.
Avatar billede 3072 Nybegynder
09. juni 2003 - 21:06 #74
ok her er den:

public double calculatePostage()
        {
        if ((getType().equals("Standardletter")) && (weight <= 50)
            && country.equals("Denmark"))
            {       
        return 4.25;
        }
        return -1.0;
        }
       
        if ((getType().equals("Largeletter")) && (weight <= 50) &&
        country.equals("Denmark"))
      {
      return 5.50;
      }
      return -1.0;
      }
Avatar billede arne_v Ekspert
09. juni 2003 - 21:08 #75
Der er jo også en parentes for meget.

Prøv med:

public double calculatePostage()
        {
        if ((getType().equals("Standardletter")) && (weight <= 50)
            && country.equals("Denmark"))
            {     
        return 4.25;
        }
     
        if ((getType().equals("Largeletter")) && (weight <= 50) &&
        country.equals("Denmark"))
      {
      return 5.50;
      }
      return -1.0;
      }
Avatar billede 3072 Nybegynder
09. juni 2003 - 21:26 #76
Jeg forstår det ikke helt længere er det ikke tilladt at copy paste for det er hvad jeg har gjort med det du lige har skrevet fordi der ikke var nogen fejlmelding, men når jeg paster og retter i det før jeg fejlmeldingen: Illegal start of type if ((getType()equals.("Largeletter")) && (weight <= 100)

Hvad er det jeg gør forkert kan du sige mig det?
Avatar billede arne_v Ekspert
09. juni 2003 - 21:28 #77
Prøv lige og post hele koden.
Avatar billede 3072 Nybegynder
09. juni 2003 - 21:30 #78
Her kommer den:

  public double calculatePostage()
        {
        if ((getType().equals("Standardletter")) && (weight <= 50)
            && country.equals("Denmark"))
            {     
        return 4.25;
        }
     
        if ((getType().equals("Largeletter")) && (weight <= 50) &&
        country.equals("Denmark"))
      {
      return 5.50;
      }
      return -1.0;
      }

   
     
        if ((getType().equals("Largeletter")) && (weight <= 100)
            && country.equals("Denmark"))
            {     
        return 6.50;
        }
     
        if ((getType().equals("Largeletter")) && (weight <= 250) &&
        country.equals("Denmark"))
      {
      return 12.00;
      }
      return -1.0;
      }
Avatar billede arne_v Ekspert
09. juni 2003 - 21:33 #79
Der er igen:

    return -1.0;
      }

for meget !

Fjern den første.
Avatar billede 3072 Nybegynder
09. juni 2003 - 21:35 #80
Ok tak det vil jeg gøre
Avatar billede 3072 Nybegynder
09. juni 2003 - 22:29 #81
STORT PROBLEM IHVERTFALD FOR MIG:)

Når jeg taster ind i selve BLUEJ for create object får jeg følgende fejlmelding:

Error possible loss of precision
found Double
Required int
int_bluej_param3 = 0.5;

Det er når jeg taster thickness ind. Hvordan retter jeg det
Avatar billede arne_v Ekspert
09. juni 2003 - 22:34 #82
Det lyder som du forsøger at putte en double ind i en int.

Det kan du ikke.

Men iøvrigt kender jeg ikke noget til BlueJ.
Avatar billede 3072 Nybegynder
09. juni 2003 - 22:36 #83
Jeg har selv rettet fejlen det var i instance variables jeg havde lavet fejlen puha
Avatar billede 3072 Nybegynder
09. juni 2003 - 22:38 #84
Kender du slet ikke noget til Blue J???
Avatar billede arne_v Ekspert
09. juni 2003 - 22:39 #85
Ikke spor.

Jeg bruger JBuilder, Eclipse m.v. til min Java programmering.
Avatar billede 3072 Nybegynder
09. juni 2003 - 22:41 #86
Når jeg nu kun skal finde frem til porto prisen ved hjælp af destination og vægt hvordan klarer jeg så lige det.
Avatar billede arne_v Ekspert
09. juni 2003 - 22:46 #87
Masser af if sætninger !
Avatar billede 3072 Nybegynder
09. juni 2003 - 22:47 #88
Efter portoen er beregnet?
Avatar billede arne_v Ekspert
09. juni 2003 - 22:50 #89
Øh - du bruger if sætningerne til at beregne porto. Du er allerede
startet med din calculatePostage metode. Den gør du færdig.

Og så er din klasse klar til test.
Avatar billede 3072 Nybegynder
09. juni 2003 - 22:54 #90
Her er min klasse:

import java.util.*;
/**
* Letter information what kind of letter are we dealing with defined by length,
* width, thickness and weight.
*
* @author (your name)
* @version (a version number or a date)
*/
public class Category
{
    // instance variables
    private int length, width, weight;
    private double thickness;   
    private String country;
   

    /**
    * Constructor for objects of class Category
    */
public Category(int l, int w, int  we, double t, String c)
    {
        // initialise instance variables
        length = l;
        width = w;
        weight = we;
        thickness = t;
        country = c;
    }
   
    //*Find out which type of letter we are dealing with according to weight,width, length and thicknes.*/
     
      public String getType(){
      if((length <= 23) && (width <= 17) && (weight <=50) &&
      (thickness <=0.5))     
      {
      return "Standardletter";
      }
      else if ((length <= 33) && (width <= 23)&&(weight <= 1000) && (thickness <= 2))
      {
      return " Largeletter";
      }
      else if ((length <= 60)&&(length + width + thickness <= 90)&&(weight <= 2000))
      {
      return "Maxiletter";
      }
      else
      {
      return "Not a letter";
      }
      }
   
   
   
      //* Then we have to make the postage calculation according to weight and country.*/
       
       
      public double calculatePostage()
        {
if ((getType().equals("Standardletter")) && (weight <= 50)
            && country.equals("Denmark"))
            {     
        return 4.25;
        }
       
       
if ((getType().equals("Standardletter")) && (weight <= 50)
            && country.equals("Europ, The Faroes Island and Greenland"))
            {     
        return 5.50;
        }
       
       
if ((getType().equals("Standardletter")) && (weight <= 50)
            && country.equals("Other foreign countries"))
            {     
        return 6.50;
        } 
       
       
if ((getType().equals("Largeletter")) && (weight <= 50) &&
        country.equals("Denmark"))
      {
      return 5.50;
      }
     
if ((getType().equals("Largeletter")) && (weight <= 100)
            && country.equals("Denmark"))
            {     
        return 6.50;
        }
     
if ((getType().equals("Largeletter")) && (weight <= 250) &&
        country.equals("Denmark"))
      {
      return 12.00;
      }
   
   
if ((getType().equals("Largeletter")) && (weight <= 500) &&
        country.equals("Denmark"))
      {
      return 20.00;
      }
     
if ((getType().equals("Largeletter")) && (weight <= 1000)
            && country.equals("Denmark"))
            {     
        return 28.00;
        }
     
if ((getType().equals("Largeletter")) && (weight <=50) &&
        country.equals("Europe, The Faroes Island and Greenland"))
      {
      return 8.50;
      }
if ((getType().equals("Largeletter")) && (weight <= 100)
            && country.equals("Europe, The Faroes Island and Greenland"))
            {     
        return 12.00;
        }
     
if ((getType().equals("Largeletter")) && (weight <= 250) &&
        country.equals("Europe, The Faroes Island and Greenland"))
      {
      return 19.00;
      }
   
if ((getType().equals("Largeletter")) && (weight <= 500) &&
        country.equals("Europe, The Faroes Island and Greenland"))
      {
      return 33.00;
      }

if ((getType().equals("Largeletter")) && (weight <= 1000)
            && country.equals("Europe, The Faroes Island and Greenland"))
            {     
        return 57.00;
        }
     
if ((getType().equals("Largeletter")) && (weight <=50) &&
        country.equals("Other foreign countries"))
      {
      return 11.50;
      }
   
if ((getType().equals("Largeletter")) && (weight <= 100)
            && country.equals("Other foreign countries"))
            {     
        return 18.00;
        }
     
if ((getType().equals("Largeletter")) && (weight <= 250) &&
        country.equals("Other foreign countries"))
      {
      return 33.00;
      }
   
if ((getType().equals("Largeletter")) && (weight <= 500) &&
        country.equals("Other foreign countries"))
      {
      return 56.00;
      }

if ((getType().equals("Largeletter")) && (weight <= 1000)
            && country.equals("Other foreign countries"))
            {     
        return 95.00;
        }
     
if ((getType().equals("Maxiletter")) && (weight <= 50) &&
        country.equals("Denmark"))
      {
      return 7.00;
      }
     
if ((getType().equals("Maxiletter")) && (weight <= 100)
            && country.equals("Denmark"))
            {     
        return 9.00;
        }
     
if ((getType().equals("Maxiletter")) && (weight <= 250) &&
        country.equals("Denmark"))
      {
      return 15.00;
      }
       
if ((getType().equals("Maxiletter")) && (weight <= 500) &&
        country.equals("Denmark"))
      {
      return 24.00;
      }
     
if ((getType().equals("Maxiletter")) && (weight <= 1000)
            && country.equals("Denmark"))
            {     
        return 32.00;
        }
   
if ((getType().equals("Maxiletter")) && (weight <= 2000)
            && country.equals("Denmark"))
            {     
        return 40.00;
        }
   
if ((getType().equals("Maxiletter")) && (weight <= 50) &&
        country.equals("Europe, The Faroes Island and Greenland"))
        {     
        return 14.00;
        }
   
if ((getType().equals("Maxiletter")) && (weight <= 100)
            && country.equals("Europe, The Faroes Island and Greenland"))
            {     
        return 19.00;
        }
     
if ((getType().equals("Maxiletter")) && (weight <= 250) &&
        country.equals("Europe, The Faroes Island and Greenland"))
      {
      return 26.00;
      }
       
if ((getType().equals("Maxiletter")) && (weight <= 500) &&
        country.equals("Europe, The Faroes Island and Greenland"))
      {
      return 41.00;
      }
     
if ((getType().equals("Maxiletter")) && (weight <= 1000)
            && country.equals("Europe, The Faroes Island and Greenland"))
            {     
        return 65.00;
        }
   
if ((getType().equals("Maxiletter")) && (weight <= 2000)
            && country.equals("Europe, The Faroes Island and Greenland"))
            {     
            return 100.00;
        }
   
if ((getType().equals("Maxiletter")) && (weight <= 50) &&
        country.equals("Other foreign countries"))
        {     
        return 19.00;
        }
   
if ((getType().equals("Maxiletter")) && (weight <= 100)
            && country.equals("Other foreign countries"))
            {     
        return 27.00;
        }
     
if ((getType().equals("Maxiletter")) && (weight <= 250) &&
        country.equals("Other foreign countries"))
      {
      return 41.00;
      }
       
if ((getType().equals("Maxiletter")) && (weight <= 500) &&
        country.equals("Other foreign countries"))
      {
      return 61.00;
      }
     
if ((getType().equals("Maxiletter")) && (weight <= 1000)
            && country.equals("Other foreign countries"))
            {     
        return 105.00;
        }
   
if ((getType().equals("Maxiletter")) && (weight <= 2000)
            && country.equals("Other foreign countries"))
            {     
            return 175.00;
            }
   
            else
            {
              return -1.0;
              }
}
   















}
Den er compilet og det hele men når vil have den til at hente double calculatePostage kommer den op og siger double method result = -1.0
Kan du sige mig hvad jeg har gjort galt her?
Avatar billede 3072 Nybegynder
09. juni 2003 - 23:40 #91
Kan du se hvad jeg har gjort galt udover at else return er -1.0, jeg ved bare ikke hvordan jeg skal rette den.

Og så har jeg lige et sidste spørgsmål:) Hvis jeg skal udregne portoen efter vægt og destination hvordan skal jeg så lave if-else koderne og hvor skal de ind henne?

Jeg håber du vil svare på disse ting så skal du nok få fred for mig:)
Avatar billede arne_v Ekspert
10. juni 2003 - 07:00 #92
Jeg gik i seng.

I http://www.eksperten.dk/spm/362755 lyder det som om at de allerede har fundet
løsningen.

Et " " for meget.
Avatar billede arne_v Ekspert
10. juni 2003 - 07:03 #93
Det virker nemlig også hos mig:

/**
* Letter information what kind of letter are we dealing with defined by length,
* width, thickness and weight.
*
* @author (your name)
* @version (a version number or a date)
*/
public class Category {
    // instance variables
    private int length, width, weight;
    private double thickness;
    private String country;

    /**
    * Constructor for objects of class Category
    */
    public Category(int l, int w, int we, double t, String c) {
        // initialise instance variables
        length = l;
        width = w;
        weight = we;
        thickness = t;
        country = c;
    }

    //*Find out which type of letter we are dealing with according to weight,width, length and thicknes.*/

    public String getType() {
        if ((length <= 23)
            && (width <= 17)
            && (weight <= 50)
            && (thickness <= 0.5)) {
            return "Standardletter";
        } else if (
            (length <= 33)
                && (width <= 23)
                && (weight <= 1000)
                && (thickness <= 2)) {
            return "Largeletter";
        } else if (
            (length <= 60)
                && (length + width + thickness <= 90)
                && (weight <= 2000)) {
            return "Maxiletter";
        } else {
            return "Not a letter";
        }
    }

    //* Then we have to make the postage calculation according to weight and country.*/

    public double calculatePostage() {
        if ((getType().equals("Standardletter"))
            && (weight <= 50)
            && country.equals("Denmark")) {
            return 4.25;
        }

        if ((getType().equals("Standardletter"))
            && (weight <= 50)
            && country.equals("Europ, The Faroes Island and Greenland")) {
            return 5.50;
        }

        if ((getType().equals("Standardletter"))
            && (weight <= 50)
            && country.equals("Other foreign countries")) {
            return 6.50;
        }

        if ((getType().equals("Largeletter"))
            && (weight <= 50)
            && country.equals("Denmark")) {
            return 5.50;
        }

        if ((getType().equals("Largeletter"))
            && (weight <= 100)
            && country.equals("Denmark")) {
            return 6.50;
        }

        if ((getType().equals("Largeletter"))
            && (weight <= 250)
            && country.equals("Denmark")) {
            return 12.00;
        }

        if ((getType().equals("Largeletter"))
            && (weight <= 500)
            && country.equals("Denmark")) {
            return 20.00;
        }

        if ((getType().equals("Largeletter"))
            && (weight <= 1000)
            && country.equals("Denmark")) {
            return 28.00;
        }

        if ((getType().equals("Largeletter"))
            && (weight <= 50)
            && country.equals("Europe, The Faroes Island and Greenland")) {
            return 8.50;
        }
        if ((getType().equals("Largeletter"))
            && (weight <= 100)
            && country.equals("Europe, The Faroes Island and Greenland")) {
            return 12.00;
        }

        if ((getType().equals("Largeletter"))
            && (weight <= 250)
            && country.equals("Europe, The Faroes Island and Greenland")) {
            return 19.00;
        }

        if ((getType().equals("Largeletter"))
            && (weight <= 500)
            && country.equals("Europe, The Faroes Island and Greenland")) {
            return 33.00;
        }

        if ((getType().equals("Largeletter"))
            && (weight <= 1000)
            && country.equals("Europe, The Faroes Island and Greenland")) {
            return 57.00;
        }

        if ((getType().equals("Largeletter"))
            && (weight <= 50)
            && country.equals("Other foreign countries")) {
            return 11.50;
        }

        if ((getType().equals("Largeletter"))
            && (weight <= 100)
            && country.equals("Other foreign countries")) {
            return 18.00;
        }

        if ((getType().equals("Largeletter"))
            && (weight <= 250)
            && country.equals("Other foreign countries")) {
            return 33.00;
        }

        if ((getType().equals("Largeletter"))
            && (weight <= 500)
            && country.equals("Other foreign countries")) {
            return 56.00;
        }

        if ((getType().equals("Largeletter"))
            && (weight <= 1000)
            && country.equals("Other foreign countries")) {
            return 95.00;
        }

        if ((getType().equals("Maxiletter"))
            && (weight <= 50)
            && country.equals("Denmark")) {
            return 7.00;
        }

        if ((getType().equals("Maxiletter"))
            && (weight <= 100)
            && country.equals("Denmark")) {
            return 9.00;
        }

        if ((getType().equals("Maxiletter"))
            && (weight <= 250)
            && country.equals("Denmark")) {
            return 15.00;
        }

        if ((getType().equals("Maxiletter"))
            && (weight <= 500)
            && country.equals("Denmark")) {
            return 24.00;
        }

        if ((getType().equals("Maxiletter"))
            && (weight <= 1000)
            && country.equals("Denmark")) {
            return 32.00;
        }

        if ((getType().equals("Maxiletter"))
            && (weight <= 2000)
            && country.equals("Denmark")) {
            return 40.00;
        }

        if ((getType().equals("Maxiletter"))
            && (weight <= 50)
            && country.equals("Europe, The Faroes Island and Greenland")) {
            return 14.00;
        }

        if ((getType().equals("Maxiletter"))
            && (weight <= 100)
            && country.equals("Europe, The Faroes Island and Greenland")) {
            return 19.00;
        }

        if ((getType().equals("Maxiletter"))
            && (weight <= 250)
            && country.equals("Europe, The Faroes Island and Greenland")) {
            return 26.00;
        }

        if ((getType().equals("Maxiletter"))
            && (weight <= 500)
            && country.equals("Europe, The Faroes Island and Greenland")) {
            return 41.00;
        }

        if ((getType().equals("Maxiletter"))
            && (weight <= 1000)
            && country.equals("Europe, The Faroes Island and Greenland")) {
            return 65.00;
        }

        if ((getType().equals("Maxiletter"))
            && (weight <= 2000)
            && country.equals("Europe, The Faroes Island and Greenland")) {
            return 100.00;
        }

        if ((getType().equals("Maxiletter"))
            && (weight <= 50)
            && country.equals("Other foreign countries")) {
            return 19.00;
        }

        if ((getType().equals("Maxiletter"))
            && (weight <= 100)
            && country.equals("Other foreign countries")) {
            return 27.00;
        }

        if ((getType().equals("Maxiletter"))
            && (weight <= 250)
            && country.equals("Other foreign countries")) {
            return 41.00;
        }

        if ((getType().equals("Maxiletter"))
            && (weight <= 500)
            && country.equals("Other foreign countries")) {
            return 61.00;
        }

        if ((getType().equals("Maxiletter"))
            && (weight <= 1000)
            && country.equals("Other foreign countries")) {
            return 105.00;
        }

        if ((getType().equals("Maxiletter"))
            && (weight <= 2000)
            && country.equals("Other foreign countries")) {
            return 175.00;
        } else {
            return -1.0;
        }
    }
    public static void main(String[] args) {
        Category brev = new Category(25,10,200,1,"Denmark");
        System.out.println(brev.calculatePostage());
    }
}
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