Задача Cinema Tickets от Nested Loops - Lab - 0/100 (Runtime errors) в judge
Добър вечер /за пореден път/,
Някой може ли да ми помогне и да каже къде е грешката в кода ми? Примерните изходи ми излизат и не знам къде греша ...
Условие:
Примерна изпитна задача
7.*Билети за кино
Вашата задача е да напишете програма, която да изчислява процента на билетите за всеки тип от продадените билети: студентски(student), стандартен(standard) и детски(kid), за всички прожекции. Трябва да изчислите и колко процента от залата е запълнена за всяка една прожекция.
Вход
Входът е поредица от цели числа и текст:
- На първия ред до получаване на командата "Finish" - име на филма – текст
- На втори ред – свободните места в салона за всяка прожекция – цяло число [1 … 100]
- За всеки филм, се чете по един ред до изчерпване на свободните места в залата или до получаване на командата "End":
- Типа на закупения билет - текст ("student", "standard", "kid")
Изход
На конзолата трябва да се печатат следните редове:
- След всеки филм да се отпечата, колко процента от кино залата е пълна
"{името на филма} - {процент запълненост на залата}% full."
- При получаване на командата "Finish" да се отпечатат четири реда:
- "Total tickets: {общият брой закупени билети за всички филми}"
- "{процент на студентските билети}% student tickets."
- "{процент на стандартните билети}% standard tickets."
- "{процент на детските билети}% kids tickets."
Примерен вход и изход
Вход |
Изход |
Обяснения |
Taxi 10 standard kid student student standard standard End Scary Movie 6 student student student student student student Finish |
Taxi - 60.00% full. Scary Movie - 100.00% full. Total tickets: 12 66.67% student tickets. 25.00% standard tickets. 8.33% kids tickets. |
Първи филм – Taxi, местата в залата са 10 Купуват се 3 стандарти, 2 студентски, 1 детски билет и получаваме командата End. Общо 6 билета от 10 места -> 60% от залата е заета. Втори филм – Scary Movie, места в залата са 6 Купуват се 6 студентски билета и местата в залата свършват. Общо 6 билета от 6 места -> 100% от залата е заета. Получаваме командата Finish Общо закупените билети за всички филми са 12. За всички филми са закупени общо: 8 студентски билета. 8 билета от общо 12 е 66.67% 3 стандартни билета. 3 билета от общо 12 е 25% 1 детски билет. 1 билет от общо 12 е 8.33% |
Вход |
Изход |
Обяснения |
The Matrix 20 student standard kid kid student student standard student End The Green Mile 17 student standard standard student standard student End Amadeus 3 standard standard standard Finish |
The Matrix - 40.00% full. The Green Mile - 35.29% full. Amadeus - 100.00% full. Total tickets: 17 41.18% student tickets. 47.06% standard tickets. 11.76% kids tickets. |
Първи филм – The Matrix, местата в залата са 20 Купуват се 2 стандартни, 4 студентски, 2 детски билета и получаваме командата End. Общо 8 билета от 20 места -> 41.18% от залата е заета Втори филм - The Green Mile, местата в залата са 17 Купуват се 3 стандартни, 3 студентски билета и получаваме командата End. Общо 6 билета от 17 места -> 47.06% от залата е заета Трети филм – Amadeus, местата в залата са 3 Купуват се 3 стандартни билета и местата в залата свършват. Общо 3 билета от 3 места -> 100% от залата е заета. Получаваме командата Finish Общо закупените билети за всички филми са 17. За всички филми са закупени общо: 7 студентски билета. 7 билета от общо 17 е 41.18% 8 стандартни билета. 8 билета от общо 17 е 47.06% 2 детски билета. 2 билета от общо 17 е 11.76% |
Здравейте, гледах от колеги и кодът го докарах до 100. Cinema Tickets - Pastebin.com
Cinema Tickets - Pastebin.com
Въпросът ми е относно долния код: Мога ли да достъпя "movieType" в While-a, без да съм го задал първона4ално да е празен стринг?
String movieType = ""; //("student", "standard", "kid")
while (!movieType.equals("End") && currentMovieCount < freeSeats) {
movieType = scanner.nextLine();
Тук String movieType = ""; инстанцираш променливата. В условието на цикъла променливата вече се използва. Преди началото на изпълнението на кода в цикъла преди всяка итерация се проверява. Тоест не можеш да използваш нещо, което все още не съществува
Колега icowwww, имам въпрос: как while цикълът ще знае що е то movieType, ако тази променлива се дефинира вътре в него? Няма да може да провери частта от условието !movieType.equals("End").
svephoto,
благодарение на въпроса ти, си отговорих. мерси
Супер, радвам се, VasilKos
svephoto Много си прав, недогледал съм. Естествено няма как да се ползва в условието ако се инстанцира вътре в него.
Поправям коментара за да го прочете някой, без да прочете и следващите:
Wrong:
Тук String movieType = ""; инстанцираш променливата. Вътре в цикъла стойността се променя.
Може да бъде вкарано вътре в цикъла като я инстанцираш всеки път
while (!movieType.equals("End") && currentMovieCount < freeSeats) {
String movieType = scanner.nextLine();
Няма да има видима промяна в ресурс и време дори при голям брой операции, но ще покриеш правилото да се декларират променливите във възможно най-малък scope. Което ще подобри подредбата на кода и четенето му.