Nette Variante mit Nachteilen:Diese ganzen ifs machen mich ganz wuschig. Mit Hilfe von Java 9 VarHandles und Lambdas kann man das noch etwas abstrahieren. Naja... nur, dass man hierfür Instanzvariablen benötigt... aber egal:
a) Unübersichtlicher Code.
b) Abhängigkeit von Java 9
Die vielen Ifs kann man auch mittels einer Schleife kaschieren.
Java:
public class TimeTicker {
private int[] max = { 10, 60, 60, 24 };
private int[] time = { 0, 0, 0, 0 };
public final static int PART_OF_SECOND = 0;
public final static int SECOND = 1;
public final static int MINUTE = 2;
public final static int HOUR = 3;
private int countUpValue(int value, int max) {
value++;
return (value >= max) ? 0 : value;
}
public long getExpectedDelayInMilliSeconds() {
return 1000l / max[PART_OF_SECOND];
}
public void tick() {
for (int i = 0; i < time.length; i++) {
time[i] = countUpValue(time[i], max[i]);
if (time[i] != 0)
break;
}
}
@Override
public String toString() {
return String.format("%d:%02d:%02d,%d", time[HOUR], time[MINUTE], time[SECOND], time[PART_OF_SECOND]);
}
}
Java:
public class start {
public static void main(String[] args) {
TimeTicker time = new TimeTicker();
while (true) {
time.tick();
try {
Thread.sleep(time.getExpectedDelayInMilliSeconds());
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(time);
}
}
}