Я пишу простую программу «корзина для покупок» на Java, я совсем не пользовался ею за последние 10 лет, я просто пытаюсь ознакомиться с ней снова ...
В моей программе 3 класса: Program.java
, Basket.java
& Item.java
.
Program.java
определяется как:
public class Program {
public static int menuSelection = 0;
public static Scanner kb = new Scanner(System.in);
public static Basket basket = new Basket();
public static void main(String[] args) {
// TODO Auto-generated method stub
//Program p = new Program();
menu();
}
public static void menu() {
System.out.println("Press 1 to add an item to the basket. ");
System.out.println("Press 2 to remove an item from the basket. ");
System.out.println("Press 3 to display the basket contents. ");
System.out.println("Press 9 to proceed to checkout. ");
System.out.println("Press 0 to exit program");
menuSelection = kb.nextInt();
if(menuSelection == 1) {
basket.addItemToBasket();
} else if(menuSelection == 2) {
basket.removeItemFromBasket();
} else if (menuSelection == 3) {
basket.displayBasket();
} else if(menuSelection == 9) {
System.out.println("Proceed to checkout");
} else if(menuSelection == 0) {
System.exit(0);
}
}
}
Basket.java
определяется как:
public class Basket {
public ArrayList<Item> basket = new ArrayList<Item>();
public Scanner kb = new Scanner(System.in);
public Item item = new Item();
public Program prog = new Program();
public void addItemToBasket() {
System.out.println("Enter the name of the item: ");
item.name = kb.nextLine();
System.out.println("Enter the price of the item: ");
item.price = kb.nextDouble();
basket.add(item);
item.name = null;
item.price = 0;
Program.menu();
}
public void removeItemFromBasket() {
System.out.println("Which item would you like to remove? ");
item.name = kb.nextLine();
if(basket.contains(item.name) ) {
basket.remove(item);
} else {
System.out.printf("There is no %s currently in the basket! ", item.name);
}
}
public String displayBasket() {
return basket.toString();
}
}
В настоящий момент, если я запускаю программу, в консоли отображается меню, и когда я выбираю '1', вызывается метод addItemToBasket()
, я вводю имя в первом запросе и цену во втором после этого появится меню.
Однако в этот момент, если я затем снова выберу «1», чтобы добавить еще один элемент в корзину, первая и вторая подсказки отображаются вместе ... то есть вместо:
Введите название товара:
// Ожидание ввода пользователя
Введите цену товара:
// Ожидание ввода пользователя
показывает:
Введите название товара:
Введите цену товара:
и если я попытаюсь ввести что-либо, кроме цифр, программа вылетит, потому что ожидает двойное значение ...
Что я делаю не так? Почему метод addItemToBasket()
пропускает строку item.name = kb.nextLine();
во второй и последующий раз, когда он вызывается?