1

以下のコードは、作成しようとしているパッケージのメイン クラスで発生します。Journey というヘルパー クラスのオブジェクトとメソッドを参照します。星でマークされた行のメソッドの呼び出しで、journeyCost「非静的メソッドは静的コンテキストから参照できません」というエラーが表示されます。2行目で作成されたJourneyオブジェクト「thisJourney」がクラスのインスタンスを構成し、したがってコンテキストが静的ではないことを意味するという印象を受けていたので、これは私を混乱させました。前もってありがとう、シーニー。

public boolean journey(int date, int time, int busNumber, int journeyType){
        Journey thisJourney = new Journey(date, time, busNumber, journeyType);

        if (thisJourney.isInSequence(date, time) == false)
        {
            return false;            
        }
        else
        {
            Journey.updateCurrentCharges(date);

            thisJourney.costOfJourney = Journey.journeyCost(thisJourney);***** 
            Journey.dayCharge = Journey.dayCharge + thisJourney.costOfJourney;
            Journey.weekCharge = Journey.weekCharge + thisJourney.costOfJourney;
            Journey.monthCharge = Journey.monthCharge + thisJourney.costOfJourney;

            Balance = Balance - thisJourney.costOfJourney;
            jArray.add(thisJourney);
        }

    } 
4

6 に答える 6

5

このエラーは、次のような静的な方法で非静的メソッドを呼び出そうとしていることを意味します。

 Journey.journeyCost(thisJourney);

journeyCost()static と宣言されていますか? その代わりじゃないのthisJourney.journeyCost()

さらに、メンバー変数を変更してアクセスするには、getter と setter を使用する必要があります。

Journey.dayCharge = ...

あなたが持っている必要があります

Journey.setDayCharge(Journey.getDayCharge() + thisJourney.getCostOfJourney());

(この場合、静的である必要がありますsetDayCharge)getDayCharge

于 2012-04-10T13:34:26.883 に答える
3

これらの行はすべて変更する必要があります。最後の 3 行で将来のすべての Journey Charges を実際に変更しようとしている場合を除きます (これらは静的な値であると想定されます)。

thisJourney.costOfJourney = thisJourney.journeyCost();//dont know why you are passing the journey object to this method.
Journey.dayCharge = Journey.dayCharge + thisJourney.costOfJourney;
Journey.weekCharge = Journey.weekCharge + thisJourney.costOfJourney;
Journey.monthCharge = Journey.monthCharge + thisJourney.costOfJourney;

最後の 3 行はまだ作業が必要です。静的変数を変更しようとしている理由がわかりません。の料金を設定したいだけの場合は、代わりにこれを試してくださいthisJourney

thisJourney.dayCharge = Journey.dayCharge + thisJourney.costOfJourney;
thisJourney.weekCharge = Journey.weekCharge + thisJourney.costOfJourney;
thisJourney.monthCharge = Journey.monthCharge + thisJourney.costOfJourney;

それでも、充電値は一定である必要があります。同じタイプの静的クラスとインスタンス クラスを混在させて、それらの用途を交換するべきではありません。

于 2012-04-10T13:41:42.293 に答える
3

変化する

Journey.journeyCost(....)

thisJourny.journyCost(...........)

journyCostはJourny クラスの非静的メソッドであるため、 thisJournyであるそのオブジェクトを介してこのメ​​ソッドを呼び出す必要があります

クラス名を使用すると、静的メンバーにのみアクセスしたり、そのクラスの静的メソッドを呼び出したりできます。

于 2012-04-10T13:35:48.803 に答える
1

メソッドjourneyCostは非静的です。したがって、これはインスタンス メソッドであり、Journey実行するには のインスタンスが必要です。この文Journey.journeyCost(thisJourney);は静的な方法でメソッドを呼び出しており、メソッドがクラスレベルのメソッド (または静的) であることを期待しています。

journeyCostしたがって、呼び出しが機能するようにメソッドを静的にすることができます。

public static boolean journey(int date, int time, int busNumber, int journeyType)

または、適切なインスタンスからメソッドを呼び出してみてください。

Journey aJourneyInstance = new Journey();
thisJourney.costOfJourney = aJourneyInstance.journeyCost(thisJourney);
于 2012-04-10T13:41:51.470 に答える
1

たぶん、journeyCost(Journey tour) メソッドは static である必要がありますか?

于 2012-04-10T13:35:33.847 に答える
1

Journey.someMethod() を使用する場合、someMethod は静的メソッドです。「旅」は静的な文脈にあります。thisJourney はインスタンスであるため、非静的コンテキストにあります。したがって、使用する必要があります

    thisJourney.updateCurrentCharges(date);
于 2012-04-10T13:35:40.363 に答える