我正在通过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);
}
}
答案 0 :(得分:4)
你的构造函数需要8个参数,而你只用5调用它。你需要:
创建一个只需要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);
}
此外,您的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。