Reputation: 138
I made a code that formats the typed time(numbers) into text. But the problem is when it's for example 10:30 he text should be "halb elf uhr" and not "halb zehn uhr" (language is german). So I think the case must be increased but how can I do this. I tried it with case+1 but that diddn't work.
This is the code:
public class TimeAsText {
public static void main(String[] args) {
System.out.println("Type Hour: ");
int hours = In.readInt();
System.out.println("Type minutes: ");
int minutes = In.readInt();;
if(hours <1 || hours >12) {
System.out.println("*****");
System.exit(0);
}else if (minutes <0 || minutes >59) {
System.out.println("****");
System.exit(0);
}else {
String hourNames = null;
switch(hours) {
case 1: hourNames = "ein";break;
case 2: hourNames = "zwei";break;
case 3: hourNames = "drei";break;
case 4: hourNames = "vier";break;
case 5: hourNames = "fuenf";break;
case 6: hourNames = "sechs";break;
case 7: hourNames = "sieben";break;
case 8: hourNames = "acht";break;
case 9: hourNames = "neun";break;
case 10: hourNames = "zehn";break;
case 11: hourNames = "elf";break;
case 12: hourNames = "zwoelf";break;
default: System.out.println("Type valid hour");
}
String minuteNames = null;
switch(minutes) {
case 0: minuteNames = "punkt";break;
case 1: minuteNames = "eines";break;
case 2: minuteNames = "zwei";break;
case 3: minuteNames = "drei";break;
case 4: minuteNames = "vier";break;
case 5: minuteNames = "fuenf";break;
case 6: minuteNames = "sechs";break;
case 7: minuteNames = "sieben";break;
case 8: minuteNames = "acht";break;
case 9: minuteNames = "neun";break;
case 10: minuteNames = "zehn";break;
case 11: minuteNames = "elf";break;
case 12: minuteNames = "zwoelf";break;
case 13: minuteNames = "dreizehn";break;
case 14: minuteNames = "vierzehn";break;
case 15: minuteNames = "viertel nach";break;
case 16: minuteNames = "sechzehn";break;
case 17: minuteNames = "siebzehn";break;
case 18: minuteNames = "achtzeh";break;
case 19: minuteNames = "neunzehn";break;
case 20: minuteNames = "zwanzig";break;
case 21: minuteNames = "einundzwanzig";break;
case 22: minuteNames = "zweiundzwanzig";break;
case 23: minuteNames = "dreiundzwanzig";break;
case 24: minuteNames = "vierundzwanzig";break;
case 25: minuteNames = "fuenfundzwanzig";break;
case 26: minuteNames = "sechsundzwanzig";break;
case 27: minuteNames = "siebenundzwanzig";break;
case 28: minuteNames = "achtundzwanzig";break;
case 29: minuteNames = "neunundzwanzig";break;
case 30: minuteNames = "halb";break;
case 31: minuteNames = "einunddreißig";break;
case 32: minuteNames = "zweiunddreißig";break;
case 33: minuteNames = "dreiunddreißig";break;
case 34: minuteNames = "vierunddreißig";break;
case 35: minuteNames = "fuenfunddreißig";break;
case 36: minuteNames = "sechsunddreißig";break;
case 37: minuteNames = "siebenunddreißig";break;
case 38: minuteNames = "achtunddreißig";break;
case 39: minuteNames = "neununddreißig";break;
case 40: minuteNames = "vierzig";break;
case 41: minuteNames = "einundvierzig";break;
case 42: minuteNames = "zweiundvierzig";break;
case 43: minuteNames = "dreiundvierzig";break;
case 44: minuteNames = "vierundvierzig";break;
case 45: minuteNames = "dreiviertel";break;
case 46: minuteNames = "sechsudvierzig";break;
case 47: minuteNames = "siebenundvierzig";break;
case 48: minuteNames = "achtundvierzig";break;
case 49: minuteNames = "neunundvierzig";break;
case 50: minuteNames = "fuenfzig";break;
case 51: minuteNames = "einundfuenfzig";break;
case 52: minuteNames = "zwweiundfuenfzig";break;
case 53: minuteNames = "dreiundfuenfzig";break;
case 54: minuteNames = "vierundfuenfzig";break;
case 55: minuteNames = "fuenfundfuenfzig";break;
case 56: minuteNames = "sechsundfuenfzig";break;
case 57: minuteNames = "siebenundfuenfzig";break;
case 58: minuteNames = "achttundfuenfzig";break;
case 59: minuteNames = "neunundfuenfzig";break;
default: minuteNames = "Type valid nummer";break;
}
if(minutes == 0) {
System.out.println(minuteNames + " " + hourNames + " uhr");
}else if(minutes == 15) {
System.out.println(minuteNames + " " + hourNames + " uhr");
}else if(minutes == 30) {
System.out.println(minuteNames + " " + hourNames + " uhr");
}else if (minutes == 45) {
System.out.println(minuteNames + " " + hourNames + " uhr");
}else {
System.out.println(hourNames + " uhr " + minuteNames);
}
}
}
}
Upvotes: 2
Views: 88
Reputation: 365
Try this.
System.out.println("Type Hour: ");
int hours = In.readInt();
System.out.println("Type minutes: ");
int minutes = In.readInt();
if (minutes == 30)
{
hours++;
}
Upvotes: 2
Reputation: 109613
The problem is sometimes you want to use the name of hours+1. It is easiest to tackle such problems using the abstraction of several methods.
public static void main(String[] args) {
System.out.println("Type Hour: ");
int hours = In.readInt();
System.out.println("Type minutes: ");
int minutes = In.readInt();;
if (hours < 1 || hours > 12) {
System.out.println("*****");
System.exit(0);
} else if (minutes < 0 || minutes > 59) {
System.out.println("****");
System.exit(0);
}
System.println("Zeit: " + zeit(hours, minutes));
}
static String zeit(int hours, int minutes) {
if (minutes == 0) {
return hourName(hours) + " Uhr");
} else if (minutes == 15) {
return "Viertel nach " + hourName(hour) + " Uhr"); // Quarter past
// Ex-DDR:
//return "Viertel " + hourName(1 + (hour % 12)) + " Uhr"):
} else if (minutes == 30) {
int nextHour = hours + 1;
if (nextHour > 12) {
nextHour = 1;
}
return "Halb " + hourName(nextHour) + " Uhr");
} else if (minutes == 45) {
int nextHour = hours + 1;
if (nextHour > 12) {
nextHour = 1;
}
return "Viertel vor " + hourName(nextHour) + " Uhr");
} else {
return hourName(hours) + " Uhr " + minuteName(minutes));
}
}
static String hourName(int hours) {
String hourNames = null;
switch(hours) {
case 1: hourNames = "ein";break;
case 2: hourNames = "zwei";break;
case 3: hourNames = "drei";break;
case 4: hourNames = "vier";break;
case 5: hourNames = "f\u00FCnf";break;
case 6: hourNames = "sechs";break;
case 7: hourNames = "sieben";break;
case 8: hourNames = "acht";break;
case 9: hourNames = "neun";break;
case 10: hourNames = "zehn";break;
case 11: hourNames = "elf";break;
case 12: hourNames = "zw\u00F6lf";break;
default: System.out.println("Type valid hour");
}
return hourNames;
}
static String minuteName(int minutes) {
String minuteNames = null;
switch(minutes) {
case 0: minuteNames = "punkt";break;
case 1: minuteNames = "eines";break;
case 2: minuteNames = "zwei";break;
case 3: minuteNames = "drei";break;
case 4: minuteNames = "vier";break;
case 5: minuteNames = "f\u00FCnf";break;
case 6: minuteNames = "sechs";break;
case 7: minuteNames = "sieben";break;
case 8: minuteNames = "acht";break;
case 9: minuteNames = "neun";break;
case 10: minuteNames = "zehn";break;
case 11: minuteNames = "elf";break;
case 12: minuteNames = "zw\u00F6lf";break;
case 13: minuteNames = "dreizehn";break;
case 14: minuteNames = "vierzehn";break;
case 15: minuteNames = "f\u00FCnfzehn";break;
case 16: minuteNames = "sechzehn";break;
case 17: minuteNames = "siebzehn";break;
case 18: minuteNames = "achtzeh";break;
case 19: minuteNames = "neunzehn";break;
case 20: minuteNames = "zwanzig";break;
case 21: minuteNames = "einundzwanzig";break;
case 22: minuteNames = "zweiundzwanzig";break;
case 23: minuteNames = "dreiundzwanzig";break;
case 24: minuteNames = "vierundzwanzig";break;
case 25: minuteNames = "f\u00FCnfundzwanzig";break;
case 26: minuteNames = "sechsundzwanzig";break;
case 27: minuteNames = "siebenundzwanzig";break;
case 28: minuteNames = "achtundzwanzig";break;
case 29: minuteNames = "neunundzwanzig";break;
case 30: minuteNames = "halb";break;
case 31: minuteNames = "einunddreißig";break;
case 32: minuteNames = "zweiunddreißig";break;
case 33: minuteNames = "dreiunddreißig";break;
case 34: minuteNames = "vierunddreißig";break;
case 35: minuteNames = "fuenfunddreißig";break;
case 36: minuteNames = "sechsunddreißig";break;
case 37: minuteNames = "siebenunddreißig";break;
case 38: minuteNames = "achtunddreißig";break;
case 39: minuteNames = "neununddreißig";break;
case 40: minuteNames = "vierzig";break;
case 41: minuteNames = "einundvierzig";break;
case 42: minuteNames = "zweiundvierzig";break;
case 43: minuteNames = "dreiundvierzig";break;
case 44: minuteNames = "vierundvierzig";break;
case 45: minuteNames = "dreiviertel";break;
case 46: minuteNames = "sechsudvierzig";break;
case 47: minuteNames = "siebenundvierzig";break;
case 48: minuteNames = "achtundvierzig";break;
case 49: minuteNames = "neunundvierzig";break;
case 50: minuteNames = "fuenfzig";break;
case 51: minuteNames = "einundfuenfzig";break;
case 52: minuteNames = "zwweiundfuenfzig";break;
case 53: minuteNames = "dreiundfuenfzig";break;
case 54: minuteNames = "vierundfuenfzig";break;
case 55: minuteNames = "fuenfundfuenfzig";break;
case 56: minuteNames = "sechsundfuenfzig";break;
case 57: minuteNames = "siebenundfuenfzig";break;
case 58: minuteNames = "achttundfuenfzig";break;
case 59: minuteNames = "neunundfuenfzig";break;
default: minuteNames = "Type valid nummer";break;
}
return minuteNames;
}
If you already know the modulo operator %
:
int nextHour = 1 + (hours % 12);
Upvotes: 3
Reputation: 681
I think you have to do some Object Oriented programming. I would create an interface WordFormat with a method like
public String format(int hours, int minutes)
and a concrete class that hods your implementation.
then you can create other concrete class that translate in a different way following certain rules (if minutes are 30 then return else null).
at the end a class that allows you a logic like: given the ordered WordFormat, try to apply the first, if it fails (return null in my example) apply the second and so on until your last, default format...
Upvotes: 0