10. juni 2003 - 00:35
Der er
78 kommentarer og 1 løsning
Depserat brug for hjælp til opgave
Jeg har lavet et program der skal udskrive porto ud fra vægt og destination. Men nu er mit problem at når jeg vælger getType i BlueJ så viser den mig følgende Method result= -1.0
Annonceindlæg fra DE-CIX
Ok her kommer hele koden og tusind tak. 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;} } }
Jeg ved godt der står return -1.0 men ellers ville den ikke kompile
det er som den ikke "fanger" brev-typen i dine if-else sætninger og derfor returnerer -1. Prøv evt at tjekke for "not a letter"...
det vil den ikke godtage fordi jeg har skrevet public double calculatePostage
Jeg skal også lave et UML diagram vil det sige at jeg SKAL have 2 klasser?
det jeg mener er, at dit brev ikke "går i" nogle af if-statements..og derfor returnerer metoden -1.0 du tjekker for alt andet end "not a letter". Prøv at tjekke for denne type brev og se om det er problemet.
det behøver du ikke, men det giver (og viser) et godt overblik
forresten...en god metode til fejlfinding er at smide "sytem.out.println(hej er jeg med værdi: XX)" i dine if-statements. Så kan du lettere bestemme, hvor det går galt
10. juni 2003 - 01:04
#10
Jeg er ikke helt sikker på hvad du mener med at jeg skal prøve at tjekke for "not a letter", men jeg kan godt få den til at vise not a letter selvfølgelig også med return -1.0 Hvad mener du der er galt med mine if-statements?
10. juni 2003 - 01:06
#11
nu er jeg ikke helt inde i blueJ, men hvor hæfter du type-betegnelsen på dit brev, så den rent faktisk går ind i een af dine statements?
10. juni 2003 - 01:08
#12
Jeg er ikke lige helt med på hvad du mener?
10. juni 2003 - 01:09
#13
Jeg er totalt nybegynder:)
10. juni 2003 - 01:14
#14
min fejl...så ikke lige ordentligt efter i koden.. 1. du behøver vel ikke at tjekke for vægt igen efter at have sat type på brevet. 2. brug else-if i stedet for ene if-sætninger. Den skal jo kun returnere eet beløb - enten eller
10. juni 2003 - 01:15
#15
ok, hvordan skal de så skrives ind. Skal der stå else efter hvert eneste beløb jeg skrevet i calculatorPostage så? Eller hvordan skal det skrives?
10. juni 2003 - 01:17
#16
if(statement) { return x; } else if(statement){ return y; } else { return -1.0; }
10. juni 2003 - 01:18
#17
Du har et mellemrum før Largeletter { return " Largeletter"; } Jeg ved ikke om det har noget at sige......
10. juni 2003 - 01:18
#18
Har lige testet din kode med "Largeletter" og den virker....
10. juni 2003 - 01:19
#19
jo, hvis det samme mellemrum ikke er i dit tjek længere nede...det skal være nøjagtigt samme streng
10. juni 2003 - 01:20
#20
Ja, der er nogen af dem der virker, men ikke alle sammen og de er copy pasted så de skulle gerne være 100% ens
10. juni 2003 - 01:23
#21
&& country.equals("Europ, The Faroes Island and Greenland")) && country.equals("Europe, The Faroes Island and Greenland")) Du skal nok lige tjekke alle dine strenge..... :)
10. juni 2003 - 01:23
#22
Jeg har selv lige prøvet largeletter igen og når jeg vil have den til at vise prisen kommer den med double result = -1.0 istedet for prisen. Kunne du godt få den til at vise prisen?
10. juni 2003 - 01:25
#23
Jeg smed nogle tilfældige tal ind: public class MainBrev { public static void main(String[] args) { Category cat = new Category(10,10,100,2, "Denmark"); System.out.println(cat.getType()); System.out.println(cat.calculatePostage()); } }
10. juni 2003 - 01:27
#24
Tak skal du have det havde jeg ikke set:)
10. juni 2003 - 01:27
#25
En rigtig god ting er, at initialisere sine variabler først.. Altså: private String denmark = "Denmark"; og så: country.equals(denmark); Bare et eksempel... Så er du sikker på at stringen du sammenligner med altid er korrekt.
10. juni 2003 - 01:30
#26
Og så skal du også kun rette den et sted, hvis det på et tidspunkt skal rettes...
10. juni 2003 - 01:33
#27
ok, det vidste jeg ikke, jeg er som sagt totaltnybegynder og opgaven skal afleveres til middag? Jeg har brugt jeg ved ikke hvor mange timer på den:)
10. juni 2003 - 01:36
#28
Nu virker standardbrev ihvertfald fedt:)
10. juni 2003 - 01:36
#29
Man skal jo starte et sted.. :) Held og lykke
10. juni 2003 - 01:43
#30
Tak skal du have. Nu er det kun Maxiletter der ikke virker, den skriver not a letter og method result = -1.0
10. juni 2003 - 01:47
#31
Er i der endnu?
10. juni 2003 - 01:53
#32
Er der nogen der kan fortælle mig hvordan jeg får den til at fungerer i Maxiletter og hvordan jeg får den til kun at beregne portoen ud fra vægt og land?
10. juni 2003 - 02:07
#33
else if ((length <= 60)&&(length + width + thickness <= 90)&&(weight <= 2000)) er det ikke forkert, at length + width + thickness skal være mindre end 90???
10. juni 2003 - 02:08
#34
hvad initialiserer du maxiletter med?
10. juni 2003 - 02:13
#35
Først nej i opgaven står der at leng+width+thickness max 90. Hvad mener du med initialiserer med? Alt hvad jeg har skrevet af kode står her på siden. Kan det have noget med den der else sætning at gøre jeg mener den står trods til sidst begge steder
10. juni 2003 - 02:14
#36
ok.. jeg mener, hvilke værdier sætter du på dit maxiletter..når du tester
10. juni 2003 - 02:15
#37
Jeg sætter max værdierne
10. juni 2003 - 02:15
#38
altså 60, 90, 2000?
10. juni 2003 - 02:16
#39
Har lige prøvet med andre værdier men får de samme meldinger altså not a letter og method result = -1.0
10. juni 2003 - 02:17
#40
ja
10. juni 2003 - 02:17
#41
Kan det have noget med de return sætninger at gøre?
10. juni 2003 - 02:18
#42
alle andre end maxiletter virker?
10. juni 2003 - 02:19
#43
ja så vidt jeg kan se gør de.
10. juni 2003 - 02:21
#44
Det er godt nok irritererende det her, jeg troede lige jeg næsten var færdig, med opgaven, men nej så skal det drille:)
10. juni 2003 - 02:24
#45
Har lige prøvet at tjekke nogen af dem igen og de virker godt nok så det er kun maxiletter der driller
10. juni 2003 - 02:25
#46
jeg tester det lige...
10. juni 2003 - 02:25
#47
ok tusind tak
10. juni 2003 - 02:30
#48
Jeg har lige opdaget at der også er et problem med Largeletter den kommer ud som Maxiletter
10. juni 2003 - 02:31
#49
den virker fint her public class brevMain { public static void main(String[] args) { Category cat = new Category(60,10,1500,10, "Denmark"); System.out.println(cat.getType()); System.out.println(cat.calculatePostage()); } }
10. juni 2003 - 02:31
#50
resultat: Maxiletter til 40 kroner
10. juni 2003 - 02:32
#51
sender du de rigtige værdier med?
10. juni 2003 - 02:33
#52
Ja det mener jeg at jeg gør, jeg prøver lige igen
10. juni 2003 - 02:35
#53
Jeg prøvede lige med de tal du tastede ind og de virkede fint, men hvis jeg taster max cærdierne ind så virker det ikke.
10. juni 2003 - 02:37
#54
Ok, det er mig der har taget fejl UNDSKYLD det virker fint nok nu
10. juni 2003 - 02:38
#55
Den skal jo også skrive de ting den gør når jeg trykker max værdierne ind ikke:)
10. juni 2003 - 02:38
#56
det virker fint
10. juni 2003 - 02:39
#57
Kan du så ikke forklare mig hvordan jeg får den til at beregne portoen ud fra vægten og landet? For det kan jeg simpelthen ikke se hvordan jeg skal gøre.
10. juni 2003 - 02:39
#58
lige en anden ting...du behøver ikke lave så mange if-sætninger. Du tjekker jo for de samme ting mange gange. Du kan spare mange liniers kode ved at under-gruppere lidt
10. juni 2003 - 02:40
#59
øhhh...er det ikke det, du gør?
10. juni 2003 - 02:42
#60
Hvordan kan jeg undergruppere? Det forstår jeg ikke.
10. juni 2003 - 02:42
#61
Jeg skulle jo bare fjerne width, heihgt, thickness og så er der kun weight og destination tilbage:)
10. juni 2003 - 02:43
#62
fx if(getType().equals("Denmark")) { if(weight<=50) { return XX; } else if (weight<=150) { return YY; } osv
10. juni 2003 - 02:45
#63
Er det de sidste if-sætninger du snakker om? Hvad sker der hvis jeg gør det?
10. juni 2003 - 02:46
#64
det giver bare en mere overskuelig kode, men det er nok ikke smart at lave om nu. Man kan jo let lave et par tastefejl her midt om natten ;-)
10. juni 2003 - 02:48
#65
Ja, og tro mig dem har jeg lavet mange af og det er hamrende svært at se sine egne fejl:) Bare se med portoudregningen hvor simpel den egentligt gik hen og blev af det her:)
10. juni 2003 - 02:49
#66
Må jeg godt lige spørge om 2 ting mere?
10. juni 2003 - 02:49
#67
bare spørg væk
10. juni 2003 - 02:51
#68
Tak, jeg skal lave et UML diagram og det er jeg ikke sikker på hvordan jeg gør er det noget du kan hjælpe mig med? Og så skal jeg have et BlueJ-genereret Java dokumentation (HTML) for opgavebesvarelsen kender du noget til det?
10. juni 2003 - 02:54
#69
i UML diagrammet optegner du bare dine klasser og hvordan de hænger sammen - men du har vel kun een klasse ud over din Main..
mht til JavaDoc kan du se her, hvordan det bruges
http://java.sun.com/j2se/javadoc/faq/index.html
10. juni 2003 - 02:55
#70
Jeg har kun den ene klasse som jeg har kaldt Category
10. juni 2003 - 03:00
#71
ja angiver du bare Navn, Variable og Metoder + beskrivelse af disse
10. juni 2003 - 03:01
#72
UML-Diagram Er det noget i denne retning? Category - Length: int - Width: int - Thickness: double - Weight: double - Country: string - Postage: int
10. juni 2003 - 03:04
#73
Med hensyn til HTML så må det ko være det her ikke : Class Postage java.lang.Object | +--Postage -------------------------------------------------------------------------------- public class Postage extends java.lang.Object Description of Postage here: Weight, Country and prices. Version: (June 2003) Author: -------------------------------------------------------------------------------- Constructor Summary Postage() Constructor for objects of class Postage Method Summary int sampleMethod(int y) An example of a method - replace this comment with your own Methods inherited from class
10. juni 2003 - 03:04
#74
Category: kort beskrivelse Constructor(argumenter) + kort beskrivelse Felt-variable (length, osv) Metoder: getType() + kort beskrivelse calculatePostage() + kort beskrivelse
10. juni 2003 - 03:07
#75
Okay tusind tak for hjælpen, det er rar fornemmelse når det alligevel lykkedes til allersidst:)
10. juni 2003 - 03:07
#76
var så lidt..
10. juni 2003 - 03:13
#77
Nej ikke for mige, for de har været et rent mareridt at lære det her, men nu begynder noget af det faktisk at være spændende.:)
10. juni 2003 - 03:17
#78
ja, det er sjovt at se sine egne ting fungere i computeren.... Det kan faktisk godt være en fordel at kode i en tekst-editor i starten. Det giver en god forståelse or, hvordan klasser og objekter hænger sammen
10. juni 2003 - 03:22
#79
Ja, det kan jeg godt se. Nu skal jeg så prøve at få det gemt på en diskette. (Det har jeg altså prøvet før, bare aldrig med det har mærkelige program.)
Kurser inden for grundlæggende programmering