Skrevet søn. d. 08. juni 2003 kl. 21:30:57| #1
Skrevet søn. d. 08. juni 2003 kl. 21:32:52| #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.
Skrevet søn. d. 08. juni 2003 kl. 21:35:02| #3
Jeg er ikke helt inde i det, men vil gerne vide lidt mere
Skrevet søn. d. 08. juni 2003 kl. 21:35:46| #4
Prøv og kig på det kode eksempel jeg refererede til først.
Skrevet søn. d. 08. juni 2003 kl. 21:51:01| #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?
Skrevet søn. d. 08. juni 2003 kl. 21:54:37| #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.
Skrevet søn. d. 08. juni 2003 kl. 21:59:37| #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?
Skrevet søn. d. 08. juni 2003 kl. 22:06:45| #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.
Skrevet søn. d. 08. juni 2003 kl. 22:11:05| #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?
Skrevet søn. d. 08. juni 2003 kl. 22:15:31| #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.
Skrevet søn. d. 08. juni 2003 kl. 22:23:37| #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?
Skrevet søn. d. 08. juni 2003 kl. 22:49:45| #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) {
}
}
Skrevet søn. d. 08. juni 2003 kl. 23:02:55| #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.
Skrevet søn. d. 08. juni 2003 kl. 23:07:01| #14
Skrevet man. d. 09. juni 2003 kl. 10:43:12| #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;
}
Skrevet man. d. 09. juni 2003 kl. 10:51:14| #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.
Skrevet man. d. 09. juni 2003 kl. 11:02:54| #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?
Skrevet man. d. 09. juni 2003 kl. 11:28:56| #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?
Skrevet man. d. 09. juni 2003 kl. 12:41:31| #19
Porto beregning er oplagt en metode og ikke en klasse.
Skrevet man. d. 09. juni 2003 kl. 12:42:59| #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å.
Skrevet man. d. 09. juni 2003 kl. 12:49:40| #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.
Skrevet man. d. 09. juni 2003 kl. 12:52:57| #22
Næ jeg forestillede mig noget så simpelt som:
public String getType() {
if(...) {
return "Standard";
} else if(...) {
return "Stor";
} else {
return "Maxi";
}
}
Skrevet man. d. 09. juni 2003 kl. 12:58:13| #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:)
Skrevet man. d. 09. juni 2003 kl. 13:02:05| #24
Og så er der også porto beregningen !
:-)
Skrevet man. d. 09. juni 2003 kl. 13:09:08| #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?
Skrevet man. d. 09. juni 2003 kl. 13:20:47| #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?
Skrevet man. d. 09. juni 2003 kl. 13:30:07| #27
Det oversætter ikke !
Jeg vil anbefale dig løbende at oversætte så du ikke får for mange fejl.
Skrevet man. d. 09. juni 2003 kl. 13:30:22| #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";
}
}
}
Skrevet man. d. 09. juni 2003 kl. 13:39:44| #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.*/
}
Skrevet man. d. 09. juni 2003 kl. 13:42:30| #30
Du mangler parentser omkring hele if udtrykker - det er:
if ( (...) && (...) && (...) ) {
Skrevet man. d. 09. juni 2003 kl. 13:52:07| #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?
Skrevet man. d. 09. juni 2003 kl. 14:13:04| #32
"ikke oversætter" = "fejl ved oversættelse"
Skrevet man. d. 09. juni 2003 kl. 14:13:59| #33
Nu mangler der vist en "{" mellem "getTtype()" og "if".
Skrevet man. d. 09. juni 2003 kl. 14:20:54| #34
ok, Nu får jeg denne fejlmeddelse : Illegal start of expression
else if((l <= 60>) && (l + w + t <= 90) && (we <= 2000))
Skrevet man. d. 09. juni 2003 kl. 14:25:10| #35
Der er en ">" for meget efter 60.
Skrevet man. d. 09. juni 2003 kl. 14:31:29| #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;
Skrevet man. d. 09. juni 2003 kl. 14:31:51| #37
Er det fordi jeg ikke har country med i If else?
Skrevet man. d. 09. juni 2003 kl. 14:40:47| #38
Nej du har stavet string med lille s (det er String med stort S).
Skrevet man. d. 09. juni 2003 kl. 14:46:17| #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;
}
Skrevet man. d. 09. juni 2003 kl. 14:47:45| #40
Er c i argument-listen til constructoren ?
Skrevet man. d. 09. juni 2003 kl. 14:53:02| #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;
Skrevet man. d. 09. juni 2003 kl. 15:00:31| #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)
Skrevet man. d. 09. juni 2003 kl. 15:02:20| #43
Nej det kan jeg godt se nu. :)
Skrevet man. d. 09. juni 2003 kl. 15:04:37| #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
Skrevet man. d. 09. juni 2003 kl. 15:06:21| #45
Nej.
Det er ikke et krav at man skal bruge variable til noget.
Skrevet man. d. 09. juni 2003 kl. 15:12:18| #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? :(
Skrevet man. d. 09. juni 2003 kl. 16:00:42| #47
Hvorfor vil den ikke compile når jeg har lavet forkortelser?
Skrevet man. d. 09. juni 2003 kl. 17:29:31| #48
Du skal bruge length som er navnet på instans varieblen ikke l som er
navnet på argumentet i constructoren.
Skrevet man. d. 09. juni 2003 kl. 18:53:56| #49
Der forstår jeg ikke helt hvad forskellen er?
Skrevet man. d. 09. juni 2003 kl. 19:11:34| #50
Argumentet til constructoren kan kun bruges i selve constructoren.
Instans variablen kan bruges i alle metoder.
Skrevet man. d. 09. juni 2003 kl. 19:16:33| #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?
Skrevet man. d. 09. juni 2003 kl. 19:19:03| #52
Ja - du laver bare en ny metode calculatePorto nedenunder
getType metoden.
Skrevet man. d. 09. juni 2003 kl. 19:23:32| #53
ok kan jeg så også bruge if-else metoden her eller skal der noget mere avanceret til?
Skrevet man. d. 09. juni 2003 kl. 19:25:29| #54
Jeg tror den er umulig at lave uden if else.
Skrevet man. d. 09. juni 2003 kl. 19:27:11| #55
ok, jeg prøver at se hvad jeg kan gøre ved den.
Skrevet man. d. 09. juni 2003 kl. 19:29:39| #56
Er der andre muligheder end if-else som stadigvæk er simple og forholdsvis nemme at forstå?
Skrevet man. d. 09. juni 2003 kl. 19:32:14| #57
Ikke nogen som er relevant til problem-stillingen.
Skrevet man. d. 09. juni 2003 kl. 19:33:49| #58
Ok tak, jeg kigger på det og håber jeg kan få det til at lykkes:)
Skrevet man. d. 09. juni 2003 kl. 19:43:59| #59
Skulle country ikke også være nævnt et eller andet sted i opgaven ligesom brevetyperne er?
Skrevet man. d. 09. juni 2003 kl. 19:46:54| #60
Ikke forstået.
Du gemmer conutry i constructor og kan bruge den i porto beregning.
Skrevet man. d. 09. juni 2003 kl. 19:52:56| #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:(
Skrevet man. d. 09. juni 2003 kl. 19:56:24| #62
vægt og country er instans variable
brev type kan du beregne med getType
altså har du alt det du skal bruge !
Skrevet man. d. 09. juni 2003 kl. 19:59:35| #63
ok jeg prøver og ser hvad jeg kan få ud af det. Atter engang tak.
Skrevet man. d. 09. juni 2003 kl. 20:12:31| #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
}
Skrevet man. d. 09. juni 2003 kl. 20:14:55| #65
Jeg ville nok lave det som:
public double calculatePostage() {
if ((weight <= 50) && country.equals("Denmark")) {
return 4.25;
}
return -1.0;
}
Skrevet man. d. 09. juni 2003 kl. 20:17:53| #66
Hvorfor return -1.0; Og hvad med brevtypen
Skrevet man. d. 09. juni 2003 kl. 20:21:35| #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 !
Skrevet man. d. 09. juni 2003 kl. 20:25:04| #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?
Skrevet man. d. 09. juni 2003 kl. 20:33:07| #69
kan jeg godt køre if hele vejen ned for først til sidst at skrive else { return no letter}?
Skrevet man. d. 09. juni 2003 kl. 20:50:29| #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;
}
Skrevet man. d. 09. juni 2003 kl. 20:52:38| #71
Det lyder som om det står uden for en metode.
Skrevet man. d. 09. juni 2003 kl. 20:58:04| #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,
Skrevet man. d. 09. juni 2003 kl. 21:00:55| #73
Prøv lige og post hele koden.
Skrevet man. d. 09. juni 2003 kl. 21:06:04| #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;
}
Skrevet man. d. 09. juni 2003 kl. 21:08:29| #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;
}
Skrevet man. d. 09. juni 2003 kl. 21:26:12| #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?
Skrevet man. d. 09. juni 2003 kl. 21:28:58| #77
Prøv lige og post hele koden.
Skrevet man. d. 09. juni 2003 kl. 21:30:39| #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;
}
Skrevet man. d. 09. juni 2003 kl. 21:33:20| #79
Der er igen:
return -1.0;
}
for meget !
Fjern den første.
Skrevet man. d. 09. juni 2003 kl. 21:35:52| #80
Skrevet man. d. 09. juni 2003 kl. 22:29:41| #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
Skrevet man. d. 09. juni 2003 kl. 22:34:28| #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.
Skrevet man. d. 09. juni 2003 kl. 22:36:37| #83
Jeg har selv rettet fejlen det var i instance variables jeg havde lavet fejlen puha
Skrevet man. d. 09. juni 2003 kl. 22:38:07| #84
Kender du slet ikke noget til Blue J???
Skrevet man. d. 09. juni 2003 kl. 22:39:51| #85
Ikke spor.
Jeg bruger JBuilder, Eclipse m.v. til min Java programmering.
Skrevet man. d. 09. juni 2003 kl. 22:41:15| #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.
Skrevet man. d. 09. juni 2003 kl. 22:46:32| #87
Skrevet man. d. 09. juni 2003 kl. 22:47:54| #88
Efter portoen er beregnet?
Skrevet man. d. 09. juni 2003 kl. 22:50:43| #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.
Skrevet man. d. 09. juni 2003 kl. 22:54:17| #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?
Skrevet man. d. 09. juni 2003 kl. 23:40:46| #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:)
Skrevet tir. d. 10. juni 2003 kl. 07:00:58| #92
Skrevet tir. d. 10. juni 2003 kl. 07:03:53| #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());
}
}