forked from Zikoz/Greenery
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathComplexConverter.java
More file actions
147 lines (129 loc) · 3.69 KB
/
ComplexConverter.java
File metadata and controls
147 lines (129 loc) · 3.69 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
/**
* Converts from steps and car type (petrol/diesel) to other information about journey
* e.g. distance travelled, calories spent, co2 emissions saved
* @author Sunshine Regiment
*/
package conversion;
public class ComplexConverter {
private boolean diesel;//flag: true = diesel, false = petrol
private int steps;//no units
private double distance;//km
private double fuel;//liter
private double calories;//kcal
private double co2;//gram
private double treedays;//co2 absorbed by a tree in one day
private BiometricProfile profile;//data about the person (age, height, weight, gender)
/**
* Method for filling in attribute values
*
* Extrapolates from known data (i.e. steps) to estimate values for distance, co2 saved, etc.
* Also acts as a wrapper for convertDiesel() and convertPetrol()
*/
public void convert() {
//estimate the number of steps taken to travel 1 km, based on height & gender
double steps_per_km = CalculateStep.step(profile);
distance = steps/steps_per_km;
//todo: find calories per step based on biometric data
//0.044 calories per step on average
calories = steps * Calories.calsPerStep(profile, steps_per_km);
//based on engine type, the other calculations
if (diesel)
{
convertDiesel();
}
else{
convertPetrol();
}
}
/**
* Diesel-based conversion extension
*
* Converts from distance in km to fuel required, co2 emissions prevented and tree-days saved
*/
private void convertDiesel(){
//16.95km per liter for diesel engines, on average (cars manufactured in 2008)
fuel = distance/16.95;
//2.68 kg of co2 per liter of diesel => 2680g of co2 per liter of diesel
co2 = fuel * 2680;
//60g of co2 per tree per day
treedays = co2/60;
}
/**
* Petrol-based conversion extension
*
* Converts from distance in km to fuel required, co2 emissions prevented and tree-days saved
*/
private void convertPetrol(){
//14.3km per liter for petrol engines, on average (cars manufactured in 2008)
fuel = distance/14.3;
//2.68 kg of co2 per liter of diesel => 2680g of co2 per liter of diesel
co2 = fuel * 2680;
//60g of co2 per tree per day
treedays = co2/60;
}
/**
* Constructor for 'Converter'
*
* Initialises values & runs 'convert()'
*
* @param stepsTaken total steps taken
* @param dieselCar type of car engine (true = diesel, false = petrol)
*/
public ComplexConverter(int stepsTaken, BiometricProfile profile, boolean dieselCar) {
steps = stepsTaken;
this.profile = profile;
diesel = dieselCar;
convert();
}
/**
* Setter for 'steps'
* @param stepsTaken Number of steps taken
*/
public void set(int stepsTaken) {
steps = stepsTaken;
convert();
}
/**
* Getter for distance travelled
* @return Distance travelled (in km)
*/
public double getDistance() {
return distance;
}
/**
* Getter for steps taken
* @return Steps taken
*/
public int getSteps() {
return steps;
}
/**
* Getter for calories burnt
* @return Calories burnt (in kcal)
*/
public double getCalories() {
return calories;
}
/**
* Getter for fuel saved
* @return Fuel saved (in litres)
*/
public double getFuel() {
return fuel;
}
/**
* Getter for CO2 emissions prevented
* @return CO2 emissions prevented (in grams)
*/
public double getCO2() {
return co2;
}
/**
* A tree captures ~60g of CO2 per day, so every 60g of emissions prevented is the
* equivalent of a tree absorbing CO2 for that day.
* @return Number of trees worth of CO2 reduction you've done today.
*/
public double getTreeDays() {
return treedays;
}
}