我遇到了java构造函数错误

时间:2014-12-08 01:19:38

标签: java oop constructor bluej

我正在通过java学习OOP。我遇到了一个错误。它发生在CarV5 car1 = new CarV5(car, endMiles1, startMiles1, gallons1, pricePerGallon1) ;行。它说CarV5类中的构造函数CarV5不能应用于给定的类型;

你能纠正我的代码吗?它会顺利运行吗? 您能否通过编辑发回完整的程序?

public class CarV5
{

    String carType;
    int endMiles;
    int startMiles;
    double gallonsUsed;
    double pricePerGallon;
    double costOfTrip;
    double milesPerGallon;
    double gallonsPerMile;

    public CarV5(String type, int eMiles, int sMiles, double gals, double PPG, double TotalCost, double MPG, double GPM )
    {
        carType = type;
        endMiles = eMiles;
        startMiles = sMiles;
        gallonsUsed = gals;
        pricePerGallon = PPG;
        costOfTrip = TotalCost;
        milesPerGallon = MPG;
        gallonsPerMile = GPM;
    }

    public int calcDistance(int sMiles, int eMiles)
    {
        return eMiles - sMiles;
    }

    public double calcMPG(int dist, double gals)
    {
        return dist / gals;
    }

    public double calcGPM(double dist, double gals)
    {
        return gals / dist;
    }

    public double totalCost(double pricePerGallon1, double gals)
    {
        return pricePerGallon1 * gals;
    }

    public static void main(String[] args)
    {
        int startMiles1 = 70507;
        double distance1, endMiles1;
        double gallons1 = 11.6;
        double MilesperGallon1; 
        double pricePerGallon1 = 2.87;
        double gallonsUsed1,GPM; 
        double totalCost; 
        String car = "07 Ford Focus";

        CarV5 car1 = new CarV5(car, endMiles1, startMiles1, gallons1, pricePerGallon1) ;

        distance1 = car1.calcDistance(startMiles1,endMiles1);
        MilesperGallon1 = car1.calcMPG(distance1,gallons1);
        totalCost = car1.totalCost(pricePerGallon1,gallons1); 

        System.out.printf("%60s\n","Gas Mileage Calculations");
        System.out.printf("%10s%15s%15s%15s%15s%15s\n","Type of Car","Start Miles","End Miles","Distance","Gallons","Miles/Gal"); 
        System.out.printf("===================================================================================================\n");
        System.out.printf("%10s%11d%15d%15d%15f%15f\n",startMiles1,endMiles1,distance1,gallons1,MilesperGallon1); 
    }
}

2 个答案:

答案 0 :(得分:4)

你的构造函数需要8个参数,而你只用5调用它。你需要:

  1. 在您对构造函数的调用中添加缺少的参数。
  2. 创建一个只需要5个参数的附加构造函数:

    public CarV5(String type, int eMiles, int sMiles, double gals, double PPG) {
        carType = type;
        endMiles = eMiles;
        startMiles = sMiles;
        gallonsUsed = gals;
        pricePerGallon = PPG;
    }
    

    您甚至可以将对象创建委托给其他构造函数:

    public CarV5(String type, int eMiles, int sMiles, double gals, double PPG) {
        super(type, eMiles, sMiles, gals, PPG, 0.0, 0.0, 0.0);
    }
    
  3. 此外,您的endMiles1声明应更改为主要方法中的int

答案 1 :(得分:1)

double distance1, endMiles1;   
CarV5 car1 = new CarV5(car, endMiles1, startMiles1, gallons1, pricePerGallon1) ;

似乎你的endMiles1是一个双精度数,而在你的构造函数中它只接受一个double;

public CarV5(String type, int eMiles, int sMiles, double gals, double PPG, double TotalCost, double MPG, double GPM )

你的构造函数有8个参数,为什么你只有5个值。

这样就完成了构造函数的要求。

CarV5 car1 = new CarV5(car, endMiles1, startMiles1, gallons1, pricePerGallon1,totalCost,yourMPGVariable,yourGPMVariable) ;

并始终在创建变量时使用camelCase规则。在构造函数中查看您的参数,TotalCost它应该是totalCost。