#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 в конце ваших вариантов переключения и по умолчанию в конце.