Java项目返回空值

时间:2013-11-23 08:14:09

标签: java eclipse null project zero

您好我是Java编程新手。在输入对话框中输入后,为什么我的值返回null。我有两个类,一个叫做VehicleApp,另一个叫做VehicleFactory。帮助将不胜感激。感谢。

完整代码VehicleApp.java

package romprojectname;

import java.text.NumberFormat;
import javax.swing.JOptionPane;

public class VehicleApp{

public static void main(String[] args) {

        String firstname = JOptionPane.showInputDialog("Enter your first name");
        String lastname = JOptionPane.showInputDialog("Enter your last name");
        long phone = Long.parseLong(JOptionPane.showInputDialog("Enter your phone"));
        int nbrVehicles = Integer.parseInt(JOptionPane.showInputDialog("Enter number of vehicles"));
        int nbrTanks = Integer.parseInt(JOptionPane.showInputDialog("Enter number of tanks"));

        VehicleFactory vehicleObject = new VehicleFactory();
        vehicleObject.getSummary();
        vehicleObject.HayloFactory(firstname, lastname, phone, nbrVehicles, nbrTanks);
        vehicleObject.calcFuelTankCost();
        vehicleObject.calcManufacturingCost();
        vehicleObject.calcSubtotal();
        vehicleObject.calcTax();
        vehicleObject.calcTotal();
    }
    }

完整代码VehicleFactory.java

package romprojectname;

   import java.text.NumberFormat;
   import javax.swing.JOptionPane;

   public class VehicleFactory{
    private String firstname;
    private String lastname;
    private Long phone;
    private int nbrVehicles =0;
    private int nbrTanks =0;
    private double manufactureCost =0;
    private double fuelTankCost =0;
    private double subtotal =0;
    private double tax =0;
    private double total = 0;
    private final double VEHICLE_PRICE = 500.19;
    private final double FUELCELL_PRICE = 2.15;
    private final int CELLS_PER_TANK = 12;
    private final double taxrate = 7.25 / 100 ;

public void HayloFactory(String firstname, String lastname, Long phone, int nbrVehicles, int nbrTanks){
    this.firstname = firstname;
    this.lastname = lastname;
    this.phone = phone;
    this.nbrVehicles = nbrVehicles;
    this.nbrTanks = nbrTanks;
}

public void calcManufacturingCost(){
    double manufactureCost = nbrVehicles * VEHICLE_PRICE;
}

public void calcFuelTankCost(){
    double fuelTankCost = nbrVehicles * nbrTanks * CELLS_PER_TANK * FUELCELL_PRICE;
}

public void calcSubtotal(){
    double subtotal = manufactureCost + fuelTankCost;
}

public void calcTax(){
    double tax = subtotal * taxrate;
}

public void calcTotal(){
    double total = subtotal + tax;
}   

NumberFormat cf = NumberFormat.getCurrencyInstance();

public void getSummary(){
    String summary = "WELCOME TO HAYLO MANUFACTURING" + "\n" + "\n";

    summary += "Customer Name: " + firstname + " " + lastname + "\n";
    summary += "Customer Phone: " + phone + "\n";
    summary += "Number of Vehicles: " + nbrVehicles + "\n";
    summary += "Number of Tanks: " + nbrTanks + "\n";
    summary += "Vehicle Cost ($500.19 / vehicle): " + cf.format(manufactureCost) + "\n";
    summary += "Tanks Cost ($2.15 / fuel cell): " + cf.format(fuelTankCost) + "\n";
    summary += "Subtotal: " + cf.format(subtotal) + "\n";
    summary += "Tax (7.25%): " + cf.format(tax) + "\n";
    summary += "Total: " + cf.format(total) + "\n";

    //display the summary
    JOptionPane.showMessageDialog(null, summary);
            }  
    }

问题(代码来自VehicleFactory.java)

所有摘要(例如客户名称)都返回空值,所有费用和总计均为0.00美元。

public void getSummary(){
String summary = "WELCOME TO HAYLO MANUFACTURING" + "\n" + "\n";

summary += "Customer Name: " + firstname + " " + lastname + "\n";
summary += "Customer Phone: " + phone + "\n";
summary += "Number of Vehicles: " + nbrVehicles + "\n";
summary += "Number of Tanks: " + nbrTanks + "\n";
summary += "Vehicle Cost ($500.19 / vehicle): " + cf.format(manufactureCost) + "\n";
summary += "Tanks Cost ($2.15 / fuel cell): " + cf.format(fuelTankCost) + "\n";
summary += "Subtotal: " + cf.format(subtotal) + "\n";
summary += "Tax (7.25%): " + cf.format(tax) + "\n";
summary += "Total: " + cf.format(total) + "\n";

//display the summary
JOptionPane.showMessageDialog(null, summary);

2 个答案:

答案 0 :(得分:3)

你还没有真正描述过这个问题,但我怀疑这是原因:

VehicleFactory vehicleObject = new VehicleFactory();
vehicleObject.getSummary();
vehicleObject.HayloFactory(firstname, lastname, phone, nbrVehicles, nbrTanks);

在致电getSummary之前,您正在致电HayloFactory - 因此,在您设置之前,它正在尝试显示对象中的值它们是有用的价值。

此外,您的所有calcXyz方法都引入了新的局部变量,如下所示:

public void calcTotal(){
    double total = subtotal + tax;
}   

相反,他们应该设置字段值:

public void calcTotal(){
    total = subtotal + tax;
}   

如果您正确更改了所有计算方法,请将getSummary()调用移到最后,它会起作用。 (这不是我编写代码的方式,但这是另一回事。)

答案 1 :(得分:0)

定义的变量在您的方法中仅具有局部范围,例如
        double manufactureCost = nbrVehicles * VEHICLE_PRICE;它实际上隐藏了您的类变量manufactureCost ..他们应该将其用作
 manufactureCost = nbrVehicles * VEHICLE_PRICE;
通过这种方式,您可以实际设置类变量,该变量又显示在getSummary方法