fixed your code
This commit is contained in:
parent
f240381468
commit
e192af4647
10 changed files with 85 additions and 164 deletions
BIN
bin/App.class
BIN
bin/App.class
Binary file not shown.
BIN
bin/Break.class
BIN
bin/Break.class
Binary file not shown.
Binary file not shown.
Binary file not shown.
BIN
bin/Time.class
BIN
bin/Time.class
Binary file not shown.
82
src/App.java
82
src/App.java
|
@ -1,3 +1,6 @@
|
||||||
|
import java.net.MalformedURLException;
|
||||||
|
import java.net.URL;
|
||||||
|
import java.util.ArrayList;
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Scanner;
|
import java.util.Scanner;
|
||||||
|
@ -7,59 +10,34 @@ public class App {
|
||||||
private static final Scanner scanner = new Scanner(System.in);
|
private static final Scanner scanner = new Scanner(System.in);
|
||||||
private static final Teacher[] teachers = new Teacher[Teacher.nameMap.size()];
|
private static final Teacher[] teachers = new Teacher[Teacher.nameMap.size()];
|
||||||
|
|
||||||
// Room channel numbers
|
// Room channel numbers, sorted asc. 37, 38, 39
|
||||||
private static final int ROOM_39_NUMBER = 1521262;
|
private static final int[] ROOM_NUMBERS = { 1521263, 1364580, 1521262 };
|
||||||
private static final int ROOM_38_NUMBER = 1364580;
|
|
||||||
private static final int ROOM_37_NUMBER = 1521263;
|
|
||||||
|
|
||||||
// Date and time constants for Start and End Dates
|
// Date and time constants for Start and End Dates
|
||||||
private static final String START_DATE = "2024-11-04";
|
private static final String[] DATES = { "2024-11-04", "2024-11-05", "2024-11-06", "2024-11-07", "2024-11-08" };
|
||||||
private static final String END_DATE = "2024-11-08";
|
|
||||||
|
private static ArrayList<Break[]> SHORT_BREAKS = new ArrayList<Break[]>();
|
||||||
|
private static ArrayList<Break[]> LONG_BREAKS = new ArrayList<Break[]>();
|
||||||
|
|
||||||
// #region Initialization
|
// #region Initialization
|
||||||
|
|
||||||
public static String generateLink(int channelNumber, String date, String startTime, String endTime) {
|
public static URL generateLink(int channelNumber, String date) throws MalformedURLException {
|
||||||
String baseUrl = "https://api.thingspeak.com/channels/";
|
String baseUrl = "https://api.thingspeak.com/channels/";
|
||||||
String formattedStartDateTime = date + " " + startTime;
|
String formattedStartDateTime = date + " 07:00:00";
|
||||||
String formattedEndDateTime = date + " " + endTime;
|
String formattedEndDateTime = date + " 19:00:00";
|
||||||
|
|
||||||
return baseUrl + channelNumber + "/feeds.csv?start=" + formattedStartDateTime.replace(" ", "%20")
|
return new URL(baseUrl + channelNumber + "/feeds.csv?start=" + formattedStartDateTime.replace(" ", "%20")
|
||||||
+ "&end=" + formattedEndDateTime.replace(" ", "%20"); // %20 --> " "
|
+ "&end=" + formattedEndDateTime.replace(" ", "%20")); // %20 --> " "
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private static double getDataAverageForMinute(int minute, int hour, int number, String date) {
|
private static void calculateBreakPoints(Break calcBreak, Teacher teacher) {
|
||||||
// get the url
|
int duration = calcBreak.getEnd() - calcBreak.getStart();
|
||||||
String startTime = "";
|
Co2Data[] minuteData = calcBreak.getCo2Datas();
|
||||||
if (hour < 10) {
|
|
||||||
startTime += "0";
|
|
||||||
}
|
|
||||||
startTime += String.valueOf(hour);
|
|
||||||
startTime += ":";
|
|
||||||
if (minute < 10) {
|
|
||||||
startTime += "0";
|
|
||||||
}
|
|
||||||
startTime += String.valueOf(minute);
|
|
||||||
String calcStarttime = startTime + ":00";
|
|
||||||
String calcEndTime = startTime + "59";
|
|
||||||
|
|
||||||
String url = generateLink(number, date, calcStarttime, calcEndTime);
|
|
||||||
|
|
||||||
double averageCO2 = 0.0;
|
|
||||||
List<Co2Data> co2DataList = Co2Data.getData(url);
|
|
||||||
for (Co2Data co2Data : co2DataList) {
|
|
||||||
averageCO2 += co2Data.getCo2Level();
|
|
||||||
}
|
|
||||||
|
|
||||||
return averageCO2 / co2DataList.size(); // Example CO2 average level
|
|
||||||
}
|
|
||||||
|
|
||||||
private static void calculateBreakPoints(double[] minuteData, Break calcBreak, Teacher teacher) {
|
|
||||||
int duration = calcBreak.getEnd().getMinute() - calcBreak.getStart().getMinute();
|
|
||||||
int breakPoints = minuteData.length;
|
int breakPoints = minuteData.length;
|
||||||
if (duration == minuteData.length) {
|
if (duration == minuteData.length) {
|
||||||
for (int i = 0; i < duration; i++) {
|
for (int i = 0; i < duration; i++) {
|
||||||
if (minuteData[i] < minuteData[i + 1]) {
|
if (i + 1 != duration && (minuteData[i].getCo2Level() < minuteData[i + 1].getCo2Level())) {
|
||||||
breakPoints--;
|
breakPoints--;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -86,7 +64,6 @@ public class App {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// #region User Interaction
|
// #region User Interaction
|
||||||
private static int getUserInput(String textOutput) {
|
private static int getUserInput(String textOutput) {
|
||||||
System.out.println(textOutput);
|
System.out.println(textOutput);
|
||||||
|
@ -102,7 +79,7 @@ public class App {
|
||||||
private static void printExplanation() {
|
private static void printExplanation() {
|
||||||
System.out.println("Point calculation explanation:");
|
System.out.println("Point calculation explanation:");
|
||||||
System.out.println("1. Up to 5 points for keeping the window open during a small pause.");
|
System.out.println("1. Up to 5 points for keeping the window open during a small pause.");
|
||||||
System.out.println("2. Up to 10 points for long pauses, depending on window usage.");
|
System.out.println("2. Up to 15-20 points for long pauses, depending on window usage.");
|
||||||
System.out.println("3. 5 bonus points for teacher switches in classrooms.");
|
System.out.println("3. 5 bonus points for teacher switches in classrooms.");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -164,23 +141,32 @@ public class App {
|
||||||
}
|
}
|
||||||
|
|
||||||
// #region Main
|
// #region Main
|
||||||
public static void main(String[] args) {
|
public static void main(String[] args) throws MalformedURLException {
|
||||||
System.out.println("Calculations in process please do not shut off...");
|
System.out.println("Calculations in process please do not shut off...");
|
||||||
initializeTeachers();
|
initializeTeachers();
|
||||||
sortTeachers();
|
|
||||||
printTeachers();
|
ArrayList<Break> co2Datas = new ArrayList<Break>();
|
||||||
for (int classrooms = 0; classrooms < 3; classrooms++) {
|
for (int classrooms = 0; classrooms < 3; classrooms++) {
|
||||||
for (int weekday = 0; weekday < 5; weekday++) {
|
for (int weekday = 0; weekday < 5; weekday++) {
|
||||||
// get the url and data
|
List<Co2Data> tempData = Co2Data.getData(generateLink(ROOM_NUMBERS[classrooms], DATES[weekday]));
|
||||||
// calculate points
|
SHORT_BREAKS.add(BreakSchedule.createBreaks(BreakSchedule.START_SMALL_BREAK,
|
||||||
|
BreakSchedule.END_SMALL_BREAK, tempData));
|
||||||
|
LONG_BREAKS.add(BreakSchedule.createBreaks(BreakSchedule.START_LONG_BREAK,
|
||||||
|
BreakSchedule.END_LONG_BREAK, tempData));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
calculateBreakPoints(SHORT_BREAKS.get(0)[0], teachers[0]);
|
||||||
|
|
||||||
// Loop threw each day with a specific classroom and after the weekdays are over
|
// Loop threw each day with a specific classroom and after the weekdays are over
|
||||||
// go to the next of the 3 classroms
|
// go to the next of the 3 classroms
|
||||||
// go threw every break calculate the point and give them to the teacher
|
// go threw every break calculate the point and give them to the teacher
|
||||||
// directly
|
// directly
|
||||||
// remember the point class
|
// remember the point class
|
||||||
// breakShedule needed
|
// BreakSchedule needed
|
||||||
|
|
||||||
|
sortTeachers();
|
||||||
|
printTeachers();
|
||||||
|
|
||||||
while (true) {
|
while (true) {
|
||||||
int userInput = getUserInput(
|
int userInput = getUserInput(
|
||||||
|
|
|
@ -1,56 +1,36 @@
|
||||||
public class Break {
|
public class Break {
|
||||||
private Time start;
|
private int start;
|
||||||
private Time end;
|
private int end;
|
||||||
|
private Co2Data co2Datas[];
|
||||||
|
|
||||||
public Break(Time start, Time end) {
|
public int getStart() {
|
||||||
this.start = start;
|
|
||||||
this.end = end;
|
|
||||||
}
|
|
||||||
|
|
||||||
public Time getStart() {
|
|
||||||
return start;
|
return start;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setStart(Time start) {
|
public void setStart(int start) {
|
||||||
this.start = start;
|
this.start = start;
|
||||||
}
|
}
|
||||||
|
|
||||||
public Time getEnd() {
|
public int getEnd() {
|
||||||
return end;
|
return end;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setEnd(Time end) {
|
public void setEnd(int end) {
|
||||||
this.end = end;
|
this.end = end;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
public Co2Data[] getCo2Datas() {
|
||||||
* Generates a Thingspeak API link based on channel number, date, and break
|
return co2Datas;
|
||||||
* period.
|
|
||||||
*
|
|
||||||
* @param channelNumber The Thingspeak channel number.
|
|
||||||
* @param date The date in format "YYYY-MM-DD".
|
|
||||||
* @param breakPeriod The Break object containing start and end times.
|
|
||||||
* @return A formatted URL for fetching data from the Thingspeak API.
|
|
||||||
*/
|
|
||||||
public static String generateLink(int channelNumber, String date, Break breakPeriod) {
|
|
||||||
String baseUrl = "https://api.thingspeak.com/channels/";
|
|
||||||
String formattedStartDateTime = date + " " + breakPeriod.getStart().toString();
|
|
||||||
String formattedEndDateTime = date + " " + breakPeriod.getEnd().toString();
|
|
||||||
|
|
||||||
return baseUrl + channelNumber + "/feeds.csv?start=" + formattedStartDateTime.replace(" ", "%20")
|
|
||||||
+ "&end=" + formattedEndDateTime.replace(" ", "%20");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void main(String[] args) {
|
public void setCo2Datas(Co2Data[] co2Datas) {
|
||||||
// Example usage
|
this.co2Datas = co2Datas;
|
||||||
Time start = Time.valueOf("00:00:00");
|
|
||||||
Time end = Time.valueOf("23:59:59");
|
|
||||||
Break breakPeriod = new Break(start, end);
|
|
||||||
|
|
||||||
String date = "2024-11-17";
|
|
||||||
int channelNumber = 1364580;
|
|
||||||
|
|
||||||
String link = Break.generateLink(channelNumber, date, breakPeriod);
|
|
||||||
System.out.println(link);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public Break(int start, int end, Co2Data[] co2Datas) {
|
||||||
|
this.start = start;
|
||||||
|
this.end = end;
|
||||||
|
this.co2Datas = co2Datas;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,47 +1,34 @@
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
public class BreakSchedule {
|
public class BreakSchedule {
|
||||||
private static final String[] START_SMALL_BREAK = {
|
public static final int[] START_SMALL_BREAK = {
|
||||||
"8:30", "10:25", "11:15", "12:05", "13:30", "14:20", "16:10", "17:00", "17:50"
|
830, 1025, 1115, 1205, 1330, 1420, 1610, 1700, 1750
|
||||||
};
|
};
|
||||||
|
|
||||||
private static final String[] END_SMALL_BREAK = {
|
public static final int[] END_SMALL_BREAK = {
|
||||||
"8:35", "10:30", "11:20", "12:10", "13:35", "14:25", "16:15", "17:05", "17:55"
|
835, 1030, 1120, 1210, 1335, 1425, 1615, 1705, 1755
|
||||||
};
|
};
|
||||||
|
|
||||||
private static final String[] START_LONG_BREAK = {
|
public static final int[] START_LONG_BREAK = {
|
||||||
"9:20", "15:10"
|
920, 1510
|
||||||
};
|
};
|
||||||
|
|
||||||
private static final String[] END_LONG_BREAK = {
|
public static final int[] END_LONG_BREAK = {
|
||||||
"9:40", "15:25"
|
940, 1525
|
||||||
};
|
};
|
||||||
|
|
||||||
private static final Break[] SMALL_BREAKS;
|
public static Break[] createBreaks(int[] startTimes, int[] endTimes, List<Co2Data> co2Data) {
|
||||||
private static final Break[] LONG_BREAKS;
|
|
||||||
|
|
||||||
static {
|
|
||||||
SMALL_BREAKS = createBreaks(START_SMALL_BREAK, END_SMALL_BREAK);
|
|
||||||
LONG_BREAKS = createBreaks(START_LONG_BREAK, END_LONG_BREAK);
|
|
||||||
}
|
|
||||||
|
|
||||||
private static Break[] createBreaks(String[] startTimes, String[] endTimes) {
|
|
||||||
Break[] breaks = new Break[startTimes.length];
|
Break[] breaks = new Break[startTimes.length];
|
||||||
for (int i = 0; i < startTimes.length; i++) {
|
for (int i = 0; i < startTimes.length; i++) {
|
||||||
// Append ":00" to include seconds
|
Co2Data[] co2Datas = new Co2Data[endTimes[i] - startTimes[i]];
|
||||||
String startTimeWithSeconds = startTimes[i];
|
for (Co2Data data : co2Data) {
|
||||||
String endTimeWithSeconds = endTimes[i];
|
if (data.getTime() >= startTimes[i] && data.getTime() < endTimes[i]) {
|
||||||
|
System.out.println(startTimes[i] + " " + endTimes[i] + " " + data.getTime());
|
||||||
Time start = Time.valueOf(startTimeWithSeconds);
|
co2Datas[data.getTime() - startTimes[i]] = data;
|
||||||
Time end = Time.valueOf(endTimeWithSeconds);
|
}
|
||||||
breaks[i] = new Break(start, end);
|
}
|
||||||
|
breaks[i] = new Break(startTimes[i], endTimes[i], co2Datas);
|
||||||
}
|
}
|
||||||
return breaks;
|
return breaks;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static Break[] getSmallBreaks() {
|
|
||||||
return SMALL_BREAKS;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static Break[] getLongBreaks() {
|
|
||||||
return LONG_BREAKS;
|
|
||||||
}
|
|
||||||
}
|
}
|
|
@ -2,19 +2,19 @@ import java.io.BufferedReader;
|
||||||
import java.io.InputStreamReader;
|
import java.io.InputStreamReader;
|
||||||
import java.net.HttpURLConnection;
|
import java.net.HttpURLConnection;
|
||||||
import java.net.URL;
|
import java.net.URL;
|
||||||
import java.text.SimpleDateFormat;
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Date;
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
public class Co2Data {
|
public class Co2Data {
|
||||||
private Date date;
|
private Date date;
|
||||||
|
private int time;
|
||||||
private int co2Level;
|
private int co2Level;
|
||||||
|
|
||||||
// Constructor
|
// Constructor
|
||||||
public Co2Data(Date date, int co2Level) {
|
public Co2Data(Date date, int co2Level) {
|
||||||
this.date = date;
|
this.date = date;
|
||||||
this.co2Level = co2Level;
|
this.co2Level = co2Level;
|
||||||
|
this.time = date.getHour() * 100 + date.getMinute();
|
||||||
}
|
}
|
||||||
|
|
||||||
// Getters and Setters
|
// Getters and Setters
|
||||||
|
@ -34,12 +34,19 @@ public class Co2Data {
|
||||||
this.co2Level = co2Level;
|
this.co2Level = co2Level;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public int getTime() {
|
||||||
|
return time;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setTime(int time) {
|
||||||
|
this.time = time;
|
||||||
|
}
|
||||||
|
|
||||||
// Fetch and parse data from a CSV URL
|
// Fetch and parse data from a CSV URL
|
||||||
public static List<Co2Data> getData(String csvURL) {
|
public static List<Co2Data> getData(URL url) {
|
||||||
List<Co2Data> dataList = new ArrayList<>();
|
List<Co2Data> dataList = new ArrayList<>();
|
||||||
|
|
||||||
try {
|
try {
|
||||||
URL url = new URL(csvURL);
|
|
||||||
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
|
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
|
||||||
conn.setRequestMethod("GET");
|
conn.setRequestMethod("GET");
|
||||||
conn.setRequestProperty("Accept", "text/csv");
|
conn.setRequestProperty("Accept", "text/csv");
|
||||||
|
@ -52,6 +59,7 @@ public class Co2Data {
|
||||||
br.readLine(); // Skip header line
|
br.readLine(); // Skip header line
|
||||||
|
|
||||||
String output;
|
String output;
|
||||||
|
System.out.println(url);
|
||||||
while ((output = br.readLine()) != null) {
|
while ((output = br.readLine()) != null) {
|
||||||
Co2Data data = parseData(output);
|
Co2Data data = parseData(output);
|
||||||
if (data != null) {
|
if (data != null) {
|
||||||
|
@ -73,11 +81,7 @@ public class Co2Data {
|
||||||
String[] parts = line.split(",");
|
String[] parts = line.split(",");
|
||||||
String dateStr = parts[0].trim(); // assuming date is in the first column
|
String dateStr = parts[0].trim(); // assuming date is in the first column
|
||||||
int co2Level = Integer.parseInt(parts[1].trim()); // assuming CO2 level is in the second column
|
int co2Level = Integer.parseInt(parts[1].trim()); // assuming CO2 level is in the second column
|
||||||
|
Date date = new Date(dateStr);
|
||||||
// Convert the date string into a Date object (assumes CSV date format is
|
|
||||||
// yyyy-MM-dd HH:mm:ss)
|
|
||||||
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
|
|
||||||
Date date = sdf.parse(dateStr);
|
|
||||||
|
|
||||||
return new Co2Data(date, co2Level);
|
return new Co2Data(date, co2Level);
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
|
@ -85,4 +89,5 @@ public class Co2Data {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,37 +0,0 @@
|
||||||
public class Time {
|
|
||||||
private int hour;
|
|
||||||
private int minute;
|
|
||||||
|
|
||||||
public Time(int hour, int minute) {
|
|
||||||
if (hour >= 1 && hour <= 24 && minute >= 1 && minute <= 60) {
|
|
||||||
this.hour = hour;
|
|
||||||
this.minute = minute;
|
|
||||||
} else {
|
|
||||||
System.out.println("Failed to initialize the hour");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public int getHour() {
|
|
||||||
return hour;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setHour(int hour) {
|
|
||||||
this.hour = hour;
|
|
||||||
}
|
|
||||||
|
|
||||||
public int getMinute() {
|
|
||||||
return minute;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setMinute(int minute) {
|
|
||||||
this.minute = minute;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static Time valueOf(String time) {
|
|
||||||
String[] parts = time.split(":");
|
|
||||||
int hour = Integer.parseInt(parts[0]);
|
|
||||||
int minute = Integer.parseInt(parts[1]);
|
|
||||||
Time returnValue = new Time(hour, minute);
|
|
||||||
return returnValue;
|
|
||||||
}
|
|
||||||
}
|
|
Loading…
Reference in a new issue