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