Skip to content

Commit 2abd229

Browse files
Färdig med labb!
1 parent 4c6a6d2 commit 2abd229

File tree

1 file changed

+21
-72
lines changed

1 file changed

+21
-72
lines changed

src/main/java/com/example/Main.java

Lines changed: 21 additions & 72 deletions
Original file line numberDiff line numberDiff line change
@@ -7,14 +7,6 @@
77
import java.time.LocalDate;
88
import java.time.format.DateTimeFormatter;
99
import java.util.*;
10-
import java.util.stream.Collectors;
11-
12-
13-
//Att göra idag
14-
//todo: Skapa en metod för att snygga till min switch
15-
//todo: skapa en metod för sliding window till -charging 2h,4h,8h
16-
17-
//todo: datumformatering
1810

1911

2012
public class Main {
@@ -28,7 +20,6 @@ public static void main(String[] args) {
2820
String zoneOf = null;
2921
String dateOf = null;
3022
String chargingInput = null;
31-
boolean isHelped = false;
3223
boolean isSorted = false;
3324

3425
List<String> validZones = new ArrayList<>();
@@ -38,45 +29,33 @@ public static void main(String[] args) {
3829
validZones.add("SE4");
3930

4031

41-
//Loopar igenom args och letar efter input från terminalen, case styr vad som händer om ex --zone skrivs in
42-
//if ger nya värden till zoneOf, dateOf, chargeOf och isHelped och skickar tillbaka till main-metoden
4332
if (args.length == 0) { helpMe();
4433
}
4534

4635
for (int i = 0; i < args.length; i++) {
4736
switch (args[i]) {
4837
case "--zone" -> { if (i + 1 < args.length) {
4938
zoneOf = args[++i];
50-
} else { helpMe(); return;
51-
5239
}
5340
}
5441
case "--date" -> { if (i + 1 < args.length) {
5542
dateOf = args[++i];
56-
57-
} else { helpMe(); return;
5843
}
5944
}
6045
case "--charging" -> { if (i + 1 < args.length) {
6146
chargingInput = args[++i];
62-
} else { helpMe(); return;
6347
}
6448
}
65-
66-
case "--sorted" -> {
49+
case "--sorted" ->
6750
isSorted = true;
68-
}
6951

70-
case "--help" -> {
71-
isHelped = true;
72-
helpMe(); return;
73-
}
52+
case "--help" -> { helpMe(); return;}
53+
7454
}
7555

7656
}
7757
LocalDate dagensDatum;
7858

79-
8059
if (dateOf != null)
8160
try {
8261
dagensDatum = LocalDate.parse(dateOf);
@@ -102,11 +81,15 @@ public static void main(String[] args) {
10281
if(priserIdag == null) {
10382
System.out.println("Kunde inte hitta några priser");
10483
return;
84+
} else {
85+
System.out.println("Dagens priser:");
10586
}
10687
List<ElpriserAPI.Elpris> priserImorgon = elpriserApi.getPriser(tomorrow, zon);
10788
if(priserImorgon == null){
10889
System.out.println("Kunde inte hitta några priser för imorgon");
10990
return;
91+
} else {
92+
System.out.println("Morgondagens priser:");
11093
}
11194

11295
numberFormat.setMaximumFractionDigits(2);
@@ -134,32 +117,30 @@ public static void main(String[] args) {
134117
List<ElpriserAPI.Elpris> sorteradePriser = isSortedCombined(priserIdag, priserImorgon);
135118
printPriser(sorteradePriser);
136119
return;
137-
} //else printhelp
138-
skrivUtPriser(priserIdag, priserImorgon);
120+
}
121+
printPriser(kombineradeListor);
139122
priceMinMax(priserIdag);
140123
medelPris(priserIdag);
141124
listWith96Prices(priserIdag);
142125

143-
144126
}
145127

146128
public static List<ElpriserAPI.Elpris> combinedLists(List<ElpriserAPI.Elpris> priserIdag, List<ElpriserAPI.Elpris> priserImorgon) {
147129
List<ElpriserAPI.Elpris> kombineradeLaddpriser = new ArrayList<>();
148130
if (priserIdag != null) kombineradeLaddpriser.addAll(priserIdag);
149131
if (priserImorgon != null) kombineradeLaddpriser.addAll(priserImorgon);
150132

151-
152133
return kombineradeLaddpriser;
153134
}
154135

155136
public static void chargingWindow (List<ElpriserAPI.Elpris> elpriserLadda, int timmar) {
156-
//todo: 2,4,8 h, testa i sub-arrays(Sliding windows)
137+
157138
DateTimeFormatter minuteFormatter = DateTimeFormatter.ofPattern("HH:mm");
158139
NumberFormat newFormat = NumberFormat.getNumberInstance(Locale.of("sv", "SE"));
159140
newFormat.setMaximumFractionDigits(2);
160141
newFormat.setMinimumFractionDigits(1);
161142

162-
if (elpriserLadda == null ||timmar<= 0|| elpriserLadda.isEmpty()|| timmar > elpriserLadda.size()) {
143+
if (elpriserLadda == null) {
163144
System.out.println("Inga eller för få timmar för att beräkna laddningsfönster.");
164145
return;
165146
}
@@ -190,15 +171,13 @@ public static void chargingWindow (List<ElpriserAPI.Elpris> elpriserLadda, int t
190171
System.out.printf("Billigaste laddningsfönster för %dh är kl %s-%s\nMedelpris för fönster: %s öre\n Påbörja laddning %s", timmar, startTid, slutTid, formateratPris, startTid);
191172
}
192173
}
193-
// Expected Min: Hour 0 -> avg(0.10, 0.11, 0.12, 0.13) = 0.115 SEK/kWh = 11,50 öre
194-
// Expected Max: Hour 23 -> avg(2.40, 2.41, 2.42, 2.43) = 2.415 SEK/kWh = 241,50 öre
174+
195175
public static void listWith96Prices (List<ElpriserAPI.Elpris> elpriser96) {
196-
//behöver 24 grupper där varje grupp visar 4 priser som medelpris
197-
//timme = 0, prisindex 1-4, (P1, P2, P3, P4)
198176

199-
//i är 0; sålänge i är mindre än storleken på listan; öka i med 4
177+
178+
//i är 0; så länge i är mindre än storleken på listan; öka i med 4
200179
for (int i = 0; i < elpriser96.size(); i += 4) {
201-
//I varje loop, stoppa de fyra värderna i en sublist
180+
//I varje loop, stoppa de fyra värdena i en sublist
202181
List<ElpriserAPI.Elpris> listaPerTimme = elpriser96.subList(i, i + 4);
203182

204183
double sum = listaPerTimme.stream().mapToDouble(ElpriserAPI.Elpris::sekPerKWh).sum();
@@ -208,21 +187,17 @@ public static void listWith96Prices (List<ElpriserAPI.Elpris> elpriser96) {
208187
int timme2 = timme +1;
209188

210189
String timDel = String.format("%02d-%02d", timme, timme2);
211-
//String priserIparantes = listaPerTimme.stream().map(elpris -> numberFormat.format(elpris.sekPerKWh()*100)).collect(Collectors.joining(","));
212190
double medelprisToOre = medelPris * 100;
213191
String formateratMedelPris = numberFormat.format(medelprisToOre);
214192

215193
System.out.printf("%s Medelpris: %s öre\n", timDel, formateratMedelPris);
216-
217-
218194
}
219195
}
220196

221-
222-
223197
static void printPriser (List<ElpriserAPI.Elpris> priser) {
224-
priser.stream().forEach(elpriser -> System.out.printf("""
225-
%s-%s %.2f öre\n""",elpriser.timeStart().format(timeFormatter), elpriser.timeEnd().format(timeFormatter), elpriser.sekPerKWh()*100));
198+
priser.forEach(elpriser -> System.out.printf("""
199+
%s-%s %.2f öre
200+
""",elpriser.timeStart().format(timeFormatter), elpriser.timeEnd().format(timeFormatter), elpriser.sekPerKWh()*100));
226201
}
227202

228203
public static List<ElpriserAPI.Elpris> isSortedCombined (List<ElpriserAPI.Elpris> priserIdag, List<ElpriserAPI.Elpris> priserImorgon) {
@@ -231,39 +206,14 @@ public static List<ElpriserAPI.Elpris> isSortedCombined (List<ElpriserAPI.Elpris
231206
sammansattaPriser.addAll(priserImorgon);
232207
sammansattaPriser.sort(Comparator.comparing(ElpriserAPI.Elpris::sekPerKWh).reversed().thenComparing(ElpriserAPI.Elpris::timeStart));
233208

234-
235209
return sammansattaPriser;
236210
}
237211

238-
public static void skrivUtPriser(List<ElpriserAPI.Elpris> elprisIdag,List<ElpriserAPI.Elpris> elprisImorgon) {
239-
240-
//todo: Hämta elpriserna i en ArrayList för att skriva ut två dagars priser om morgondagens priser finns //List av listElpriserAPI
241-
242-
List<ElpriserAPI.Elpris> sammansattaPriser = new ArrayList<>();
243-
if (elprisIdag != null) {
244-
sammansattaPriser.addAll(elprisIdag);
245-
System.out.println("Dagens Priser:");
246-
for (ElpriserAPI.Elpris elpriser : elprisIdag) {
247-
248-
String pris = numberFormat.format(elpriser.sekPerKWh()*100);
249-
System.out.printf("%s-%s %s öre\n", elpriser.timeStart().format(timeFormatter), elpriser.timeEnd().format(timeFormatter), pris);
250-
}
251-
}
252-
if (elprisImorgon != null) {
253-
sammansattaPriser.addAll(elprisImorgon);
254-
System.out.println("Morgondagens priser: ");
255-
for (ElpriserAPI.Elpris elpriser : elprisImorgon) {
256-
257-
String pris = numberFormat.format(elpriser.sekPerKWh() * 100);
258-
System.out.printf("%s-%s %s öre\n", elpriser.timeStart().format(timeFormatter), elpriser.timeEnd().format(timeFormatter), pris);
259-
}
260-
}
261-
}
262-
263212
private static void medelPris(List<ElpriserAPI.Elpris> prisLista) {
264213
double summa = 0.0;
265214
if (prisLista == null) {
266215
System.out.println("Ingen data tillgänglig för medelpris");
216+
return;
267217
}
268218
for (ElpriserAPI.Elpris elpriser : prisLista) {
269219
summa += elpriser.sekPerKWh();
@@ -314,17 +264,16 @@ public static void helpMe() {
314264
java -cp target/classes com.example.Main [alternativ]
315265
316266
Alternativ:
317-
--zone SE1|SE2|SE3|SE4 (obligatoriskt) Välj elpris-zon
267+
--zone SE1|SE2|SE3|SE4 (obligatoriskt) Välj giltig elpris-zon
318268
--date YYYY-MM-DD (valfritt) Välj datum, t.ex. 2025-09-21
319269
--charging 2h|4h|8h (valfritt) Hitta billigaste laddningsfönster
320270
--sorted (valfritt) Sortera priser fallande
321271
--help (valfritt) Visa denna hjälptext
322272
323273
Exempel:
324-
java Main --zone SE3 -- date 2025-09-24 --charging 4h
274+
java Main --zone SE3 -- date 2025-09-21 --charging 4h
325275
""");
326276
}
327-
328277
}
329278

330279
// java -cp target/classes com.example.Main --zone SE2 --date 2025-09-04 --sorted

0 commit comments

Comments
 (0)