0

プログラムのメインでメソッドを呼び出すのに問題があります。

プログラムの仕様は次のとおりです。

setNoOfVehicles(): 所有車両数を返します。

setWeeklyFuelCost(): 所有しているすべての車両のガソリンの週平均コストを返します。

calcYearlyFuelCost(): 週平均燃料費を受け取り、年間平均燃料費を返します。

displayFuelCost(): 所有車両数、週平均燃料費、年間平均燃料費を受け取ります。

main():

戻り値を呼び出しsetWeeklyFuelCost()て、ローカル変数に格納します。

への呼び出し、週平均燃料費のローカル変数、およびdisplayFuelCost()への呼び出しを引数として送信して呼び出します。setNoOfVehicles()calcYearlyFuelCost()

スキャナーはグローバルレベルで宣言されています

public static void main(String[] args)
{

double x = setWeeklyFuelCost();

displayFuelCost( setNoOfVehicles(), x, calcYearlyFuelCost(x)); //This is the correct parameters I needed to pass thru displayFuelCost(). I didn't know this at the time and this is what I was trying to ask in this post.
}

private static int setNoOfVehicles()
{

System.out.print( "How many vehicles do I own?  " );
 int noOfVehicles = input.nextInt();
return noOfVehicles;
}

private static double setWeeklyFuelCost()
{


System.out.print( "Enter the average weekly fuel cost for my vehicles:  ");
double weeklyFuelCost = input.nextDouble();
return weeklyFuelCost;

}

private static double calcYearlyFuelCost(double weeklyFuelCost)
{

double yearlyFuelCost = 0.0;
yearlyFuelCost = weeklyFuelCost * 52;
return yearlyFuelCost;

}

private static void displayFuelCost( int noOfVehicles, double weeklyFuelCost, double yearlyFuelCost)
{
double difference = yearlyFuelCost - 5044.00;

if( yearlyFuelCost > 5044.00)
{
System.out.printf( "No of Vehicles:  %d\n"
                + "Avg Weekly Fuel Cost:  $%,.2f\n"
                + "Avg Annual Fuel Cost:  $%,.2f\n\n"
                + "I am OVER budget by $%,.2f.", noOfVehicles, weeklyFuelCost, yearlyFuelCost, difference);
}
else if( yearlyFuelCost < 5044.00)
{
difference = difference * -1;
System.out.printf( "No of Vehicles:  %d\n"
                + "Avg Weekly Fuel Cost:  $%,.2f\n"
                + "Avg Annual Fuel Cost:  $%,.2f\n\n"
                + "I am UNDER budget by $%,.2f.  PAARRTY!!! ", noOfVehicles, weeklyFuelCost, yearlyFuelCost, difference);
}
else
{
System.out.printf( "No of Vehicles:  %d\n"
                + "Avg Weekly Fuel Cost:  $%,.2f\n"
                + "Avg Annual Fuel Cost:  $%,.2f\n\n"
                + "I am RIGHT ON BUDGET!", noOfVehicles, weeklyFuelCost, yearlyFuelCost, difference);
}

}

}

最後の仕様は私を支えているものです。displayFuelCost() を呼び出します。

私の問題は、通過する必要があるパラメーターを正確に知らなかったことですdisplayFuelCost()。この質問をする前に、上記の変数 x を使用する必要があることはわかっていました。

displayFuelCost( setNoOfVehicles(), x, calcYearlyFuelCost(x));メインを正しく機能させるために入力する必要があるのはこれだけでした。

4

3 に答える 3

2

displayFuelCost()クラスで定義されていないメソッドを呼び出します。代わりにメソッドがあります

private static void displayFuelCost( int noOfVehicles, double weeklyFuelCost, double yearlyFuelCost) { ... }

3 つのパラメーターを取ります。

メソッド呼び出しを次のように変更します

displayFuelCost(1, 100.0, 5200.0);  // sample values

エラーを解消し、何らかの結果を得るために。

于 2012-04-08T21:30:37.323 に答える
1

貼り付けたコードにはクラス定義が含まれていません。メインメソッドが displayFuelCost メソッドとは別のクラスにある場合は、変更する必要があります

private static void displayFuelCost( int noOfVehicles, double weeklyFuelCost, double yearlyFuelCost)

公開する:

public static void displayFuelCost( int noOfVehicles, double weeklyFuelCost, double yearlyFuelCost)

そうは言っても、静的メソッドを過度に使用することはお勧めしません。適切なオブジェクト指向スタイル (または静的に見える必要がある場合は、少なくともシングルトン パターン) を使用してはならない理由がわかりません。

//編集:

問題は、コードのこの部分です:

public static void main(String[] args)
{

double x = setWeeklyFuelCost();

displayFuelCost(); //<-- need arguments here!

メイン関数内で、displayFuelCost メソッドを呼び出しますが、必要なパラメーターを提供しません。このメソッドの宣言を見ると、次のようになります。

private static void displayFuelCost( int noOfVehicles, double weeklyFuelCost, double yearlyFuelCost)

}

integer、double、および double の 3 つのパラメーターが必要であることがわかります。displayFuelCost 関数を呼び出すときにそれらを提供する必要があります。たとえば、次のようにします。

public static void main(String[] args)
{

double x = setWeeklyFuelCost();

displayFuelCost(1, 2.5, 2.5); //<-- need parameters here!

}

//編集 2:

コード全体にさらに問題があります。それらに関する新しい回答を追加しました。

于 2012-04-08T21:25:24.567 に答える
0

スキャナーのコードとクラスがないため、ソリューションが機能することを証明できません。試してみる必要があります。

public class Test {
    public static void main(String[] args) {

        int vehicleNumber = setNoOfVehicles();
        double costWeek = setWeeklyFuelCost();
        double costYear = calcYearlyFuelCost(costWeek);

        displayFuelCost(vehicleNumber, costWeek, costYear);
    }
// rest of your code
}

しかし、これはおそらくあなたの先生があなたに伝えたいことではないことを、もう一度警告しなければなりません. 彼は、メイン メソッド (例: Test test = new Test()) でそれ自体をインスタンス化し、インスタンス側のメソッド (つまり、最初に static を持たないメソッド) を使用してタスクを実行するクラスを望んでいます。もう一度試してみることをお勧めします。;)

于 2012-04-08T21:55:38.470 に答える