Avatar billede henni80 Nybegynder
21. februar 2003 - 01:00 Der er 10 kommentarer og
1 løsning

Opdeling af klasse?

Hej eksperter

Jeg sidder med følgende kode, og mit spg. er så - er det muligt at dele dette program op i to klasse (et client program og et test program)?

Og hvis det er muligt hvordan gør man???

---------------------------------------------------------

/*
* PriceCalculations.java
*
* This program is calculating the price of a given amount (kilo) of merchandise.
*/

class Merchandise {
  private static final double VAT = 20.0;
  private static final double VATfactor = 1.0 + VAT / 100.0;

  private String merchandiseName;
  private int merchandiseNo;
  private double price; // price per kilo, without VAT

  public Merchandise(String initMerchandiseName,
            int initMerchandiseNo, double initPrice) {
    merchandiseName = initMerchandiseName;
    merchandiseNo = initMerchandiseNo;
    price = initPrice;
  }

  public Merchandise(String initMerchandiseName, int initMerchandiseNo) {
    merchandiseName = initMerchandiseName;
    merchandiseNo = initMerchandiseNo;
    price = 0.0;
  }

  public double getPriceWithoutVAT(double noKilo) {
    return price * noKilo;
  }

  public double getPriceWithVAT(double noKilo) {
    return price * noKilo * VATfactor;
  }

  public void setPrice(double newPrice) {
    price = newPrice;
  }
}


class PriceCalculations {
  public static void main(String[] args) {
    final double amount = 2.5;
    final double kiloPrice1 = 7.30;
    final double kiloPrice2 = 7.90;
    Merchandise aMerchandise = new Merchandise("Brie", 123, kiloPrice1);
    double price1 = aMerchandise.getPriceWithoutVAT(amount);
    double price2 = aMerchandise.getPriceWithVAT(amount);
    System.out.println("The price per kilo without VAT: " + kiloPrice1);
    System.out.println("The price for " + amount + " kilos is " + price1 + " without VAT");
    System.out.println("The price for " + amount + " kilos is " + price2 + " with VAT");

    aMerchandise.setPrice(kiloPrice2);
    System.out.println("New price per kilo without VAT: " + kiloPrice2);
    System.out.println("The price for " + amount + " kilos is "
        + aMerchandise.getPriceWithoutVAT(amount) + " without VAT");
    System.out.println("The price for " + amount + " kilos is "
        + aMerchandise.getPriceWithVAT(amount) + " with VAT");
  }
}

/* Example Run:
The price per kilo without VAT: 7.3
The price for 2.5 kilos is 18.25 without VAT
The price for 2.5 kilos is 21.9 with VAT
New price per kilo without VAT: 7.9
The price for 2.5 kilos is 19.75 without VAT
The price for 2.5 kilos is 23.7 with VAT
*/
Avatar billede bearhugx Nybegynder
21. februar 2003 - 01:04 #1
det er da allerede delt op i to klasser
  Merchandise.class og
  PriceCalculations.class

Hvad er det specifikt du vil have delt op ???
Avatar billede henni80 Nybegynder
21. februar 2003 - 01:06 #2
ok - sårn at de to klasser ligger i to filer
Avatar billede bearhugx Nybegynder
21. februar 2003 - 01:08 #3
Det kan du udenmærkt gøre pt.
Lav en fil, som hedder Merchandise.java - og put source-coden  i den... og lave en fil, som hedder PriceCalculations.java og put PriceCalculations klassekoden deri ...

Der er intet til hinder for det pt :-) (og det er bedre at have hver klasse i hver deres fil
Avatar billede henni80 Nybegynder
21. februar 2003 - 01:09 #4
har selv fundet ud af det...
Avatar billede henni80 Nybegynder
21. februar 2003 - 01:09 #5
ok du får point - tak for svar
Avatar billede bearhugx Nybegynder
21. februar 2003 - 01:12 #6
^svar^
Avatar billede henni80 Nybegynder
21. februar 2003 - 01:13 #7
Det ser nu således ud. Men må jeg så lige spørge dig om noget andet? Det skal lige siges at jeg er total newbie mht. java.

Jeg har fået at vide at der "pæn kode" at skrive således:

public static void main(String[] args) {
PriceCalculations ny = new PriceCalculations();
}

Kan du fortælle mig hvorfor og hvorfor er det egentlig at jeg skriver "ny" lige før = hvad betyder det helt præcis?


-----------------------------------------------------------------------------



class Merchandise {
    private static final double VAT = 20.0;
    private static final double VATfactor = 1.0 + VAT / 100.0;
   
    private String merchandiseName;
    private int merchandiseNo;
    private double price;
   
    public Merchandise(String initMerchandiseName, int initMerchandiseNo, double initPrice){
        merchandiseName = initMerchandiseName;
        merchandiseNo  = initMerchandiseNo;
        price = initPrice;
    }
   
    public Merchandise(String initMerchandiseName, int initMerchandiseNo){
        merchandiseName = initMerchandiseName;
        merchandiseNo  = initMerchandiseNo;
        price = 0.0;
    }

    public double getPriceWithoutVAT(double noKilo){
        return price * noKilo;
    }
   
    public double getPriceWithVAT(double noKilo){
        return price * noKilo * VATfactor;
    }
   
    public void setPrice(double newPrice){
        price = newPrice;
    }       

}

public class PriceCalculations {
    public PriceCalculations(){
   
    final double amount    = 2.5;
    final double kiloPrice1 = 7.30;
    final double kiloPrice2 = 7.90;
   
    Merchandise aMerchandise = new Merchandise("Brie", 123, kiloPrice1);
    double price1 = aMerchandise.getPriceWithoutVAT(amount);
    double price2 = aMerchandise.getPriceWithVAT(amount);
   
    System.out.println("The price per kilo without VAT: " + kiloPrice2);
    System.out.println("The price for " + amount + "kilo is " + price1 + "without VAT");
    System.out.println("The price for " + amount + "kilo is " + price2 + "with VAT");
   
    aMerchandise.setPrice(kiloPrice2);
    System.out.println("New price per kilowithout VAT: " + kiloPrice2);
    System.out.println("The price for " + amount + "kilo is" + aMerchandise.getPriceWithoutVAT(amount) + "without VAT");
    System.out.println("The price for " + amount +"kilos is" + aMerchandise.getPriceWithVAT(amount) + "with VAT");
    }


    public static void main(String[] args) {
    PriceCalculations ny = new PriceCalculations();}
}
Avatar billede bearhugx Nybegynder
21. februar 2003 - 01:24 #8
lad os gennemgå udtrykket ord for ord....
  PriceCalculations ny = new PriceCalculations();

Udtrykket består af to dele, som er opdelt af et lighedstegn... Dette betyder at den venstre udtryk antager værdien af det højre udtryk :
PriceCalculations ny      bliver lig med    new PriceCalculations();

Det venstre udtryk
  PriceCalculations ny
betyder at vi opretter en ny variabel, af typen "PriceCalculations", som hedder "ny"

Det højre udtryk
  new PriceCalculations();
betyder at der bliver oprettet (og instatieret) et nyt (new) objekt af typen "PriceCalculations" og at der ikke sendes nogle argumenter afsted til objektets konstruktør () [der står ikke noget mellem paranteserne...]

Derfor læses udtrykket
  PriceCalculations ny = new PriceCalculations();
således :

Der oprettes en ny variabel, af typen "PriceCalculations", som hedder "ny" - og denne sættes til at pege på et nyt instantieret objekt af typen "PriceCalculations".

Håber det giver mening...
Avatar billede henni80 Nybegynder
21. februar 2003 - 01:33 #9
takker for kommentaren og jo jeg tror det gav mening :)
Avatar billede henni80 Nybegynder
21. februar 2003 - 01:35 #10
men...måske et dumt spørgsmål hvorfor oprette en ny variabel (ny) når man ikke bruger den senere i programmet?
Avatar billede bearhugx Nybegynder
21. februar 2003 - 01:46 #11
Hvis du ikke har tænkt dig at bruge "ny" til noget, så er det helt lovligt at skrive
  public static void main(String[] args) {
    new PriceCalculations();
  }
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
Kategori
Kurser inden for grundlæggende programmering

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