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"); } } }
Благодаря Предварително!
Пробвах и така но проблемите остават, някаде бъркам яката ама вече блокирах.
Пусни си един дебъгер и виж дали си взимаш стойностите правилно. Мисля, че този формат няма да ти е нужен.
След като ми скъса нервите я докарах на 93/100 от точки един тест дава грешен отговор само че не мога да видя кои.
Ето го новият код:
Някакви идеи?
Мисля, че проблема ти идва от проверките, а имено в else if (arrivalTime < examTime). Мисля, че проверктие в този else if трябва да ги подредиш по следния начин:
- if (timeEarly <= 30)
- else if (timeEarly < 60)
-else (){}
При така подредени, ако timeEarly= 20 влиза в първия if, ако е например 50 ще подмине първия if и ще влезе във втория, и ако е например 60 или по-голямо ще влезе в else.
Опитай така, може и да пуснеш условието, ако не стане така, за да го прочета.
Виждам няколко грешки, които мога да ти ги кажа с просто око:
Какво е "Цело числен тип"? int или double?
Защо използваш printf? След като никъде не се иска да се закръгля число с %.2f. ?
Нямаш нужда от: double; printf; format;
За да пренесеш дума на нов ред не пиши два пъти System.out.print(...); , а излолзвай форматиране с "\n" за нов ред. :)
Смени всички реални типове (double) с Цело числен оператор: int
Смени printf на println или print
С това ще ти намалеят грешките.
Ако не се получи 100 ще ти оправя кода с мои променливи и по-лесни техники :)
Смених ги да осетих се че от там идват доста грешки.Качил съм 2-рия код който е само с int-тове.
И го докарах до 93/100 точки.Само един тест гърми и не мога да го хвана защо.
Дай кода да го видя
Ето го:
Тази проверка е ненужна...