Till din hjälp finns två filer svt1.txt samt svt2.txt. Det är tillåtet att ändra formatet i filerna bara man inte ändrar tablån.
Så här skulle en körning av slutliga programmet kunna se ut:
Hej och välkommen till TV Vad vill du göra? 1) Visa tablå för SVT1 2) Visa tablå för SVT2 3) Visa och hantera inspelningar Q) AvslutaOm man väljer 1) skulle det kunna se ut så här:
Måndag den 11:e mars 1) 10:00 Melodifestivalen 2013 2) 10:45 Sverige 3) 11:15 Sportspegeln 4) 11:45 The big C 5) 12:15 Skavlan N) ... nästkommande program 0) Återgå till huvudmenyn Välj program att spela in genom att trycka på motsvarande siffra eller välj N för att se nästföljande program i denna kanal eller välj 0 för att återgå till huvudmenyn.Väljer man N) skulle det kunna se ut så här:
Måndag den 11:e mars 1) 13:15 Gårdarna runt sjön 2) 15:05 Gomorron Sverige 3) 15:35 Familjehemligheter 4) 16:30 VM-rally 2013 5) 17:30 Sverige idag N) ... nästkommande program 0) Återgå till huvudmenyn Välj program att spela in genom att trycka på motsvarande siffra eller välj N för att se nästföljande program i denna kanal eller välj 0 för att återgå till huvudmenyn.Väljer man 3) skulle det kunna se ut så här:
15:35 Familjehemligheter (55 minuter) ska spelas in Tryck [RETUR] för att fortsättaDärefter återgår man dit man var. Om man i huvudmenyn väljer 3) Hantera inspelningar så skulle det kunna se ut så här:
Program som ska spelas in: 1) 15:35 Familjehemligheter (55 minuter) ska spelas in 0) Återgå till huvudmenyn Tryck 0 för att återgå till huvudmenyn eller tryck [siffra] för att ta bort inspelning.
SimpleDateFormat dp = new SimpleDateFormat("yyyy-MM-dd-HH:mm"); String s1 = "2013-03-11-01:35 Rapport"; Date d1 = dp.parse(s1.split(" ", 2)[0]); // String what = s1.split(" ", 2)[1];För att ta reda på hur länge ett program pågår kan man ta differensen av två Date via getTime som returnerar antal millisekunder från 1970.
String s2 = "2013-03-11-01:40 Antikrundan"; Date d2 = dp.parse(s2.split(" ", 2)[0]); long diff_i_minuter = ( d2.getTime() - d1.getTime() ) / 60000; // 60 * 1000 msEller om man vill ha sista minuten innan nästa program börjar kan man använda Calendar
Calendar c = Calendar.getInstance(); c.setTime(d2); c.add(Calendar.MINUTE, -1); Date endtime = c.getTime();Den här koden går igenom svt1.txt och listar programmen och dess längd vartefter.
SimpleDateFormat dp = new SimpleDateFormat("yyyy-MM-dd-HH:mm"); SimpleDateFormat out = new SimpleDateFormat("E HH:mm"); Calendar cal = Calendar.getInstance(); Scanner scanner = new Scanner(new File("./svt1.txt")); String s = scanner.next(); Date prev = dp.parse(s); String prg = scanner.nextLine(); int i = 1; while (scanner.hasNextLine()){ s = scanner.next(); Date next = dp.parse(s); long length = ( next.getTime() - prev.getTime() ) / 60000; cal.setTime(next); cal.add(Calendar.MINUTE, -1); Date endtime = cal.getTime(); System.out.println(prg + " from " + out.format(prev) + " to " + out.format(endtime) + " length=" + length + " minuter"); prev = next; prg = scanner.nextLine(); i += 1; if (i % 4 == 0) { System.out.println("\nTryck [RETUR] för att fortsätta"); Scanner keyboard = new Scanner(System.in); keyboard.nextLine(); } }Utskriften blir
Rapport from Mon 01:35 to Mon 01:39 length=5 minuter Antikrundan from Mon 01:40 to Mon 02:39 length=60 minuter Rapport from Mon 02:40 to Mon 02:44 length=5 minuter Så ska det låta from Mon 02:45 to Mon 03:44 length=60 minuter Tryck [RETUR] för att fortsätta ...Man kan jämföra Date med metoden after eller compareTo. På något sätt måste man få in datat i datastrukturer. Rita och tänk efter innan du börjar. Lös och testa din krockhantering separat. Java har inbyggd funktionalitet för att läsa och spara objekt på fil. Du kan använda denna för att läsa/spara din datastruktur med inspelningar. Testa med ett litet separat program. Alternativt kan du spara och läsa på samma format som TV-tablån.
Arv Klassdiagram Aggregat Arv (är en slags, is a) Association (har en) Aggregat (har/består av) Komposition/aggregat (består av) Åtkomst (private/public ...) Medlemsvariabel/attribut Paket (package) Abstrakt datatyp, Interface Problemställning: för små, för stora? Överlagra (överladda/överskriva i anteckningarna) Dynamisk bindning Polymorfi
Typkonvertera Typparametrisering Undantag (exceptions) Trådar Enhetstestning Algoritmer och datastrukturer Vektor vs länkad lista Associative array Hashning Binärt sökträd Binär sökning Sorteringsalgoritmer Quicksort Mergesort Räknesortering (distribution sort) Valfri enkel kvadratisk sortering
Single Responsibility Abstraction (luta sig mot) Liskov's Substitution Principle MVC – model, view, controller Observer pattern Singleton Open/Closed Principle (utökning vs modifiering) Dependency Inversion Principle