Loading...
Tarantula83 avatar Tarantula83 3 Точки

On Time for the Exam

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

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

При Вход 16, 00, 15, 00 ми отпечатва Early 1 hours before the start а трябва да 1:00 как да го направя?

При Вход 11, 30, 8, 12 ми отпеватва Early 3,318 hours before the start а трябва да бъде 3:18 тоест как да махна 3-ката ?

При Вход 9, 00, 10, 30 ми отпечатва Late 1,5 hours after the start а трябва да е 1:30 и тук вече нямам идей как да го оправя?

Ето го и кода ми:

import java.text.DecimalFormat;
import java.util.Scanner;

public class OnTimeForTheExam {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        DecimalFormat format = new DecimalFormat("0.##");

        int examHour = Integer.parseInt(scanner.nextLine());
        int examMinute = Integer.parseInt(scanner.nextLine());
        int hourOfArrival = Integer.parseInt(scanner.nextLine());
        int minuteOfArrival = Integer.parseInt(scanner.nextLine());

        double examTime = (examHour * 60) + examMinute;
        double arrivalTime = (hourOfArrival * 60) + minuteOfArrival;

        if (arrivalTime > examTime){
            double timeLate = arrivalTime - examTime;
            if (timeLate > 60){
                double hoursLate = timeLate / 60;
                double minuteLate = timeLate % 60;
                System.out.println("Late");
                System.out.printf(format.format(hoursLate) + " hours after the start",minuteLate);

            }else if (timeLate <= 60){
                System.out.println("Late");
                System.out.printf(format.format(timeLate) + " minutes after the start");
            }
        }
        else if (arrivalTime < examTime){
            double timeEarly = examTime - arrivalTime;
            if ((timeEarly > 30) && (timeEarly < 60)){
                double hoursEarly = timeEarly / 60;
                double minuteEarly = timeEarly % 60;
                System.out.println("Early");
                System.out.printf(format.format(hoursEarly) +  format.format(minuteEarly) + " minutes before the start");

            }else if ((timeEarly >= 30) && (timeEarly >= 60 )){
                double hoursEarly = timeEarly / 60;
                double minuteEarly = timeEarly % 60;
                System.out.println("Early");
                System.out.printf(format.format(hoursEarly) +  format.format(minuteEarly) + " hours before the start");

            }else if (timeEarly <= 30){
                System.out.println("On time");
                System.out.printf(format.format(timeEarly) + " minutes before the start");
            }
        }
        else if (arrivalTime == examTime){
            System.out.println("On time");
        }
    }
}

Благодаря Предварително!

Тагове:
0
Programming Basics
e.manolov avatar e.manolov 80 Точки

От това, което виждам мисля, че не ти трябва double (double examTime), използвай int. А итносно отпечатването принтирай просто на конзолата hoursLate + ":" +  minuteLate примерно. Не го знам точния синтакс на Java, но мисля, че ще ме разбереш.

 

0
Tarantula83 avatar Tarantula83 3 Точки

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

0
e.manolov avatar e.manolov 80 Точки

Пусни си един дебъгер и виж дали си взимаш стойностите правилно. Мисля, че този формат няма да ти е нужен.

0
Tarantula83 avatar Tarantula83 3 Точки

След като ми скъса нервите я докарах на 93/100 от точки един тест дава грешен отговор само че не мога да видя кои.

Ето го новият код:

import java.util.Scanner;

public class OnTimeForTheExam {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);


        int examHour = Integer.parseInt(scanner.nextLine());
        int examMinute = Integer.parseInt(scanner.nextLine());
        int hourOfArrival = Integer.parseInt(scanner.nextLine());
        int minuteOfArrival = Integer.parseInt(scanner.nextLine());

        int examTime = Math.abs(examHour * 60) + examMinute;
        int arrivalTime = Math.abs(hourOfArrival * 60) + minuteOfArrival;

        if (arrivalTime > examTime){
            int timeLate = arrivalTime - examTime;
            if (timeLate > 60){
                int hoursLate = timeLate / 60;
                int minuteLate = timeLate % 60;
                System.out.println("Late");
                System.out.printf("%d:%02d hours after the start",hoursLate,minuteLate);

            }else if (timeLate <= 60){

                int minuteLate = timeLate % 60;
                System.out.println("Late");
                System.out.printf("%d minutes after the start",minuteLate);
            }
        }
        else if (arrivalTime < examTime){
            int timeEarly = examTime - arrivalTime;
            if ((timeEarly > 30) && (timeEarly < 60)){

                int minuteEarly = timeEarly % 60;
                System.out.println("Early");
                System.out.printf("%d minutes before the start",minuteEarly);

            }else if ((timeEarly >= 30) && (timeEarly >= 60 )){
                int hoursEarly = timeEarly / 60;
                int minuteEarly = timeEarly % 60;
                System.out.println("Early");
                System.out.printf("%d:%02d hours before the start",hoursEarly,minuteEarly);

            }else if (timeEarly <= 30){

                int minuteEarly = timeEarly % 60;
                System.out.println("On time");
                System.out.printf("%d minutes before the start",minuteEarly);
            }
        }
        else if (arrivalTime == examTime){
            System.out.println("On time");
        }
    }
}

Някакви идеи?

0
Edzhevit avatar Edzhevit 79 Точки

Няма нужда от double, можеш да го направиш цялото с едночислени типове и този decimal ти е излишен тогава. После timeLate го направи преди да почнеш проверката и почни проверката от нея. Ето ти моя код :

https://pastebin.com/5j6XERw6

0
Tarantula83 avatar Tarantula83 3 Точки

Оправих я 100/100 точки даде просто бях изтървал едно = на първата проверка затова се чупеше на един тест.

Вече е готова :)

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