Значение переменной не передается в другой класс

#java #class

#java #класс

Вопрос:

Я пытаюсь позволить пользователю выбирать, какая опция находится в их меню, и устанавливать переменные на основе опции, выбранной клиентом, но когда я перехожу к другому классу и извлекаю его, значение не передается.

Вот мой alacarte класс

 public class Alacarte {
    public void alacarte(){
        Checkout c = new Checkout();
        System.out.println("Please select a meal");
        System.out.println("n1. Fried Chicken........9.90");
        System.out.println("2. McChicken..........5.90");
        System.out.println("3. Spicy Chicken McDeluxe......12.90");
        System.out.println("nOption:");
        Scanner s = new Scanner(System.in);
        int option = s.nextInt();
        switch(option){
            case 1:
            this.order = "Fried Chicken";
            this.price = 9.90;
            c.receipt();
        
            case 2:
            this.order = "McChicken";
            this.price = 5.90;

            
            case 3:
            this.order = "Spicy Chicken McDeluxe";
            this.price = 12.90;
             
        }
    }
    private String order;
    private double price;
    public double getPrice(){
        return this.price;
    }
    public String getOrder(){
        return this.order;
    }

}
  

Вот мой checkout класс

 public class Checkout {
     public void receipt(){
         Alacarte as = new Alacarte();
         System.out.println("Thank you for your order");
         System.out.println("Your order is: "   as.getOrder());
         System.out.println("The price is: "   as.getPrice());
         System.out.println("nThank you for ordering with us!");
     }
}
  

Вот мой output

 Thank you for your order
Your order is: null
The price is: 0.0

Thank you for ordering with us!
  

Комментарии:

1. Ваш Alacarte объект вызывает receipt , который создает экземпляр другого Alacart — я думаю, вы передаете reciept значения, которые у вас уже есть.

2. Могу ли я узнать, как мне решить эту проблему @ScaryWombat

3. Осторожно! Ваши case блоки вашего switch оператора попадают в следующие. Это может быть не то, что вы хотите.

4. @MCEmperor как мне предотвратить эту проблему

5. Вам нужно ввести break инструкции — прочитайте инструкции switch.

Ответ №1:

У вас есть вся информация здесь

         this.order = "Fried Chicken";
        this.price = 9.90;
        c.receipt();
  

receipt так что измените, чтобы у него были параметры

         this.order = "Fried Chicken";
        this.price = 9.90;
        c.receipt(this.order, this.price);
  

Измените реализацию

 public void receipt(String order, float price){
     System.out.println("Thank you for your order");
     System.out.println("Your order is: "   order);
     System.out.println("The price is: "   price);
     System.out.println("nThank you for ordering with us!");
}
  

Ответ №2:

Вы создаете новый экземпляр Alacarte в своем методе получения, который ничего не знает о вводе пользователем. Один из способов сделать это — передать данные методу получения в качестве параметров.

 c.receipt(this.order, this.price);
  

И в оформлении заказа:

 public void receipt(String order, float price) {
    System.out.println("Thank you for your order");
    System.out.println("Your order is: "   order);
    System.out.println("The price is: "   price);
    System.out.println("nThank you for ordering with us!");
}
  

NB! Добавьте оператор break в конце ваших вариантов переключения и по умолчанию в конце.