在main方法java中为switch创建参数

时间:2017-06-13 20:42:36

标签: java switch-statement

我是使用Java编写的新代码,并且完全使用任何语言。 让我为我的英语道歉。我的母语是西班牙语。

我在类中创建了一个开关,我想在main中调用它,但它带有一个参数(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 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;
    }
}

我希望你能帮助我......这是我的第一个问题

2 个答案:

答案 0 :(得分:0)

我不确定我是否正确理解了问题是什么,但也许有帮助:

方法

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

您正在返回一个整数。您在本地制作的具体方法。例如cantNiñosin:

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

答案 1 :(得分:0)

理解这里发生的事情可能需要一段时间,因为你在问题片上发布了很多冗余。首先,如果你打算进一步使用它,那么在一些静态方法中初始化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...

例如关于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原则方面,这将是一个进步。