Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- Да се имплементира класа TimeTable која ќе чита од влезен тек (стандарден влез, датотека, ...) податоци за времиња во 24-часовен формат. Сите времиња се разделени со едно празно место, а во самото време часот и минутите може да бидат разделени со : или .. Пример за форматот на податоците:
- 11:15 0.45 23:12 15:29 18.46
- Ваша задача е да ги имплементирате методите:
- TimeTable() - default конструктор
- void readTimes(InputStream inputStream) - метод за читање на податоците
- void writeTimes(OutputStream outputStream, TimeFormat format) - метод кој ги печати сите времиња сортирани во растечки редослед во зададениот формат (24 часовен или AM/PM).
- Методот за читање readTimes фрла исклучоци од тип UnsupportedFormatException ако времињата се разделени со нешто друго што не е : или . и InvalidTimeException ако времето (часот или минутите) е надвор од дозволениот опсег (0-23, 0-59). И двата исклучоци во пораката getMessage() треба да го вратат влезниот податок кој го предизвикал исклучокот. Сите времиња до моментот кога ќе се фрли некој од овие два исклучоци треба да си останат вчитани.
- Правила за конверзија од 24-часовен формат во AM/PM:
- за првиот час од денот (0:00 - 0:59), додадете 12 и направете го "AM"
- од 1:00 до 11:59, само направето го "AM"
- од 12:00 до 12:59, само направето го "PM"
- од 13:00 до 23:59 одземете 12 и направете го "PM"
- import java.io.*;
- import java.util.ArrayList;
- import java.util.List;
- import java.util.stream.Collectors;
- public class TimesTest {
- public static void main(String[] args) throws IOException {
- TimeTable timeTable = new TimeTable();
- timeTable.readTimes(System.in);
- System.out.println("24 HOUR FORMAT");
- timeTable.writeTimes(System.out, TimeFormat.FORMAT_24);
- System.out.println("AM/PM FORMAT");
- timeTable.writeTimes(System.out, TimeFormat.FORMAT_AMPM);
- }
- }
- enum TimeFormat {
- FORMAT_24, FORMAT_AMPM
- }
- class Time implements Comparable<Time> {
- private int hour;
- private int minutes;
- private String wholeString;
- public Time(int hour, int minutes, String wholeString) {
- this.hour = hour;
- this.minutes = minutes;
- this.wholeString = wholeString;
- }
- public String getWholeString() {
- return wholeString;
- }
- public String getAMPMString(){
- int pomHour = 0;
- String AMPM = null;
- if(hour == 0){
- pomHour = 12;
- AMPM = "AM";
- }else if(hour == 12){
- pomHour = hour;
- AMPM = "PM";
- }
- else if(hour>12){
- pomHour = (hour - 12);
- AMPM = "PM";
- }else if(hour>0){
- AMPM = "AM";
- pomHour = hour;
- }
- return String.format("%2d:%02d %s",pomHour,minutes,AMPM);
- }
- @Override
- public String toString() {
- return wholeString;
- }
- public static Time createTime(String line) throws InvalidTimeException, UnsupportedFormatException {
- int hour,minutes;
- if (line.contains(":")) {
- hour = Integer.parseInt(line.substring(0,line.indexOf(":")));
- minutes = Integer.parseInt(line.substring(line.indexOf(":")+1));
- }else if(line.contains(".")){
- hour = Integer.parseInt(line.substring(0,line.indexOf(".")));
- minutes = Integer.parseInt(line.substring(line.indexOf(".")+1));
- } else throw new UnsupportedFormatException(line);
- return new Time(hour,minutes,String.format("%2d:%02d",hour,minutes));
- }
- @Override
- public int compareTo(Time o) {
- int res = Integer.compare(this.hour, o.hour);
- if (res == 0)
- return Integer.compare(this.minutes, o.minutes);
- return res;
- }
- }
- class TimeTable {
- List<Time> timeList;
- public TimeTable() {
- timeList = new ArrayList<>();
- }
- void readTimes(InputStream inputStream) throws IOException {
- BufferedReader br = new BufferedReader(new InputStreamReader(inputStream));
- String line = null;
- while ((line = br.readLine()) != null) {
- try {
- String[] parts = line.split("\\s+");
- for (String part : parts) {
- timeList.add(Time.createTime(part));
- }
- } catch (InvalidTimeException e) {
- System.out.println(e.getMessage());
- } catch (UnsupportedFormatException e) {
- System.out.println(e.getMessage());
- ;
- }
- }
- }
- public void writeTimes(OutputStream out, TimeFormat format) {
- PrintWriter pw = new PrintWriter(new OutputStreamWriter(out), true);
- String result = null;
- switch (format) {
- case FORMAT_24:
- result = getFormat24Times();
- break;
- case FORMAT_AMPM:
- result = getFormatAMPM();
- break;
- default:
- return;
- }
- pw.println(result);
- }
- private String getFormatAMPM() {
- StringBuilder sb = new StringBuilder();
- List<Time> temp = timeList.stream().sorted(Time::compareTo).collect(Collectors.toList());
- for (Time t : temp) {
- sb.append(t.getAMPMString()).append("\n");
- }
- return sb.substring(0,sb.length()-1);
- }
- private String getFormat24Times() {
- StringBuilder sb = new StringBuilder();
- List<Time> temp = timeList.stream().sorted(Time::compareTo).collect(Collectors.toList());
- for (Time t : temp) {
- sb.append(t.getWholeString()).append("\n");
- }
- return sb.substring(0,sb.length()-1);
- }
- }
- class UnsupportedFormatException extends Exception {
- public UnsupportedFormatException(String str) {
- super("UnsupportedFormatException: " + str);
- }
- @Override
- public String getMessage() {
- return super.getMessage();
- }
- }
- class InvalidTimeException extends Exception {
- public InvalidTimeException(String message) {
- super("InvalidTimeException: " + message);
- }
- @Override
- public String getMessage() {
- return super.getMessage();
- }
- }
- Sample input
- 11:15 0.45 23:12
- 15:29 18-46
- Sample output
- UnsupportedFormatException: 18-46
- 24 HOUR FORMAT
- 0:45
- 11:15
- 15:29
- 23:12
- AM/PM FORMAT
- 12:45 AM
- 11:15 AM
- 3:29 PM
- 11:12 PM
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement