类和对象。在计算价格时得到0.0作为答案。 - JAVA

时间:2015-02-22 14:02:00

标签: java oop

我正在从实验表中找出一个问题,但我在运行程序时只得到0.0作为答案。我找不到有什么问题请帮忙。

问题:
实现具有属性直径(cm),cost_sq_cm(每平方厘米成本)和面积的类Pizza。它的方法是:
•构造函数,用于创建具有给定直径和给定price_sq_cm的Pizza类型的对象。
•直径和cost_sq_cm的变异器和存取器方法。
•calcArea计算给定披萨的面积。
•getPrice计算并返回披萨的价格。

使用main方法编写一个类TestPizza,该方法声明一个具有用户输入直径和用户输入的圆形比萨饼的cost_sq_cm的Pizza类型的对象,并显示比萨饼的价格。

比萨班:

package Number3;

public class Pizza {
private int diameter;
private float cost_sq_cm;
private double area;
private double price;

public Pizza() //default constructor
{
    diameter = 0;
    cost_sq_cm = 0;
    area = 0;
    price = 0;
}

public Pizza(int d,float cost,double a,double p) //overloaded constructor
{
    d = diameter;
    cost = cost_sq_cm;
    a = area;
    p = price;  
}

public void Constructor() //method
{
    Pizza P = new Pizza();
}

public void setDiameter(int d) //mutator
{
    d = diameter;
}

public int getDiameter() //accessor
{
    return diameter;
}

public void setCost(float c)
{
    c = cost_sq_cm;
}

public float getCost()
{
    return cost_sq_cm;
}

public double calcArea()
{
    area = 3.142 * (diameter * diameter);
    return area;
}

public double getPrice()
{ 
    price = area * cost_sq_cm;
    return price;
}

public void display()
{
    System.out.print("The area is: "+this.price);
}
}

TestPizza:

package Number3;
import java.util.Scanner;

public class TestPizza {


public static void main(String[] args) {
    Scanner input = new Scanner(System.in);
    float area = 0;
    Pizza P = new Pizza();

    int d; float c,a = 0;
    System.out.print("Enter a value for the diameter: ");
    d = input.nextInt();
    P.setDiameter(d);

    System.out.print("Enter a value for the cost: ");
    c = input.nextFloat();
    P.setCost(c);

    P.display();    
}

}

我是JAVA的新手。请宽容。

4 个答案:

答案 0 :(得分:3)

您应该将每平方厘米面积的成本乘以获得价格。如果任何一个等于零,你将得到零。我看到你设置直径的位置,但不是区域。

您可以设置直径,但在设置时不会计算面积。

public void setDiameter(int d) //mutator; lose this comment.  worthless clutter.
{
    d = diameter;
    area = calcArea();
}

我建议遵循Java习惯用法。不要写display()方法;最好覆盖toString()

我会这样写:

package cruft;

import java.text.DecimalFormat;
import java.text.NumberFormat;

/**
 * Pizza
 * @author Michael
 * @link https://stackoverflow.com/questions/28658669/classes-and-objects-getting-0-0-as-answer-when-calculating-price-java
 * @since 2/22/2015 12:27 PM
 */
public class Pizza {

    private static final int DEFAULT_DIAMETER = 38;
    private static final double DEFAULT_COST = 15.0;
    private static final double DEFAULT_COST_PER_AREA = 0.013226;     // 15 euro for a 38 cm diameter pizza
    private static final NumberFormat DEFAULT_FORMAT = new DecimalFormat("#.####");

    private final int diameter;
    private final double costPerArea;
    private final double price;

    public static void main(String[] args) {
        int diameter = ((args.length > 0) ? Integer.valueOf(args[0]) : DEFAULT_DIAMETER);
        double costPerArea = ((args.length > 1) ? Double.valueOf(args[1]) : DEFAULT_COST_PER_AREA);
        Pizza pizza = new Pizza(diameter, costPerArea);
        System.out.println(pizza);
    }

    public Pizza(int diameter, double costPerArea) {
        if (diameter <= 0) throw new IllegalArgumentException("diameter must be positive");
        if (costPerArea <= 0) throw new IllegalArgumentException("cost per area must be positive");
        this.diameter = diameter;
        this.costPerArea = costPerArea;
        this.price = this.costPerArea*this.calculateArea();
    }

    public double getPrice() {
        return price;
    }

    private double calculateArea() {
        return Math.PI*this.diameter*this.diameter/4.0;
    }

    @Override
    public String toString() {
        final StringBuilder sb = new StringBuilder("Pizza{");
        sb.append("diameter=").append(diameter);
        sb.append(", costPerArea=").append(DEFAULT_FORMAT.format(costPerArea));
        sb.append(", price=").append(NumberFormat.getCurrencyInstance().format(getPrice()));
        sb.append('}');
        return sb.toString();
    }
}

答案 1 :(得分:1)

为了设置字段或其他值,它是

variable = value;

所以

diameter = d;

答案 2 :(得分:1)

您的setCostsetDiameter方法似乎需要更改,

d = diameter;

this.diameter = d;

答案 3 :(得分:0)

而不是:

System.out.print("The area is: "+this.price);

使用:

System.out.print("The area is: "+this.getPrice());

您还需要计算面积。所以在你的main方法中称之为:

P.calcArea();//to calculate area

当你打电话给new Pizza()并且你从未打电话给你计算价格的getPrice时,你将价格初始化为0。

还可以通过以下方式更改您的成品器:

public void setCost(float c) {
   c = cost_sq_cm;
}

public void setCost(float c) {
    cost_sq_cm = c;
}