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
e.manolov avatar e.manolov 80 Точки

Мисля, че проблема ти идва от проверките, а имено в  else if (arrivalTime < examTime). Мисля, че проверктие в този else if трябва да ги подредиш по следния начин:

-  if (timeEarly <= 30)

- else if (timeEarly < 60)

-else (){}

 

При така подредени, ако timeEarly= 20 влиза в първия if, ако е например 50 ще подмине първия if и ще влезе във втория, и ако е например 60 или по-голямо ще влезе в else.

Опитай така, може и да пуснеш условието, ако не стане така, за да го прочета.

 

 

0
04/10/2018 08:48:03
donsavage avatar donsavage 4 Точки

Виждам няколко грешки, които мога да ти ги кажа с просто око:

Какво е "Цело числен тип"? int или double?

Защо използваш printf? След като никъде не се иска да се закръгля число с %.2f. ?

Нямаш нужда от: double; printf; format;

За да пренесеш дума на нов ред не пиши два пъти System.out.print(...); , а излолзвай форматиране с "\n" за нов ред. :)

Смени всички реални типове (double) с Цело числен оператор: int

Смени printf на println или print

 

С това ще ти намалеят грешките.

Ако не се получи 100 ще ти оправя кода с мои променливи и по-лесни техники :)

0
04/10/2018 16:47:55
Tarantula83 avatar Tarantula83 3 Точки

Смених ги да осетих се че от там идват доста грешки.Качил съм 2-рия код който е само с int-тове.

И го докарах до 93/100 точки.Само един тест гърми и не мога да го хвана защо.

 

0
donsavage avatar donsavage 4 Точки

Дай кода да го видя

0
Tarantula83 avatar Tarantula83 3 Точки

Ето го:

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
Lachezar.Ivanov avatar Lachezar.Ivanov 14 Точки
else if ((timeEarly >= 30) && (timeEarly >= 60 ))

Тази проверка е ненужна...

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