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

在主方法java中为开关创建参数,java,switch-statement,Java,Switch Statement,我对Java和任何语言都是新手。 让我为我的英语道歉。我的母语是西班牙语 我在一个类中创建了一个开关,我想在main中调用它,但它带有一个参数(0),当我运行它时,它会显示默认情况“La opcion Ingreada es invalida” 这是主要的方法: public class Triwago { public static void main(String[] args) { Reservacion unaReser=new Res

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

我在一个类中创建了一个开关,我想在main中调用它,但它带有一个参数(0),当我运行它时,它会显示默认情况“La opcion Ingreada 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 Triwago\nA 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 propose的传递值机制。这是一个非常重要的概念。我建议您从任何地方删除静态关键字,并考虑您的对象保留。它应该由状态和行为组成,可以更新它的状态。基本上,状态是一个对象的字段,您可以通过点运算符(如unaReser.lugarhostel)引用该字段。而行为基本上是方法

您的代码设计不好,可能会严重影响将来的维护。每次调用Reservacion.cantAdultos()之类的静态方法时; 您只需在方法内创建局部变量并返回其值,而不将其保存到主方法中的任何引用变量。因此,试着考虑一下字段:

public class Reservacion {
    int lugarhostel;
    int cantAdult;
    int cantNiños;
    int cantNoches;
    // behavior...
例如,关于Reservacion类的状态。而cant***方法可以更新Reservacion类对象引用状态,例如:

//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对象的状态时,您可以将其传递给静态方法,如下所示:

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原则来说是一个进步。

我不确定您在这里要问什么。您的意思是,当您将
0
传递到只包含
1
2
大小写的switch语句中时,您会得到默认大小写。。。?正如预期的那样。你能在函数名中包含
ñ
吗?@Coldspeed是的,你可以。