我遇到了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);
}
}
答案 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:我不懂意大利语,但常识暗示这些......