Напишите программу, которая спросит пользователя о количестве билетов и итоговой сумме

Напишите программу, которая спросит пользователя о количестве билетов для взрослых, количестве билетов для детей, о том, хотят ли они зарезервировать или сделать общий прием, и есть ли у них радио-ваучер для использования. Рассчитать стоимость заказа.

Есть два уровня билетов, зарезервированные по 55 долларов США каждый или общие входные билеты по 35 долларов США каждый. Дети до 12 лет - наполовину. На местной радиостанции работает спец. Если вы позвоните, они вышлют вам ваучер, который даст вам скидку 20%.

Все заказы на сумму более 200 долларов США получают скидку 10% от окончательной цены (после применения других скидок), а заказы на сумму более 400 долларов США получают скидку 15%.

Мой код до сих пор...

public static void main(String[] args) {
    // variables
    int adultTix;
    int childTix;
    int GENERAL_ADMISSION = 35;
    int RESERVED = 55;
    double radioDiscount = .20;
    double ticketTotal = 0;

    Scanner scan = new Scanner(System.in);
    System.out.println("How many adult tickets?");
    adultTix = scan.nextInt();
    System.out.println("How many kids tickets?");
    childTix = scan.nextInt();
    scan.nextLine();
    System.out.println("Reserved tickets are $55 each and General Admission is $35."
                    + " Would you like Reserved or General Admission? (enter GA or RE only):");
    String tixType = scan.nextLine();
    if (tixType == "GA" || tixType == "ga") 

        ticketTotal = ((adultTix * GENERAL_ADMISSION) + ((childTix * GENERAL_ADMISSION) / 2));
    else if (tixType == "RE" || tixType == "re")
        ticketTotal = ((adultTix * RESERVED) + ((childTix * RESERVED) / 2));

    System.out.println("Do you have a radio voucher? (enter yes or no):");
    String radioQ = scan.nextLine();

    if (radioQ == "yes")
        System.out.print("With the radio discount, you will save 20%!");
         if (radioQ == "no")
            System.out.println("No radio discount.");

         double radioT;
    radioT = ((ticketTotal - (ticketTotal * radioDiscount)));
    if (radioT >= 200 && radioT < 400)
        System.out.println("With a 10% discount, your total is: $"
                + (radioT * .9));
    else if (radioT > 400)
        System.out.println("With a 15% discount, your total is: $"
                + (radioT * .85));
    scan.close();
}

}

Правильно задает все вопросы, но не возвращает результат. Это простая программа на Java, поэтому я хотел бы получить самый простой ответ

2 ответа

Решение

Пара вопросов:

  • При проверке на равенство между объектами, вы всегда должны использовать метод equals и теперь "==", что означает, что вы сравниваете ссылку на два объекта. Так что измените следующее из

    if (tixType == "GA" || tixType == "ga")

С

if (tixType.equalsIgnoreCase("ga")) 

То же самое для сравнения других строк.

  • После того, как вы спросите, есть ли у пользователя радио-ваучер или нет, вам следует только выполнить вычисления, связанные с радио-ваучером, например:

    if (radioQ == "yes")//use equalsIgnoreCase method of String
       System.out.print("With the radio discount, you will save 20%!");
       radioT = ((ticketTotal - (ticketTotal * radioDiscount)));
       if (radioT >= 200 && radioT < 400)
           System.out.println("With a 10% discount, your total is: $"
            + (radioT * .9));
       else if (radioT > 400)
           System.out.println("With a 15% discount, your total is: $"
             + (radioT * .85));
       //apply discount on ticket total?
    } else ...
    

Проблема в том, что ни один из ваших ifс и elseОни стреляют правильно, потому что вы сравниваете свои строки неправильно.

Вместо if (str == "value") тебе нужно if (str.equals("value")) везде. В тех случаях, когда вы хотите сопоставление без учета регистра, например if (str == "value" || str == "VALUE") тебе нужно if (str.equalsIgnoreCase("value")) вместо.

Пожалуйста, ознакомьтесь Как сравнить строки в Java? для получения дополнительной информации

Другие вопросы по тегам