方法中的变量不会挽救它们的价值

时间:2014-05-31 22:58:58

标签: java class variables methods

我遇到了2个变量的问题,其中第一个被称为“Num_Viajes”,并且每当我调用方法“de_Viaje”时,函数将其值增加1。第二个叫做“Total_Pasajeros”,函数在它自己和另一个名为“Num_Pasajeros”的变量之间加一个,两个变量都是 int

无论如何,当我调用方法“Reporte_Final”时,两个变量都应该打印它们的结果,例如:如果我调用方法“de_Viaje”2次,我为变量“Num_Pasajeros”输入值“45”程序应该返回:

Num_Viajes = 2 Total_Pasajeros = 90

但相反,它会返回:

Num_Viajes = 1 Total_Pasajeros = 45

所以我认为那是因为程序没有保存变量的值,因此它们总是重新启动。我该如何解决这个问题?

以下是代码:

import javax.swing.*;

public class Empresa_Autobuses
{
    String Tipo_Vehiculo;
    String Analisis_Viaje;
    int Num_Pasajeros;
    int Num_Viajes;
    int Total_Pasajeros;
    int Prom_Pasajeros;

    public static void main(String ... args)
    {
        boolean Bandera_Falsa = true;
        Empresa_Autobuses Viajero = new Empresa_Autobuses();
        do
        {
            Viajero.de_Viaje();
            Viajero.Reporte_Viaje();
            Viajero.Solicitud_Viaje();
            Viajero.Reporte_Final();
        }while(Bandera_Falsa == true);
    }

    public void de_Viaje()
    {
        Empresa_Autobuses Viajero = new Empresa_Autobuses();
        Tipo_Vehiculo = JOptionPane.showInputDialog("Selecciona el Tipo de Autobus (G = Grande, P = Pequeño").toUpperCase();
        Num_Pasajeros = Integer.parseInt(JOptionPane.showInputDialog("Introduzca el Número de Pasajeros: "));
        if(Tipo_Vehiculo.equals ("G"))
        {
            if(Num_Pasajeros > 60)
            {
                JOptionPane.showMessageDialog(null, "¡Se ha superado la Capacidad Máxima del Autobus!");
                Viajero.Solicitud_Viaje();
            }
            else if(Num_Pasajeros >= 30)
            {
                Analisis_Viaje = "Ganancia";
                Num_Viajes++;
                Total_Pasajeros += Num_Pasajeros;
            }
            else
            {
                Analisis_Viaje = "Pérdida";
                Num_Viajes++;
                Total_Pasajeros += Num_Pasajeros;
            }
        }
        else if(Tipo_Vehiculo.equals ("P"))
        {
            if(Num_Pasajeros > 20)
            {
                JOptionPane.showMessageDialog(null, "¡Se ha superado la Capacidad Máxima del Autobus!");
                Viajero.Solicitud_Viaje();
            }
            else if(Num_Pasajeros >= 10)
            {
                Analisis_Viaje = "Ganancia";
                Num_Viajes++;
                Total_Pasajeros += Num_Pasajeros;
            }
            else
            {
                Analisis_Viaje = "Pérdida";
                Num_Viajes++;
                Total_Pasajeros += Num_Pasajeros;
            }
        }
        else
        {
            JOptionPane.showMessageDialog(null, "Opción Incorrecta");
            Viajero.Solicitud_Viaje();
        }
    }

    public void Reporte_Viaje()
    {
        JOptionPane.showMessageDialog(null, "Reporte de Viaje\nEl Tipo de Autobus fue: "+Tipo_Vehiculo+"\nEl Total de Pasajeros en el Viaje fue de: "+Num_Pasajeros+"\n"+Analisis_Viaje);
    }

    public void Solicitud_Viaje()
    {
        Empresa_Autobuses Viajero = new Empresa_Autobuses();
        String Solicitud;
        boolean flag = true;
        do
        {
            Solicitud = JOptionPane.showInputDialog("¿Quiere realizar otro Viaje? (Y/N)").toUpperCase();
            if(Solicitud.equals ("Y"))
            {
                Viajero.main();
            }
            else if(Solicitud.equals ("N"))
            {
                flag = true;
            }
            else
            {
                JOptionPane.showMessageDialog(null, "Opción Incorrecta");
                flag = false;
            }
        }while(flag == false);
    }

    public void Reporte_Final()
    {
        Prom_Pasajeros = Total_Pasajeros / Num_Viajes;
        JOptionPane.showMessageDialog(null, "El Número de Viajes realizados fue de: "+Num_Viajes+"\nEl Total de Pasajeros fue de: "+Total_Pasajeros+"\nEl Promedio de Pasajeros fue de: "+Prom_Pasajeros);
        System.exit(9999);
    }
}

2 个答案:

答案 0 :(得分:1)

问题似乎并不在你认为的地方。 Num_Pasajeros>60时会发生什么?如果它应该总是发生的话,为什么增量在“then”块内呢?

修改

问题很可能是您在程序中运行main程序。第二次调用会创建一个与您一直使用的对象无关的全新对象!不要这样做,你可能应该没事。你的Swing线程有一些问题,但你可能不应该考虑这个问题。

答案 1 :(得分:1)

应该调试它,采取断点@Empresa_Autobuses Viajero = new Empresa_Autobuses();并看看发生了什么情况(if / else branch)正在运行/执行,你的变量实际值是什么......

无论如何,如果你仔细观察它:如果护理类型是P,那么你的total_pasajeros将不会与num pasarejos相加。

Tipo_Vehiculo.equals ("P"))

Java Code Convention的+1:http://web.archive.org/web/20140222045352/http://www.oracle.com/technetwork/java/codeconv-138413.html (如果你坚持自己,那你就让每个人的工作变得更轻松了)

p.s:我不懂意大利语,但常识暗示这些......