Advertisement
SashkoKlincharov

[Java][НП] - TimeTable

Aug 27th, 2021
57
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 7.21 KB | None | 0 0
  1.  
  2.  
  3. Да се имплементира класа TimeTable која ќе чита од влезен тек (стандарден влез, датотека, ...) податоци за времиња во 24-часовен формат. Сите времиња се разделени со едно празно место, а во самото време часот и минутите може да бидат разделени со : или .. Пример за форматот на податоците:
  4.  
  5. 11:15 0.45 23:12 15:29 18.46
  6.  
  7. Ваша задача е да ги имплементирате методите:
  8.  
  9. TimeTable() - default конструктор
  10. void readTimes(InputStream inputStream) - метод за читање на податоците
  11. void writeTimes(OutputStream outputStream, TimeFormat format) - метод кој ги печати сите времиња сортирани во растечки редослед во зададениот формат (24 часовен или AM/PM).
  12. Методот за читање readTimes фрла исклучоци од тип UnsupportedFormatException ако времињата се разделени со нешто друго што не е : или . и InvalidTimeException ако времето (часот или минутите) е надвор од дозволениот опсег (0-23, 0-59). И двата исклучоци во пораката getMessage() треба да го вратат влезниот податок кој го предизвикал исклучокот. Сите времиња до моментот кога ќе се фрли некој од овие два исклучоци треба да си останат вчитани.
  13.  
  14. Правила за конверзија од 24-часовен формат во AM/PM:
  15.  
  16. за првиот час од денот (0:00 - 0:59), додадете 12 и направете го "AM"
  17. од 1:00 до 11:59, само направето го "AM"
  18. од 12:00 до 12:59, само направето го "PM"
  19. од 13:00 до 23:59 одземете 12 и направете го "PM"
  20.  
  21.  
  22.  
  23. import java.io.*;
  24. import java.util.ArrayList;
  25. import java.util.List;
  26. import java.util.stream.Collectors;
  27.  
  28. public class TimesTest {
  29.  
  30. public static void main(String[] args) throws IOException {
  31. TimeTable timeTable = new TimeTable();
  32. timeTable.readTimes(System.in);
  33. System.out.println("24 HOUR FORMAT");
  34. timeTable.writeTimes(System.out, TimeFormat.FORMAT_24);
  35. System.out.println("AM/PM FORMAT");
  36. timeTable.writeTimes(System.out, TimeFormat.FORMAT_AMPM);
  37. }
  38.  
  39. }
  40.  
  41. enum TimeFormat {
  42. FORMAT_24, FORMAT_AMPM
  43. }
  44.  
  45. class Time implements Comparable<Time> {
  46. private int hour;
  47. private int minutes;
  48. private String wholeString;
  49.  
  50. public Time(int hour, int minutes, String wholeString) {
  51. this.hour = hour;
  52. this.minutes = minutes;
  53. this.wholeString = wholeString;
  54. }
  55.  
  56. public String getWholeString() {
  57. return wholeString;
  58. }
  59. public String getAMPMString(){
  60. int pomHour = 0;
  61. String AMPM = null;
  62. if(hour == 0){
  63. pomHour = 12;
  64. AMPM = "AM";
  65. }else if(hour == 12){
  66. pomHour = hour;
  67. AMPM = "PM";
  68. }
  69. else if(hour>12){
  70. pomHour = (hour - 12);
  71. AMPM = "PM";
  72. }else if(hour>0){
  73. AMPM = "AM";
  74. pomHour = hour;
  75. }
  76. return String.format("%2d:%02d %s",pomHour,minutes,AMPM);
  77. }
  78.  
  79. @Override
  80. public String toString() {
  81. return wholeString;
  82. }
  83.  
  84. public static Time createTime(String line) throws InvalidTimeException, UnsupportedFormatException {
  85. int hour,minutes;
  86. if (line.contains(":")) {
  87. hour = Integer.parseInt(line.substring(0,line.indexOf(":")));
  88. minutes = Integer.parseInt(line.substring(line.indexOf(":")+1));
  89. }else if(line.contains(".")){
  90. hour = Integer.parseInt(line.substring(0,line.indexOf(".")));
  91. minutes = Integer.parseInt(line.substring(line.indexOf(".")+1));
  92. } else throw new UnsupportedFormatException(line);
  93. return new Time(hour,minutes,String.format("%2d:%02d",hour,minutes));
  94. }
  95.  
  96. @Override
  97. public int compareTo(Time o) {
  98. int res = Integer.compare(this.hour, o.hour);
  99. if (res == 0)
  100. return Integer.compare(this.minutes, o.minutes);
  101. return res;
  102. }
  103. }
  104.  
  105. class TimeTable {
  106. List<Time> timeList;
  107.  
  108. public TimeTable() {
  109. timeList = new ArrayList<>();
  110. }
  111.  
  112. void readTimes(InputStream inputStream) throws IOException {
  113. BufferedReader br = new BufferedReader(new InputStreamReader(inputStream));
  114. String line = null;
  115. while ((line = br.readLine()) != null) {
  116. try {
  117. String[] parts = line.split("\\s+");
  118. for (String part : parts) {
  119. timeList.add(Time.createTime(part));
  120. }
  121. } catch (InvalidTimeException e) {
  122. System.out.println(e.getMessage());
  123. } catch (UnsupportedFormatException e) {
  124. System.out.println(e.getMessage());
  125. ;
  126. }
  127. }
  128. }
  129.  
  130.  
  131. public void writeTimes(OutputStream out, TimeFormat format) {
  132. PrintWriter pw = new PrintWriter(new OutputStreamWriter(out), true);
  133. String result = null;
  134. switch (format) {
  135. case FORMAT_24:
  136. result = getFormat24Times();
  137. break;
  138. case FORMAT_AMPM:
  139. result = getFormatAMPM();
  140. break;
  141. default:
  142. return;
  143. }
  144. pw.println(result);
  145. }
  146.  
  147. private String getFormatAMPM() {
  148. StringBuilder sb = new StringBuilder();
  149. List<Time> temp = timeList.stream().sorted(Time::compareTo).collect(Collectors.toList());
  150. for (Time t : temp) {
  151. sb.append(t.getAMPMString()).append("\n");
  152. }
  153. return sb.substring(0,sb.length()-1);
  154. }
  155.  
  156. private String getFormat24Times() {
  157. StringBuilder sb = new StringBuilder();
  158. List<Time> temp = timeList.stream().sorted(Time::compareTo).collect(Collectors.toList());
  159. for (Time t : temp) {
  160. sb.append(t.getWholeString()).append("\n");
  161. }
  162. return sb.substring(0,sb.length()-1);
  163. }
  164. }
  165.  
  166. class UnsupportedFormatException extends Exception {
  167. public UnsupportedFormatException(String str) {
  168. super("UnsupportedFormatException: " + str);
  169. }
  170.  
  171. @Override
  172. public String getMessage() {
  173. return super.getMessage();
  174. }
  175. }
  176.  
  177. class InvalidTimeException extends Exception {
  178. public InvalidTimeException(String message) {
  179. super("InvalidTimeException: " + message);
  180. }
  181.  
  182. @Override
  183. public String getMessage() {
  184. return super.getMessage();
  185. }
  186. }
  187.  
  188.  
  189.  
  190.  
  191.  
  192.  
  193. Sample input
  194.  
  195. 11:15 0.45 23:12
  196. 15:29 18-46
  197.  
  198. Sample output
  199.  
  200. UnsupportedFormatException: 18-46
  201. 24 HOUR FORMAT
  202. 0:45
  203. 11:15
  204. 15:29
  205. 23:12
  206. AM/PM FORMAT
  207. 12:45 AM
  208. 11:15 AM
  209. 3:29 PM
  210. 11:12 PM
  211.  
  212.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement