在主方法 java 中创建开关参数



我是Java和任何语言的新手编码。 让我为我的英语道歉。我的母语是西班牙语。

我在一个类中创建了一个开关,我想在主中调用它,但它带有一个参数 (0),当我运行时它显示默认情况"La opcion ingresada es invalida">

这是主要方法:

public class Triwago 
{        
public static void main(String[] args) 
{
Reservacion unaReser=new Reservacion();
Reservacion.Bievenida();
Reservacion.Reservacion();
Reservacion.cantAdultos();
Reservacion.cantNiños();
Reservacion.cantNoches();
Reservacion.switchReser(lugarhostel);
}
}

这是我从中调用的类:

public class Reservacion {
public static String Bievenida ()
{
JOptionPane.showMessageDialog(null, "Bienvenido a TriwagonA continuación el sistema le guiara por el servicio de reserva");
return null;
}
public static int Reservacion ()
{
int lugarhostel;
lugarhostel=Integer.parseInt(JOptionPane.showInputDialog(null, "Digite 1 si desea reservar en playa o 2 para montaña"));
return lugarhostel;
}
public static int cantAdultos()
{
int cantAdult;
cantAdult=Integer.parseInt(JOptionPane.showInputDialog(null, "Ingrese la cantidad de adultos:"));
return cantAdult;
}
public static int cantNiños()
{
int cantNiños;
cantNiños=Integer.parseInt(JOptionPane.showInputDialog(null, "Ingrese la cantidad de niños"));
return cantNiños;
}
public static int cantNoches()
{
int cantNoches;
cantNoches=Integer.parseInt(JOptionPane.showInputDialog(null, "Ingrese la cantidad de noches"));
return cantNoches;
}
public static int switchReser(int lugarhostel)
{
switch (lugarhostel) {
case 1:
Reservacion.Playa(lugarhostel, lugarhostel, lugarhostel);
break;
case 2:
Reservacion.Montaña(lugarhostel, lugarhostel, lugarhostel);
break;
default:
JOptionPane.showMessageDialog(null, "Opcion invalida");
break;
}            
return lugarhostel;            
}      
public static int Playa(int cantAdult,int cantNiños,int cantNoches)
{
int precioAdult=10000;
int precioNiño=7000;
int preciototalAdult;
int preciototalNiño;
int preciototal;
preciototalAdult=(cantAdult*cantNoches*precioAdult);
preciototalNiño=(cantNiños*cantNoches*precioNiño);
preciototal=preciototalAdult+preciototalNiño;
JOptionPane.showMessageDialog(null, "La cantidad de adultos es: "+cantAdult+"nLa cantidad de niños es: "+cantNiños+
"nLa cantidad de noches es: "+cantNoches+"nEl precio a pagar por los adultos es de: "+preciototalAdult+
"nEl precio a pagar por los niños es de: "+preciototalNiño+"nEl total a pagar es de: "+preciototal);
return preciototal;
}
public static int Montaña(int cantAdult,int cantNiños,int cantNoches)
{
int precioAdult=10000;
int precioNiño=7000;
int preciototalAdult;
int preciototalNiño;
int preciototal;
cantAdult=Integer.parseInt(JOptionPane.showInputDialog(null, "Ingrese la cantidad de adultos:"));
cantNiños=Integer.parseInt(JOptionPane.showInputDialog(null, "Ingrese la cantidad de niños"));
cantNoches=Integer.parseInt(JOptionPane.showInputDialog(null, "Ingrese la cantidad de noches"));
preciototalAdult=(cantAdult*cantNoches*precioAdult);
preciototalNiño=(cantNiños*cantNoches*precioNiño);
preciototal=preciototalAdult+preciototalNiño;
JOptionPane.showMessageDialog(null, "La cantidad de adultos es: "+cantAdult+"nLa cantidad de niños es: "+cantNiños+
"nLa cantidad de noches es: "+cantNoches+"nEl precio a pagar por los adultos es de: "+preciototalAdult+
"nEl precio a pagar por los niños es de: "+preciototalNiño+"nEl total a pagar es de: "+preciototal);
return preciototal;
}
}

希望你能帮到我...这是我在这里的第一个问题

我不确定我是否正确理解问题所在,但也许它有帮助:

在方法

Reservacion.Reservacion();
Reservacion.cantAdultos();
Reservacion.cantNiños();
Reservacion.cantNoches();

您正在返回一个整数。您以特定方法在本地制作的。例如,在:

public static int cantNiños(){
int cantNiños;
cantNiños=Integer.parseInt(...);
return cantNiños;
}

如果您不将方法的值分配给某些内容,cantNiños 将丢失,如下所示:

int someInt = Reservacion.cantNiños();

因此,当您使用开关调用方法时,您应该具有类似以下内容:

int lugarhostel = Reservacion.cantNiños();
Reservacion.switchReser(lugarhostel);

理解这里发生的事情可能需要一段时间,因为您在问题中发布了很多多余的内容。首先,如果您打算进一步使用,那么在某些静态方法中初始化 lugarhostel 变量并不是正确的方法。 但是假设它可以是类的一部分,例如:

public class Reservacion {
int lugarhostel = 0;
}

然后你只需要通过unaReser.method()使用你的方法,其中lugarhostel将是unaReser对象的状态,尽管可以访问和修改。 阅读 Java 提出的按价值传递机制。这是一个非常重要的概念。我建议您从任何地方删除静态关键字,并考虑您拥有的对象保留。它应该由可以更新其状态的状态和行为组成。基本上,状态是一个对象的字段,您可以通过像unaReser.lugarhostel这样的点运算符引用它。而行为基本上是方法。

您的代码遭受了糟糕的设计,这可能会极大地影响未来的维护。每次调用静态方法,如 Reservacion.cantAdultos(); 除了在方法中创建局部变量并返回其值外,您什么都不做,但不将其保存到 main 方法中的任何引用变量。所以试着考虑一下字段:

public class Reservacion {
int lugarhostel;
int cantAdult;
int cantNiños;
int cantNoches;
// behavior...

例如,关于保留类的状态。虽然 cant*** 方法可以更新保留类对象引用状态,例如:

//behaviour..
public void Reservacion() {
lugarhostel=Integer.parseInt(JOptionPane.showInputDialog(null, "Digite 1 si desea reservar en playa o 2 para montaña"));
}
public void cantNoches(){
cantNoches=Integer.parseInt(JOptionPane.showInputDialog(null, "Ingrese la cantidad de noches"));
}
public void cant...

当你收集unaReser对象的状态时,你可以像这样将它传递给sth的静态方法:

public static void switchReser(Reservacion unaReser) {
switch (unaReser.lugarhostel) {
case 1:
Reservacion.Playa(unaReser.cantAdult, unaReser.cantNiños, unaReser.cantNoches);
break;
case 2:
Reservacion.Montaña(unaReser.cantAdult, unaReser.cantNiños, unaReser.cantNoches);
break;
default:
JOptionPane.showMessageDialog(null, "Opcion invalida");
break;
}
}

这也不是一个完美的设计。但这将是您在理解 OOP 和基本 Java 原则方面向前迈出的一步。

最新更新