package javacodebook.core.writtennumber; public class EnglishNumber implements WrittenNumber { int number; private static final String []EINER = { "zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine", "ten", "eleven", "twelve", "thirteen", "fourteen", "fifteen", "sixteen", "seventeen", "eighteen", "nineteen" }; private static final String []ZEHNER = { "","","twenty", "thirty", "fourty", "fivety", "sixty", "seventy", "eighty", "ninety" }; public EnglishNumber(int number) { this.number = number; } public void setNumber(int number) { this.number = number; } public String toString() { if (number == 0) return "zero"; else if (number == 1) return "one"; else { StringBuffer buf = new StringBuffer(); lessMillion(buf, number); return buf.toString(); } } private void less100(StringBuffer buf, int number) { if (number == 0) return; else if (number < 20) buf.append(EINER[number]); else if (number%10 == 0){ buf.append(ZEHNER[number/10]); } else { buf.append(ZEHNER[number/10]); buf.append(" "); buf.append(EINER[number%10]); } } private void less1000(StringBuffer buf, int number) { if (number < 100) { less100(buf, number); } else if (number%100 == 0) { buf.append(EINER[number/100]); buf.append(" hundred"); } else { buf.append(EINER[number/100]); buf.append(" hundred "); less100(buf, number%100); } } private void lessMillion(StringBuffer buf, int number) { if (number < 1000) { less1000(buf, number); } else { less1000(buf, number/1000); buf.append(" thousand "); less1000(buf, number%1000); } } } --- Neue Klasse --- package javacodebook.core.writtennumber; public class GermanNumber implements WrittenNumber { int number; private static final String []EINER = { "null", "ein", "zwei", "drei", "vier", "fünf", "sechs", "sieben", "acht", "neun", "zehn", "elf", "zwölf", "dreizehn", "vierzehn", "fünfzehn", "sechszehn", "siebzehn", "achtzehn", "neunzehn" }; private static final String []ZEHNER = { "","","zwanzig", "dreissig", "vierzig", "fünfzig", "sechzig", "siebzig", "achtzig", "neunzig" }; public GermanNumber(int number) { this.number = number; } public void setNumber(int number) { this.number = number; } public String toString() { if (number == 0) return "null"; else if (number == 1) return "eins"; else { StringBuffer buf = new StringBuffer(); lessMillion(buf, number); return buf.toString(); } } private void less100(StringBuffer buf, int number) { if (number == 0) return; else if (number == 1) buf.append("eins"); else if (number < 20) buf.append(EINER[number]); else if (number%10 == 0){ buf.append(ZEHNER[number/10]); } else { buf.append(EINER[number%10]); buf.append("und"); buf.append(ZEHNER[number/10]); } } private void less1000(StringBuffer buf, int number) { if (number < 100) { less100(buf, number); } else if (number%100 == 0) { buf.append(EINER[number/100]); buf.append("hundert"); } else { buf.append(EINER[number/100]); buf.append("hundert "); less100(buf, number%100); } } private void lessMillion(StringBuffer buf, int number) { if (number < 1000) { less1000(buf, number); } else if (number < 2000) { buf.append("ein tausend "); less1000(buf, number%1000); } else { less1000(buf, number/1000); buf.append(" tausend "); less1000(buf, number%1000); } } } --- Neue Klasse --- package javacodebook.core.writtennumber; public class RomanNumber implements WrittenNumber { private int n; public RomanNumber(int number) throws Exception { setNumber(number); } public void setNumber(int number) throws Exception { if ((number <0) || (number > 5000)) throw new Exception("number out of range"); this.n = number; } public String toString() { if (n == 0) return ""; StringBuffer b = new StringBuffer(""); while (n >= 1000) { b.append("M"); n -= 1000;} if (n >= 900) { b.append("CM"); n -= 900; } if (n >= 500) { b.append("D"); n -= 500; } if (n >= 400) { b.append("CD"); n -= 400; } while (n >= 100) { b.append("C"); n -= 100; } if (n >= 90) { b.append("XC"); n -= 90; } if (n >= 50) { b.append("L"); n -= 50; } if (n >= 40) { b.append("XL"); n -= 40; } while (n >= 10) { b.append("X"); n -= 10; } if (n >= 9) { b.append("IX"); n -= 9; } if (n >= 5) { b.append("V"); n -= 5; } if (n >= 4) { b.append("IV"); n -= 4; } while (n > 0) { b.append("I"); n -= 1; } return b.toString(); } } --- Neue Klasse --- package javacodebook.core.writtennumber; import java.text.DateFormat; import java.util.Calendar; public class Starter { public static void main(String []args) throws Exception { WrittenNumber r = new RomanNumber(0); WrittenNumber g = new GermanNumber(0); WrittenNumber e = new EnglishNumber(0); for (int i=1; i<24; i++) { r.setNumber(i); g.setNumber(i); e.setNumber(i); System.out.println("" + i + " " + r + "\t" + g + "\t" + e); } } }