2022-05-12, 14:24
  #1
Medlem
Jag försöker skapa två klasser för att skriva ut en fraktsedel. Men i mitt testprogram får jag bara inte till det, jag får ut den första klassen med personlig information såsom leveransadress och såvidare men artikelnummrerna klurar till det för mig. Någon som vet vad jag gör för fel?
1: klass (Order)
Kod:
import java.util.ArrayList;
public class 
Order
{
  private 
int orderID;
  private 
String orderDate;
  private 
String customerID;
  private 
String deliveryAddress;
  private 
ArrayList<OrderLineorderList = new ArrayList<OrderLine>();

 public 
Order (int orderIDString orderDateString customerIDString deliveryAddress)
 {
   
this.orderID orderID;
   
this.orderDate orderDate;
   
this.customerID customerID;
   
this.deliveryAddress deliveryAddress;
   
orderList = new ArrayList<OrderLine>();
 }
   public 
int getOrderID () {return orderID;}
   
   public 
String getOrderDate () {return orderDate;}
   
   public 
String getCustomerID () {return customerID;}
   
   public 
String getDeliveryAddress () {return deliveryAddress;}


  public 
void addOrderLine (int articleIDint quantitydouble pricePerPiecedouble taxRate)
  {
     
OrderLine orderLine = (articleIDquantitypricePerPiecetaxRate);
     
     
orderList.add (new OrderLine(articleIDquantitypricePerPiecetaxRate));
  }
 
    public 
double getTotalPrice()
    {
       
double sum 0;
       for (
OrderLine line:orderList)
       
       
sum += line.pricePerPiece*line.quantity;
       return 
sum;
    }
}
2klassen (OrderLine)
public class 
OrderLine
{
  
int articleID;
  
int quantity;
  
double pricePerPiece;
  
double taxRate;

 public 
OrderLine (int articleIDint quantitydouble pricePerPiecedouble raxRate)
 {
    
this.articleID articleID;
    
this.quantity quantity
    
this.pricePerPiece pricePerPiece;
    
this.taxRate taxRate;
 }
 public 
int getArticleID () { return articleID; }
 
 public 
int getQuantity () { return quantity; }
 
 public 
double getPricePerPiece () { return pricePerPiece; }
 
 public 
double getTaxRate () { return taxRate; }
 
 public 
double getTotalPrice() { return pricePerPiece quantity; }

}
TEST programmet:
public class 
OrderTest
{
  public static 
void main (String[]args)
  {
  
int onr 123456;
  
String odate "2018-05-02";
  
String custID "654321";
  
String delAddress = (("Alfred Musterkund2")+("\nExempelväg 1a")+("\nExempelstad 98765"));

  
Order order1 = new Order (onrodatecustIDdelAddress);

  
System.out.println(("Order nr: ")+order1.getOrderID());
  
System.out.println(("Datum: ")+order1.getOrderDate());
  
System.out.println(("Kund nr: ")+order1.getCustomerID());
  
System.out.println(("\n")+order1.getDeliveryAddress());

  
System.out.println ();

  
order1.addOrderLine(123411500.025.0);
  
order1.addOrderLine(234531500.025.0);
  
order1.addOrderLine(34561180.025.0);

  
order1.getOrderLine();  

  
System.out.println(order1.getArticleID ());
  
System.out.println(order1.getQuantity ());
  
System.out.println(order1.getPricePerPiece ());
  
System.out.println(order1.getTaxRate ());

  
System.out.println(order1.getTotalPrice ());
   }

__________________
Senast redigerad av Proton 2022-05-12 kl. 16:38.
Citera
2022-05-12, 14:53
  #2
Medlem
System.out.println ();

order1.addOrderLine(1234, 1, 1500.0, 25.0);
order1.addOrderLine(2345, 3, 1500.0, 25.0);
order1.addOrderLine(3456, 1, 180.0, 25.0);

order1.getOrderLine();

System.out.println(order1.getArticleID ());
System.out.println(order1.getQuantity ());
System.out.println(order1.getPricePerPiece ());
System.out.println(order1.getTaxRate ());

System.out.println(order1.getTotalPrice ());
}

Vart definierar du denna metod?
Citera
2022-05-12, 15:16
  #3
Medlem
Jag har försökt anropa klassen OrderLine, men jag förstår inte hur jag får artikelsedeln utskriven med add metoden. Jag är helt vilsen
Citera
2022-05-12, 15:34
  #4
Medlem
Nu är jag ingen mästare på Java, långt i från. Men jag tror inte du kan "kalla" på en klass. Först måste du instansiera klassen om du vill komma åt dess metoder. Precis som du gjort ovanför :

Order order1 = new Order (onr, odate, custID, delAddress);

System.out.println(("Order nr: ")+order1.getOrderID());
System.out.println(("Datum: ")+order1.getOrderDate());
System.out.println(("Kund nr: ")+order1.getCustomerID());
System.out.println(("\n")+order1.getDeliveryAddres s());


System.out.println(order1.getArticleID ());
System.out.println(order1.getQuantity ());
System.out.println(order1.getPricePerPiece ());
System.out.println(order1.getTaxRate ());


Här försöker du kalla på klassen OrderLines metoder, men du använder order1 vilket är ett instansierat objekt av klassen Order.

public void addOrderLine (int articleID, int quantity, double pricePerPiece, double taxRate)
{
OrderLine orderLine = (articleID, quantity, pricePerPiece, taxRate);

orderList.add (new OrderLine(articleID, quantity, pricePerPiece, taxRate));
}


Det ser ut som att denna metod ligger i klassen order? Den borde väl ändå höra hemma i klassen OrderLine?
Citera
2022-05-12, 16:03
  #5
Medlem
Telepatisks avatar
Jag skriver inte detta för att vara dryg, men snälla använd CODE och indentering. Tror inte att du kommer att få någon hjälp annars.
Kod:
int main()
{
    return 0;
}
Citera
2022-05-12, 16:41
  #6
Moderator
Protons avatar
Raden
Kod:
public void addOrderLine (int articleIDint quantitydouble pricePerPiecedouble taxRate)
  {
     
OrderLine orderLine = (articleIDquantitypricePerPiecetaxRate);
     
     
orderList.add (new OrderLine(articleIDquantitypricePerPiecetaxRate));
  } 
Ser skitkonstig ut.

Vad gör
Kod:
OrderLine orderLine = (articleIDquantitypricePerPiecetaxRate); 
där?

Det du behöver göra i denna metod är att ta emot dina variabler och sedan proppa in dem i din lista.

Kod:
public void addOrderLine (int articleIDint quantitydouble pricePerPiecedouble taxRate)
  {     
     
orderList.add (new OrderLine(articleIDquantitypricePerPiecetaxRate));
  } 
Citera
2022-05-17, 08:29
  #7
Medlem
Jag är inge java-programmerare men tycker mig se något.

En order har en eller flera orderrader. (kan det vara ingen?)
Du vill skriva ut alla orderraderna.
Då behöver du kunna skriva ut första orderraden, nästa orderrad, och så vidare, till sista orderraden.

Det låter som ett typiskt jobb för en iterator.
- hitta första
- hitta nästa

Alternativt behöver order ha två funktioner:
- getAntalOrderRader
- hämtaOrderradNr(nr, ... )
Citera
2023-06-14, 01:52
  #8
Medlem
yoyoyolos avatar
Du håller inte isär vad som är en Order och vad som är en OrderLine.
  • Till att börja med finns inte metoden "getOrderLine". Jag undrar också vad en metod med det namnet, utan några parametrar, skulle ha för syfte. En order har flera orderrader. En orderrad är redan en orderrad.
  • I det näst sista stycket försöker du använda metoder på ditt orderobjekt som om det vore en orderrad. articleId, quantity, pricePerPiece osv. är fält på orderradrar.

Om du vill testa att printa resultatet på metoderna getArticleId med flera behöver du ett orderradobjekt att göra det på. Testa att initiera en OrderLine-variabel som du både kan ge som argument till Order.addOrderLine order och som du kan testa ex getArticleId på.

ex:
...
OrderLine orderLine0 = new OrderLine(5,2,1.3,4.5);
order1.addOrderLine(orderLine0);
System.out.println(orderLine0.getArticleId());
...

Försök allmänt att tänka på vad dina objekt representerar. Bra med exempel som det här där det finns en tydlig motsvarighet i verkligheten. Rita upp små scheman över din kod. Och som Telepatisk skrev, snygga upp din kod och presentera om möjligt ett mer begränsat exempel, dels av respekt för de som hjälper dig, dels för att det genuint blir hundra gånger enklare för dig själv.
Citera

Skapa ett konto eller logga in för att kommentera

Du måste vara medlem för att kunna kommentera

Skapa ett konto

Det är enkelt att registrera ett nytt konto

Bli medlem

Logga in

Har du redan ett konto? Logga in här

Logga in