我正在从实验表中找出一个问题,但我在运行程序时只得到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的新手。请宽容。
答案 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)
您的setCost
和setDiameter
方法似乎需要更改,
这
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;
}