Jan M
Jan M

Reputation: 138

Time in Text - Java

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

Answers (3)

Frederik De Clercq
Frederik De Clercq

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

Joop Eggen
Joop Eggen

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

marco
marco

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

Related Questions