Не могу правильно рассчитать цикл - PullRequest
0 голосов
/ 16 мая 2019

В настоящее время я выполняю задание для простой системы создания билетов, и я озадачен тем, как цикл вычисляется неправильно.

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

Мне помогли здесь и лично мой код, и я озадачен, почему этот цикл не работает должным образом! Один цикл рассчитывается идеально, однако второй цикл не работает.

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

package ticketingsystem

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;


public class ticketingsystem {

    /**
     *
     * @param args
     * @throws IOException
     */
    public static void main(String[] args) throws IOException {

    BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
    String order, again;
    int quantity = 0;
    double totalPrice;
        totalPrice = 0;
    TicketType ticketType;

    System.out.println("  ");

    System.out.println("Welcome to the cinemas!");

    System.out.println(" ");
    System.out.println("MAIN MENU");
    System.out.println(" ");
    System.out.println("The cinema has the following options");
    System.out.println(" ");
    System.out.println("1 = Child (4-5 yrs)");
    System.out.println("2 = Adult (18+ yrs)");
    System.out.println("3 = Senior (60+ yrs)");

    do {
      System.out.println(" ");
      System.out.print("Enter your option: ");
      order = br.readLine();

      switch (order.toLowerCase()) {
        case "1":
          ticketType = TicketType.child;
          break;

        case "3":
          ticketType = TicketType.senior;
          break;

        default:
          ticketType = TicketType.adult;
          break;
      }

      System.out.print("Enter the number of tickets: ");
      quantity = Integer.parseInt(br.readLine());

      totalPrice += ticketType.getPrice() * quantity;
      System.out.printf("You are purchasing %s tickets at %.2f \n", ticketType, ticketType.getPrice());

      System.out.print("Do you wish to continue?  (Y/N) : ");
      again = br.readLine(); 
    }
    while (again.equalsIgnoreCase("y"));

    System.out.println(" ");
    System.out.printf("Total Price           : $%.2f \n", totalPrice);
  }
}

Я также связал цены на билеты с enum-классом, детали приведены ниже:

package ticketingsystem;

/**
 *
 * @author 
 */
enum TicketType {
    child(18), adult(36), senior(32.5);

    TicketType(double price) {
        this.price = price;
    }

    private double price;

    public double getPrice() {
        return price;
    }
}

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

Нет сообщения об ошибке, однако система не выводит после ввода типа и количества тикетов во время второго цикла.

Ответы [ 3 ]

2 голосов
/ 16 мая 2019

FWIW, я также только что попробовал код из вашего оригинального размещенного вопроса.

Единственное, что неправильно с кодом в вашем вопросе, было отсутствие точки с запятой в выражении пакета в public class ticketingsystem главном классе.

Это ошибка, которая означала, что при компиляции произошел сбой и просто запустилась предыдущая версия кода. Возможно, именно поэтому вы не получили ожидаемого результата (у вас была старая версия).

Вот расшифровка моего сеанса с использованием вашего точного кода (плюс точка с запятой в выражении пакета основного класса):

Welcome to the cinemas!

MAIN MENU

The cinema has the following options

1 = Child (4-5 yrs)
2 = Adult (18+ yrs)
3 = Senior (60+ yrs)

Enter your option: 1
Enter the number of tickets: 2
You are purchasing child tickets at 18.00 
Do you wish to continue?  (Y/N) : y

Enter your option: 2
Enter the number of tickets: 3
You are purchasing adult tickets at 36.00 
Do you wish to continue?  (Y/N) : n

Total Price           : $144.00 

Дорогой кинотеатр!

FWIW, как сказал Р. Катнаан, вы должны следовать правилам синтаксиса. Однако использование заглавных букв имен элементов enum не является правилом языка. Это высоко защищенная конвенция (стандарт кодирования). Я согласен, что вы должны использовать заглавные буквы для своих элементов enum, но это не то, что нарушило код согласно вашему вопросу ...

Если вы следуете этому соглашению о кодировании, вам также следует использовать Capital CamelCase для классов (имен интерфейсов и перечислений) и других. Например, используйте public class TicketingSystem, а не public class ticketingsystem. Ниже приведено несколько руководств по соглашениям об именах. Помните, что это руководства, а не правила, применяемые компилятором:

Соглашения важны, поскольку они дают читателю вашего кода некоторые подсказки относительно того, на что они могут смотреть. Например, если я увижу x = SOME_VALUE;, я буду считать, что x присваивается константа, а не x = someValue;. Я предполагаю, что x присваивается значение из другой переменной. И так далее ...

1 голос
/ 16 мая 2019

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

Welcome to the cinemas!

MAIN MENU

The cinema has the following options

1 = Child (4-5 yrs)
2 = Adult (18+ yrs)
3 = Senior (60+ yrs)

Enter your option: 2
Enter the number of tickets: 2
You are purchasing adult tickets at 36.00 
Do you wish to continue?  (Y/N) : Y

Enter your option: 3
Enter the number of tickets: 1
You are purchasing senior tickets at 32.50 
Do you wish to continue?  (Y/N) : Y

Enter your option: 1
Enter the number of tickets: 1
You are purchasing child tickets at 18.00 
Do you wish to continue?  (Y/N) : N

Total Price           : $122.50 
0 голосов
/ 16 мая 2019

Когда я пытался использовать следующие коды, все работает хорошо.

package mm.com.java.so.test;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class TicketingSystem {

    enum TicketType {

        CHILD(18), ADULT(36), SENIOR(32.5);

        TicketType(double price) {
            this.price = price;
        }

        private double price;

        public double getPrice() {
            return price;
        }
    }

    public static void main(String[] args) throws IOException {

        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

        String type, again;
        int quantity = 0;
        double totalPrice = 0;
        TicketType ticketType;

        System.out.println("Welcome to the cinemas!\n");

        System.out.println("MAIN MENU\n");
        System.out.println("The cinema has the following options\n");
        System.out.println("1 = Child (4-5 yrs)");
        System.out.println("2 = Adult (18+ yrs)");
        System.out.println("3 = Senior (60+ yrs)");

        do {

            System.out.print("\nEnter your option: ");

            type = br.readLine();

            switch (type) {
                case "1":
                    ticketType = TicketType.CHILD;
                    break;

                case "2":
                    ticketType = TicketType.ADULT;
                    break;

                default:
                    ticketType = TicketType.SENIOR;
                    break;
            }

            System.out.print("Enter the number of tickets: ");

            quantity = Integer.parseInt(br.readLine());

            totalPrice += ticketType.getPrice() * quantity;

            System.out.printf("--> You are purchasing %s - %s Ticket(s) at $%s\n", quantity, ticketType, ticketType.getPrice());

            System.out.print("\nDo you wish to continue?  (Y/N) : ");

            again = br.readLine();

        } while (again.equalsIgnoreCase("y"));

        System.out.printf("\n==> Total Price : $%s \n", totalPrice);
    }
}

Вы можете проверить мой результат теста здесь.

Welcome to the cinemas!

MAIN MENU

The cinema has the following options

1 = Child (4-5 yrs)
2 = Adult (18+ yrs)
3 = Senior (60+ yrs)

Enter your option: 1
Enter the number of tickets: 1
--> You are purchasing 1 - CHILD Ticket(s) at $18.0

Do you wish to continue?  (Y/N) : y

Enter your option: 2
Enter the number of tickets: 2
--> You are purchasing 2 - ADULT Ticket(s) at $36.0

Do you wish to continue?  (Y/N) : y

Enter your option: 3
Enter the number of tickets: 3
--> You are purchasing 3 - SENIOR Ticket(s) at $32.5

Do you wish to continue?  (Y/N) : n

==> Total Price : $187.5    

ПРИМЕЧАНИЕ :: Если выявляясь разработчиком JAVA, вы должны соблюдать правила и положения JAVA при кодировании (например, имя класса).Я отформатировал твой код.Пожалуйста, проверьте внимательно.

Этот код работал без ошибок на моем ПК.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...