Как сделать заявление о переключении более точным?

1

Мы просили сделать программу, используя инструкцию switch.

Вот мой код:

    double price = 0, totalPrice;

    System.out.print("Enter the number of your choice: ");
    int optionNumber = Integer.parseInt(kb.readLine());

    switch(optionNumber)
    {
        case 1:
            price = 190.00;
            break;
        case 2:
            price = 410.00;
            break;
        default:
            System.out.println("ERROR: Invalid number!");
            break;
    }

    System.out.print("Enter quantity: ");
    int quantity = Integer.parseInt(kb.readLine());

    totalPrice = price * quantity;

Таким образом, в основном пользователь вводит определенный номер, и он будет иметь разные цены... внутри операторов switch. но если пользователь вводит неправильный номер, он отображает сообщение об ошибке, и я не хочу, чтобы пользователь вводил количество, которое будет исполнено после оператора switch. нам не разрешено использовать какие-либо методы или функции, и я не хочу повторно вводить код следующим образом:

    System.out.print("Enter the number of your choice: ");
    int optionNumber = Integer.parseInt(kb.readLine());

    switch(optionNumber)
    {
        case 1:
            price = 190.00;
            System.out.print("Enter quantity: ");
            int quantity = Integer.parseInt(kb.readLine());
            totalPrice = price * quantity;
            System.out.print("Total price: " + totalPrice);
            break;
        case 2:
            price = 410.00;
            System.out.print("Enter quantity: ");
            int quantity = Integer.parseInt(kb.readLine());
            totalPrice = price * quantity;
            System.out.print("Total price: " + totalPrice);
            break;
        default:
            System.out.println("ERROR: Invalid number!");
            break;
    }

есть ли другой способ не использовать, если иначе, методы, функции или кодирование неоднократно? ЛЮБАЯ ПОМОЩЬ БУДЕТ ПРИЗНАНА.

  • 3
    Может быть, просто return при ловле по default вариант?
  • 0
    Вы должны использовать цикл, вероятно.
Показать ещё 5 комментариев
Теги:

4 ответа

1
Лучший ответ

Вы можете использовать логический флаг и сделать его ложным, если выбрана неверная опция.
Тогда только спросите пользователя, если флаг имеет значение true.

    System.out.print("Enter the number of your choice: ");
    int optionNumber = Integer.parseInt(kb.readLine());
    boolean flag = true;
    switch (optionNumber) {
        case 1:
            price = 190.00;
            break;
        case 2:
            price = 410.00;
            break;
        default:
            flag = false;
            System.out.println("ERROR: Invalid number!");
            break;
    }
    if (flag) {
        System.out.print("Enter quantity: ");
        int quantity = Integer.parseInt(kb.readLine());
        totalPrice = price * quantity;
        System.out.print("Total price: " + totalPrice);
    }
  • 0
    это здорово!!!! большое спасибо!!!!!!! : D
1

Используйте как это:

while(!valid option)
   //do this stuff

Используйте флаг и установите для него значение true, если введенный номер действителен, поэтому он перейдет к следующей инструкции; иначе попросите снова ввести.

0

Выбросить исключение

  default:
            throw new InvalidArgumentException("Invalid number!");

См. Также InvalidArgumentException vs UnexpectedValueException

0

Вы можете просто удалить default из оператора switch и проверить, равна ли цена 0 после оператора switch

double price = 0, totalPrice;

System.out.print("Enter the number of your choice: ");
int optionNumber = Integer.parseInt(kb.readLine());

switch(optionNumber)
{
    case 1:
        price = 190.00;
        break;
    case 2:
        price = 410.00;
        break;
}

if (price == 0)
{
     System.out.println("ERROR: Invalid number!");
}
else
{
    System.out.print("Enter quantity: ");
    int quantity = Integer.parseInt(kb.readLine());
    totalPrice = price * quantity;
    System.out.print("Total price: " + totalPrice);
}

Это не позволяет вам добавлять ненужные переменные (например, логический флаг), если у вас уже есть (price) со значением по умолчанию 0 которым вы можете проверить.

  • 0
    Цитируя OP: есть ли другой способ не использовать если еще [...] , if else не вариант (не знаю, почему трудно)
  • 0
    @ Narmer Я думаю, он говорит об использовании операторов if/else многократно, как внутри каждого case . Вот как я понял вопрос в любом случае. Я думаю, что единственное утверждение if/else будет в порядке, как я читаю вопрос. "есть ли другой способ не использовать if else, методы, функции или кодирование повторно ?"
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню