Loading...
batroni avatar batroni 2 Точки

Проблем със задача 6. Торта от While Loop упражненията

Здравейте колеги, 

някой може ли да помогне с тази задача. Нещото което не разбирам е защо иска да се натисне ENTER след като се изпълни while цикъла за да влезе в if проверката?  Проблема е при подаване на тези данни:

10
10
20
20
20
20
21

Когато има команда "STOP" няма проблем, но когато няма Judge казва: Exception in thread "main" java.util.NoSuchElementException: No line found

Условие: Поканени сте на 30-ти рожден ден, на който рожденикът черпи с огромна торта. Той обаче не знае колко парчета могат да си вземат гостите от нея. Вашата задача е да напишете програма, която изчислява броя на парчетата, които гостите са взели, преди тя да свърши. Ще получите размерите на тортата в сантиметри (широчина и дължина – цели числа в интервала [1...1000]) и след това на всеки ред, до получаване на командата "STOP" или докато не свърши тортата, броят на парчетата, които гостите вземат от нея. Парчетата са квадратни с размер  1 см .

Да се отпечата на конзолата един от следните редове:

  • "{брой парчета} pieces are left." - ако стигнете до STOP и има останали парчета торта.
  • "No more cake left! You need {брой недостигащи парчета} pieces more."
package com.company;

import java.util.Scanner;

public class cake {

    public static void main(String[] args) {

        Scanner scanner = new Scanner(System.in);

        int a = Integer.parseInt(scanner.nextLine());
        int b = Integer.parseInt(scanner.nextLine());
        int cakeSize = a * b;

        String command = scanner.nextLine();

        while (cakeSize > 0 && !command.equals("STOP")) {

            int newCommand = Integer.parseInt(command);
            cakeSize -= newCommand;
            command = scanner.nextLine();

        }

        if (cakeSize > 0) {
            System.out.printf("%d pieces are left.", cakeSize);
        } else {
            System.out.printf("No more cake left! You need %d pieces more.", Math.abs(cakeSize));
        }
    }
}

Благодаря ви

Тагове:
0
Programming Basics with Java 14/02/2021 09:53:03
MANEKENA avatar MANEKENA 118 Точки

Махни cakeSize > 0 && от while и направи тази проверка преди command = scanner.nextLine(); 

if(cakeSize <=0){

break;

}

command = scanner.nextLine(); 

така ако вече ти е свършила тортата ,няма да четеш от входа повече защото е ненужно

 

0
14/02/2021 13:12:18
MartinBG avatar MartinBG 4803 Точки

Проблемът е, че проверката за прекъсване на четенето на входните данни е в условието на while цикъла, а в тялото му има команда за прочитане на още един ред.

Например, при входни данни:

2
2
5
        String command = scanner.nextLine(); // "5"

        while (cakeSize > 0 && !command.equals("STOP")) {
            int newCommand = Integer.parseInt(command); // 5
            cakeSize -= newCommand; // 4 -= 5 -> cakeSize = -1
            command = scanner.nextLine(); // проблем - очаква се нов вход
        }

Проблемът може да се реши, ако се вкара допълнителна проверка в тялото на цикъла:

        while (cakeSize > 0 && !command.equals("STOP")) {
            int newCommand = Integer.parseInt(command);
            cakeSize -= newCommand;

            if (cakeSize <= 0) {
                break; // прекъсване на while цикъла
            }

            command = scanner.nextLine();
        }

Алтернативно решение:

        String command;
        while (cakeSize > 0 && !"STOP".equals(command = scanner.nextLine())) {
            cakeSize -= Integer.parseInt(command);
        }

 

0
Можем ли да използваме бисквитки?
Ние използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Можете да се съгласите с всички или част от тях.
Назад
Функционални
Използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Използваме „сесийни“ бисквитки, за да Ви идентифицираме временно. Те се пазят само по време на активната употреба на услугите ни. След излизане от приложението, затваряне на браузъра или мобилното устройство, данните се трият. Използваме бисквитки, за да предоставим опцията „Запомни Ме“, която Ви позволява да използвате нашите услуги без да предоставяте потребителско име и парола. Допълнително е възможно да използваме бисквитки за да съхраняваме различни малки настройки, като избор на езика, позиции на менюта и персонализирано съдържание. Използваме бисквитки и за измерване на маркетинговите ни усилия.
Рекламни
Използваме бисквитки, за да измерваме маркетинг ефективността ни, броене на посещения, както и за проследяването дали дадено електронно писмо е било отворено.