2017-06-13 88 views
0

我是使用Java和任何語言編寫的新編碼。 讓我爲我的英語道歉。我的母語是西班牙語。在主要方法java中爲交換機創建參數

我創建一個類中的開關,我想它調用主,但它帶有一個參數(0),當我運行它會顯示默認的情況下,「香格里拉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; 
    } 
} 

我希望u能幫助我...這是我的第一個問題在這裏

+1

我不確定你在問什麼。你說的是,當你將'0'傳遞給switch語句,只有'1'和'2'的情況下,你得到默認情況......?這按預期工作。 – azurefrog

+0

你可以在函數名中使用'?'嗎? –

+0

@折速是的你可以擁有它。 –

回答

0

我不知道如果我理解正確的是什麼問題,但也許它可以幫助:

在方法

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

你是返回一個整數。您在本地製作的具體方法。對於例如cantNiños:

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

瞭解這裏發生的事情可能需要一段時間,因爲你張貼了很多冗餘的問題。首先,如果您打算進一步使用,則不是在某種靜態方法內初始化lugarhostel變量的正確方法。 不過,假設它可以像一類的一部分:

public class Reservacion { 
    int lugarhostel = 0; 
} 

然後你只需要通過unaReser.method用你的方法(),其中lugarhostel將unaReser對象的狀態,雖然可以訪問和修改。 閱讀關於通過價值機制java建議。這是在這裏實現的非常重要的概念。我建議你從任何地方刪除靜態關鍵字,並考慮你有的對象保留。它應該包含一個可以更新狀態的狀態和行爲。基本狀態是一個對象的字段,您可以通過點運算符(如unaReser.lugarhostel)進行引用。行爲基本上是方法。

您的代碼遭受了糟糕的設計,這可能會對未來的維護造成很大影響。每次你調用像Reservacion.cantAdultos()這樣的靜態方法; 除了在方法內部創建局部變量並返回它的值之外,你不做任何事情,但不將它保存到主方法中的任何引用變量中。因此,請嘗試考慮字段:

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

喜歡關於Reservacion類的狀態,例如。雖然着***方法可以更新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; 
    } 
} 

這也不是一個完美的設計。但是,這對於理解面向對象和基本的Java原則將是一個進步。