Avatar billede 3072 Nybegynder
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
Avatar billede dash Nybegynder
10. juni 2003 - 00:41 #1
http://www.eksperten.dk/spm/361950

se det her...

eller post din kode...så vi kan se på det
Avatar billede 3072 Nybegynder
10. juni 2003 - 00:44 #2
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;}
            }
}
Avatar billede 3072 Nybegynder
10. juni 2003 - 00:45 #3
Jeg ved godt der står return -1.0 men ellers ville den ikke kompile
Avatar billede dash Nybegynder
10. juni 2003 - 00:53 #4
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"...
Avatar billede 3072 Nybegynder
10. juni 2003 - 00:57 #5
det vil den ikke godtage fordi jeg har skrevet  public double calculatePostage
Avatar billede 3072 Nybegynder
10. juni 2003 - 00:59 #6
Jeg skal også lave et UML diagram vil det sige at jeg SKAL have 2 klasser?
Avatar billede dash Nybegynder
10. juni 2003 - 01:00 #7
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.
Avatar billede dash Nybegynder
10. juni 2003 - 01:00 #8
det behøver du ikke, men det giver (og viser) et godt overblik
Avatar billede dash Nybegynder
10. juni 2003 - 01:02 #9
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
Avatar billede 3072 Nybegynder
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?
Avatar billede dash Nybegynder
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?
Avatar billede 3072 Nybegynder
10. juni 2003 - 01:08 #12
Jeg er ikke lige helt med på hvad du mener?
Avatar billede 3072 Nybegynder
10. juni 2003 - 01:09 #13
Jeg er totalt nybegynder:)
Avatar billede dash 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
Avatar billede 3072 Nybegynder
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?
Avatar billede dash Nybegynder
10. juni 2003 - 01:17 #16
if(statement) {
return x;
}
else if(statement){
return y;
}
else {
return -1.0;
}
Avatar billede mikkelbm Nybegynder
10. juni 2003 - 01:18 #17
Du har et mellemrum før Largeletter
{
      return " Largeletter";
      }

Jeg ved ikke om det har noget at sige......
Avatar billede mikkelbm Nybegynder
10. juni 2003 - 01:18 #18
Har lige testet din kode med "Largeletter"
og den virker....
Avatar billede dash Nybegynder
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
Avatar billede 3072 Nybegynder
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
Avatar billede mikkelbm Nybegynder
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..... :)
Avatar billede 3072 Nybegynder
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?
Avatar billede mikkelbm Nybegynder
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());
    }
}
Avatar billede 3072 Nybegynder
10. juni 2003 - 01:27 #24
Tak skal du have det havde jeg ikke set:)
Avatar billede mikkelbm Nybegynder
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.
Avatar billede mikkelbm Nybegynder
10. juni 2003 - 01:30 #26
Og så skal du også kun rette den et sted, hvis det på et tidspunkt skal rettes...
Avatar billede 3072 Nybegynder
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:)
Avatar billede 3072 Nybegynder
10. juni 2003 - 01:36 #28
Nu virker standardbrev ihvertfald fedt:)
Avatar billede mikkelbm Nybegynder
10. juni 2003 - 01:36 #29
Man skal jo starte et sted.. :)
Held og lykke
Avatar billede 3072 Nybegynder
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
Avatar billede 3072 Nybegynder
10. juni 2003 - 01:47 #31
Er i der endnu?
Avatar billede 3072 Nybegynder
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?
Avatar billede dash Nybegynder
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???
Avatar billede dash Nybegynder
10. juni 2003 - 02:08 #34
hvad initialiserer du maxiletter med?
Avatar billede 3072 Nybegynder
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
Avatar billede dash Nybegynder
10. juni 2003 - 02:14 #36
ok..

jeg mener, hvilke værdier sætter du på dit maxiletter..når du tester
Avatar billede 3072 Nybegynder
10. juni 2003 - 02:15 #37
Jeg sætter max værdierne
Avatar billede dash Nybegynder
10. juni 2003 - 02:15 #38
altså 60, 90, 2000?
Avatar billede 3072 Nybegynder
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
Avatar billede 3072 Nybegynder
10. juni 2003 - 02:17 #40
ja
Avatar billede 3072 Nybegynder
10. juni 2003 - 02:17 #41
Kan det have noget med de return sætninger at gøre?
Avatar billede dash Nybegynder
10. juni 2003 - 02:18 #42
alle andre end maxiletter virker?
Avatar billede 3072 Nybegynder
10. juni 2003 - 02:19 #43
ja så vidt jeg kan se gør de.
Avatar billede 3072 Nybegynder
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:)
Avatar billede 3072 Nybegynder
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
Avatar billede dash Nybegynder
10. juni 2003 - 02:25 #46
jeg tester det lige...
Avatar billede 3072 Nybegynder
10. juni 2003 - 02:25 #47
ok tusind tak
Avatar billede 3072 Nybegynder
10. juni 2003 - 02:30 #48
Jeg har lige opdaget at der også er et problem med Largeletter den kommer ud som Maxiletter
Avatar billede dash Nybegynder
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());
    }
}
Avatar billede dash Nybegynder
10. juni 2003 - 02:31 #50
resultat: Maxiletter til 40 kroner
Avatar billede dash Nybegynder
10. juni 2003 - 02:32 #51
sender du de rigtige værdier med?
Avatar billede 3072 Nybegynder
10. juni 2003 - 02:33 #52
Ja det mener jeg at jeg gør, jeg prøver lige igen
Avatar billede 3072 Nybegynder
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.
Avatar billede 3072 Nybegynder
10. juni 2003 - 02:37 #54
Ok, det er mig der har taget fejl UNDSKYLD det virker fint nok nu
Avatar billede 3072 Nybegynder
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:)
Avatar billede dash Nybegynder
10. juni 2003 - 02:38 #56
det virker fint
Avatar billede 3072 Nybegynder
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.
Avatar billede dash Nybegynder
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
Avatar billede dash Nybegynder
10. juni 2003 - 02:40 #59
øhhh...er det ikke det, du gør?
Avatar billede 3072 Nybegynder
10. juni 2003 - 02:42 #60
Hvordan kan jeg undergruppere? Det forstår jeg ikke.
Avatar billede 3072 Nybegynder
10. juni 2003 - 02:42 #61
Jeg skulle jo bare fjerne width, heihgt, thickness og så er der kun weight og destination tilbage:)
Avatar billede dash Nybegynder
10. juni 2003 - 02:43 #62
fx

if(getType().equals("Denmark")) {
    if(weight<=50) {
        return XX;
    }
    else if (weight<=150) {
        return YY;
    }
osv
Avatar billede 3072 Nybegynder
10. juni 2003 - 02:45 #63
Er det de sidste if-sætninger du snakker om?

Hvad sker der hvis jeg gør det?
Avatar billede dash Nybegynder
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 ;-)
Avatar billede 3072 Nybegynder
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:)
Avatar billede 3072 Nybegynder
10. juni 2003 - 02:49 #66
Må jeg godt lige spørge om 2 ting mere?
Avatar billede dash Nybegynder
10. juni 2003 - 02:49 #67
bare spørg væk
Avatar billede 3072 Nybegynder
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?
Avatar billede dash Nybegynder
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
Avatar billede 3072 Nybegynder
10. juni 2003 - 02:55 #70
Jeg har kun den ene klasse som jeg har kaldt Category
Avatar billede dash Nybegynder
10. juni 2003 - 03:00 #71
ja angiver du bare Navn, Variable og Metoder + beskrivelse af disse
Avatar billede 3072 Nybegynder
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
Avatar billede 3072 Nybegynder
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
Avatar billede dash Nybegynder
10. juni 2003 - 03:04 #74
Category: kort beskrivelse
Constructor(argumenter) + kort beskrivelse
Felt-variable (length, osv)
Metoder:
getType() + kort beskrivelse
calculatePostage() + kort beskrivelse
Avatar billede 3072 Nybegynder
10. juni 2003 - 03:07 #75
Okay tusind tak for hjælpen, det er rar fornemmelse når det alligevel lykkedes til allersidst:)
Avatar billede dash Nybegynder
10. juni 2003 - 03:07 #76
var så lidt..
Avatar billede 3072 Nybegynder
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.:)
Avatar billede dash Nybegynder
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
Avatar billede 3072 Nybegynder
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.)
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