new project structure
- use objects and inheritance - enabled combined version for drinking and loading bar without impacting any of them
This commit is contained in:
65
zeitlaeufer/src/main/java/de/szimnau/DrinkingBar.java
Normal file
65
zeitlaeufer/src/main/java/de/szimnau/DrinkingBar.java
Normal file
@@ -0,0 +1,65 @@
|
||||
package de.szimnau;
|
||||
|
||||
import de.szimnau.tools.CommonTools;
|
||||
import de.szimnau.tools.FormatTools;
|
||||
import java.io.BufferedReader;
|
||||
import java.io.InputStreamReader;
|
||||
import java.io.IOException;
|
||||
import java.math.BigDecimal;
|
||||
import java.nio.charset.StandardCharsets;
|
||||
import java.text.DecimalFormat;
|
||||
import java.time.LocalTime;
|
||||
import java.time.temporal.ChronoUnit;
|
||||
|
||||
import static de.szimnau.tools.CommonTools.print;
|
||||
|
||||
|
||||
public class DrinkingBar extends AbstractLoadingBar {
|
||||
|
||||
private static final int MINS_PER_HALF_HOUR = CommonTools.MINS_PER_HOUR / 2;
|
||||
private static final int MINUTES_BEFORE_PAUSE = 4 * CommonTools.MINS_PER_HOUR + MINS_PER_HALF_HOUR;
|
||||
private static final int MINUTES_WITH_PAUSE = 6 * CommonTools.MINS_PER_HOUR;
|
||||
private static final DecimalFormat LITER_FORMAT = new DecimalFormat("0.00");
|
||||
|
||||
|
||||
protected DrinkingBar(LocalTime startTime) {
|
||||
super(startTime, 8 * CommonTools.MINS_PER_HOUR + MINS_PER_HALF_HOUR);
|
||||
}
|
||||
|
||||
|
||||
public static void main(String[] args) throws IOException {
|
||||
var br = new BufferedReader(new InputStreamReader(System.in, StandardCharsets.UTF_8));
|
||||
print("Ankunftszeit: ");
|
||||
var startTime = LocalTime.parse(br.readLine(), FormatTools.TIME_FORMATTER).truncatedTo(ChronoUnit.MINUTES);
|
||||
long totalMinutes = 8 * CommonTools.MINS_PER_HOUR + MINS_PER_HALF_HOUR;
|
||||
var db = new DrinkingBar(startTime);
|
||||
db.showLoadingBar();
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
protected String fillLoadingBar(long passedMinutes, boolean progressive) {
|
||||
long effectivePassedMinutes = passedMinutes;
|
||||
if (passedMinutes > MINUTES_BEFORE_PAUSE && passedMinutes <= MINUTES_WITH_PAUSE) {
|
||||
effectivePassedMinutes = MINUTES_BEFORE_PAUSE;
|
||||
}
|
||||
double currentLitres = 2.0 / getTotalMinutes() * effectivePassedMinutes + 0.25;
|
||||
double printedLitres = currentLitres - (currentLitres % 0.25);
|
||||
double currentProgressToNextStep = 100 / 0.25 * (currentLitres - printedLitres);
|
||||
BigDecimal minutesToNextStep = getMinutesToNextStep(currentLitres);
|
||||
String progressivePart = progressive ? "\r" : "";
|
||||
return progressivePart + "Aktuelles Volumen: " + LITER_FORMAT.format(printedLitres) + "L - "
|
||||
+ FormatTools.PERCENTAGE_FORMAT.format(currentProgressToNextStep) + "% - "
|
||||
+ FormatTools.minutesToTimeString(minutesToNextStep);
|
||||
}
|
||||
|
||||
|
||||
private BigDecimal getMinutesToNextStep(double currentLitres) {
|
||||
// berechne Liter benötigt bis zum nächsten 0.25er Schritt
|
||||
double litresToNextStep = 0.25 - (currentLitres % 0.25);
|
||||
// berechne Minuten benötigt für 1 Liter
|
||||
double minutesPerLitre = getTotalMinutes() / 2.0;
|
||||
// berechne Minuten benötigt bis zum nächsten 0.25er Schritt
|
||||
return BigDecimal.valueOf((minutesPerLitre * litresToNextStep) + 1);
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user