Java 将数字转换为德语单词

Java 将数字转换为德语单词,java,Java,因此,我的任务是将数字转换为德语,而我在“ein”和“ein”方面遇到了问题。 每当我输入101101-->时,我得到的是“Einhunderteinstausendinsteins”,这是不正确的,它只是数字中最后一个需要以s-->“eins”结尾的ein,但不知何故,我的ein也在einstausend中? 有没有办法解决这个问题 public abstract class InGerman { public static void main(String[] args) {

因此,我的任务是将数字转换为德语,而我在“ein”和“ein”方面遇到了问题。
每当我输入101101-->时,我得到的是“Einhunderteinstausendinsteins”,这是不正确的,它只是数字中最后一个需要以s-->“eins”结尾的ein,但不知何故,我的ein也在einstausend中? 有没有办法解决这个问题

public abstract class InGerman {

    public static void main(String[] args) {
        int number = Terminal.getInt("Enter a number between 1 - 999999:  --->  ");
        Terminal.put("number in german: " + inGerman(number));
    }

    public static final String[] unitsArray = {" ", "eins", "zwei", "drei", "vier", "fünf", "sechs", "sieben", "acht",
            "neun", "zehn", "elf", "zölf", "dreizehn", "vierzehn", "fünfzehn", "sechszehn", "siebzehn", "achtzehn",
            "neunzehn"};
    public static final String[] tensArray = {" ", "zehn", "zwanzig", "dreissig", "vierzig", "fünfzig", "sechszig",
            "siebzig", "achtzig", "neunzig"};

    static int einer = 0;

    private static String inGerman(int number) {
        // variable to hold string representation of number
        String words = "";

        while (number == 0 || number == 1) {
            if (number == 0)
                return "null";
            if (number == 1) {
                return words + "ein";
            }
        }
        // check if number is divisible by 1 million
        if ((number / 1000000) > 0) {
            words += inGerman(number / 1000000) + "million" + "";
            number %= 1000000;
        }
        // check if number is divisible by 1 thousand
        if ((number / 1000) > 0) {
            words += inGerman(number / 1000) + "tausend";
            number %= 1000;

        }
        // check if number is divisible by 1 hundred
        if ((number / 100) > 0) {
            words += inGerman(number / 100) + "hundert";
            number %= 100;
        }

        if (number > 0) {
            // check if number is within teens
            if (number < 20) {
                // fetch the appropriate value from unit array
                words += unitsArray[number];
            } else {
                // fetch the appropriate value from tens array
                words += unitsArray[number % 10];
                if ((number % 10) > 0) {
                    words += "und" + tensArray[number / 10];
                }
            }
        }

        return words;
    }
}
公共抽象类InGerman{
公共静态void main(字符串[]args){
int number=Terminal.getInt(“输入一个介于1-999999:-->”之间的数字);
终端。put(“德语数字:+inGerman(数字));
}
公共静态最终字符串[]unitsArray={“,”eins“,”zwei“,”drei“,”vier“,”fünf“,”sechs“,”sieben“,”acht“,
“neun”、“zehn”、“elf”、“zölf”、“dreizehn”、“vierzehn”、“fünfzehn”、“sechszehn”、“siebzehn”、“achtzehn”,
“neunzehn”};
公共静态最终字符串[]tensArray={”、“zehn”、“zwanzig”、“dreissig”、“vierzig”、“fünfzig”、“sechszig”,
“siebzig”、“achtzig”、“neunzig”};
静态整数=0;
私有静态字符串inGerman(整数){
//用于保存数字的字符串表示形式的变量
字串=”;
while(number==0 | | number==1){
如果(数字==0)
返回“null”;
如果(数字==1){
返回单词+“ein”;
}
}
//检查数字是否可以被一百万整除
如果((数量/1000000)>0){
单词+=inGerman(数字/1000000)+“百万”+”;
数字%=1000000;
}
//检查数字是否可以被1000整除
如果((数字/1000)>0){
单词+=inGerman(数字/1000)+“tausend”;
数字%=1000;
}
//检查数字是否可以被100整除
如果((数字/100)>0){
单词+=inGerman(数字/100)+“hundert”;
数字%=100;
}
如果(数字>0){
//检查数字是否在10以内
如果(数字<20){
//从单元数组中获取适当的值
单词+=单位数组[数字];
}否则{
//从数组中获取适当的值
单词+=单位数组[数字%10];
如果((数字%10)>0){
单词+=“und”+时态数组[number/10];
}
}
}
返回单词;
}
}

除了无意义的while语句和未使用的
静态int einer
之外,代码还不错

可以在unitsArray中包含“null”和“ein”(而不是“eins”),并删除while语句。然后将“inGerman”更改为私有方法“internalInGerman”,并在新的公共inGerman方法中处理特殊情况1(可能是0?请自己查看),如下所示:

public String inGerman(int number) {
    return number == 1 ? "eins" : internalInGerman(number);
}

@乔金·丹尼尔森是对的。不能使用值
1
递归调用
inGerman
,因为该方法无法判断“ein”或“eins”将在单词中的何处结束

这些行都会产生值
1
,该值将始终从
unitsArray
中提取
eins

number %= 1000000;
number %= 1000;
number %= 100;
如果您想像我一样采用惰性方法,可以在
unitsArray
中将
ein
替换为
ein
,然后对字符串调用此方法:

inGerman(number).replaceAll( "ein$", "eins");

在我看来,你需要做一个额外的检查,这样你就不会用值1调用inGerman recursive(至少在除以较大的数字时),而是直接处理它。
zölf
应该是
zwölf
dreissig
应该是
dreißig
sechszehn
应该是
sechzehn
。还有它的
eintausend
zweitausend
,但对于数百万人来说,它的
是一个百万维也纳人(singualr),然后是
zwei百万荷兰人(百万复数)。这同样适用于Milliarde/milliarden、十亿/十亿等。有没有办法在inGerman方法中这样做,而不在my:public static void main(String[]args){int number=Terminal.getInt(“输入一个介于1-999999:-->”之间的数字);Terminal.put(“德语数字:“+inGerman(number.replaceAll”(“ein$”,“eins”));如果你真的想,你可以这样做:返回words.replaceAll(“ein”,“ein”).replaceAll(“ein$”,“ein”);啊,放在那里当然有道理,非常感谢你的帮助:)