我没有得到我的Java应用程序的预期输出

时间:2017-10-19 07:30:26

标签: java oop

我有5个班级,其中4个按预期工作。 我是一个绝对的java初学者,我希望有人可以帮助我。 它是一个小应用程序来发出订单和捆绑订单。 我的问题是类bundleItem。 我期望获得所有项目的价值并添加折扣,但我总是得到负的回报值。

这是我的课程

班级订单

package testateins;

import java.util.ArrayList;

public class Order {
    private ArrayList<Item> allOrders;  
    public Order(){
        this.allOrders = new  ArrayList<Item>();
    }


    public void addItem(Item item) {
        this.allOrders.add(item);
    }

    public void removeItem(Item item) {
        this.allOrders.remove(item);
    }

    public double getTotalprice(){  
        double totalprice = 0;
        for(Item element : allOrders) {
            totalprice += element.getPrice();
        }
        return totalprice;

    }

    public void printItems() {
        for(Item element : allOrders) {
            element.print();
        }
    }

}

班级项目

package testateins;

public abstract class Item{
    String description;
    double price;
    public Item(String description) {
        this.description = description;

    }

    public abstract double getPrice();

    public void setItem() {

    }

    public void print() {
        System.out.println("Beschreibung " + description);      
        }


}

class ProductItem

package testateins;

public class ProductItem extends Item{
    public double pricePerUnit;
    public double amount;
    public double price;

    public ProductItem(String description, int pricePerUnit, int amount) {
    super(description); 
    this.pricePerUnit = pricePerUnit;
    this.amount = amount;   
    this.price = amount * pricePerUnit;     

    }

    public void print() {
        System.out.println("Beschreibung " + description);
        System.out.println("menge " + amount);      
        System.out.println("Preis pro Einheit " + pricePerUnit);    
        System.out.println("Gesammtpreis " + price);    
        }

    public double getPrice() {
        return this.price;  
    }
}

类ServiceItem

package testateins;

public class ServiceItem extends Item{
        public double price;
        public ServiceItem(String description, Integer packageprice) {
        super(description); 
        this.price = packageprice;
    }   

        public void print() {
            System.out.println("Beschreibung " + description);
            System.out.println("Servicepreis " + price);        
            }

        public double getPrice() {
            return this.price;  
        }

}

class BundleItem(my problemclass)

package testateins;

import java.util.ArrayList;

public class BundleItem extends Item {

    private double rabatt;
    private ArrayList<Item> allOrders;

    public BundleItem(String description, double rabatt) {
        super(description);
        this.allOrders = new ArrayList<Item>();
        setrabatt(rabatt);
    }
    public void setrabatt(double rabatt) {
        this.rabatt = rabatt;
    }
    public double getrabatt() {
        return this.rabatt;
    }
    public void addItem(Item item) {
        if(item instanceof ProductItem || item instanceof ServiceItem) {
            this.allOrders.add(item);
        }
    }
    @Override
    public double getPrice() {
        double result = 0;
        double sum = 0;
        double discount = (rabatt/100);
        for(Item element : allOrders) {
            result+=element.getPrice();         
        }
        return sum - (result * discount);
    }

    public void print() {
        super.print();
        System.out.println(rabatt);
        for(Item element: allOrders) {
            element.print();

        }
    }
}

和我的测试类返回负折扣,重要的部分是&#34;第2部分&#34;

package testateins;


public class Testing {

    public static void main(String[] args) {



        ServiceItem wischen = new ServiceItem("wischen", 20);
        System.out.println(wischen.description);
        System.out.println(wischen.price);
        System.out.println("___________________________");

        ProductItem kuchen = new ProductItem("kuchen", 3, 15);      
        System.out.println(kuchen.description);
        System.out.println(kuchen.amount);
        System.out.println(kuchen.pricePerUnit);
        System.out.println(kuchen.price);       
        System.out.println("___________________________");

        Order simpleOrder = new Order();
        simpleOrder.addItem(wischen);
        simpleOrder.addItem(kuchen);
        simpleOrder.addItem(kuchen);

        simpleOrder.printItems();
        System.out.println("___________________________");
        System.out.println("totalpreis:");
        System.out.println(simpleOrder.getTotalprice());


        //part 2 
        System.out.println("--------uebung 2------------.-");
        Order BundleOrder = new Order();

        ProductItem heft = new ProductItem("Heft", 1, 10);
        ProductItem stift = new ProductItem("Stift", 1, 10);

        BundleItem Discounteins = new BundleItem("Discounteins(50)", 50);
        BundleItem Discountzwei = new BundleItem("Discountzwei(50)", 50);
        BundleItem Discountdrei = new BundleItem("Discounteins(10)", 10);

        Discounteins.addItem(heft);
        Discounteins.addItem(stift);

        Discountzwei.addItem(Discounteins);
        Discountzwei.addItem(wischen);
        Discountzwei.addItem(wischen);

        Discountdrei.addItem(wischen);
        Discountdrei.addItem(wischen);

        BundleOrder.addItem(Discountzwei);
        BundleOrder.addItem(Discounteins);

        BundleOrder.printItems();
        System.out.println(BundleOrder.getTotalprice());

        System.out.println("---------------------------.-");

        Discounteins.setrabatt(50);

        System.out.println(Discounteins.getrabatt());

        BundleOrder.printItems();
        System.out.println("---------------------------.---");
        System.out.println(BundleOrder.getTotalprice());

        System.out.println("---------------------------.----");
    }

}

2 个答案:

答案 0 :(得分:0)

您的sum始终为零,这就是您总是得到负值的原因。

我想你打算做这样的事情:

@Override
public double getPrice() {
    double sum = 0;
    double discount = (rabatt / 100);

    for(Item element : allOrders) {
        sum += element.getPrice();         
    }

    return sum - (sum * discount);
}

答案 1 :(得分:0)

尝试替换

return sum - (result * discount);

return result-(result * discount);

并删除未使用的sum变量。现在

(结果*折扣)

会给你总折扣。从结果中减去它将为您提供折扣后的实际金额