java - metodo - non-static variable cannot be referenced from a static context solucion




el método no estático no se puede hacer referencia desde el contexto estático (4)

¿Tal vez el método journeyCost (Journey Journey) debería ser estático?

Esta pregunta ya tiene una respuesta aquí:

El siguiente código aparece en la clase principal de un paquete que estoy tratando de crear. Hace referencia a objetos y métodos de una clase auxiliar llamada Journey. A la llamada del método journeyCost en la línea marcada por estrellas, journeyCost un journeyCost método no estático no se puede hacer referencia a partir del contexto estático". Esto me ha confundido ya que tenía la impresión de que el objeto Journey "thisJourney", creado en la segunda línea, constituye una instancia de la clase y, por lo tanto, significa que el contexto no es estático. Gracias de antemano, Seany.

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);
        }

    } 

El error significa que estás tratando de llamar a un método no estático de una manera estática, como esta:

 Journey.journeyCost(thisJourney);

¿ journeyCost() declarado journeyCost() estático? ¿No te refieres en cambio a thisJourney.journeyCost() ?

Además, debe usar getters y setters para modificar y acceder a las variables de sus miembros, en lugar de:

Journey.dayCharge = ...

Deberías

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

( setDayCharge y getDayCharge deben ser estáticos en este caso)


Todas estas líneas deben ser cambiadas. A menos que realmente intentes cambiar todos los futuros Cargos de viaje con tus últimas tres líneas (y eso supondría que esos son valores estáticos)

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;

Esas últimas tres líneas todavía necesitan trabajo, no sé por qué estás tratando de modificar la variable estática. Prueba esto si solo quieres establecer los cargos de este thisJourney

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

Aunque incluso con eso los valores de carga deberían ser algo constante. Realmente no deberías estar mezclando una clase estática y una clase de instancia del mismo tipo, al mismo tiempo que intercambias sus usos.


Whenener utiliza Journey.someMethod (), someMethod es un método estático. "Viaje" está en el contexto estático. este viaje está en el contexto no estático, porque es una instancia. Por lo tanto, debes usar

    thisJourney.updateCurrentCharges(date);




static