2016-08-15 82 views
-2

这是我的第一篇文章,我目前正在努力创建一个程序,它可以将一个数字的输入转换为各自的单词。我的代码到目前为止写在下面,我似乎无法得到数十正常工作,即21,31,41,51等。Java数字到字(0-999)

public class NumberToWords { 
    public static void main(String[] args) { 
     System.out.print("Number: "); 
     int value = In.nextInt(); 
     int onesDigit; 
     int tensDigit; 
     String [] ones = {"zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine", "ten", 
      "eleven", "tweleve", "thirteen", "fourteen", "fifteen", "sixteen", "seventeen", "eighteen", "nineteen"}; 

     String [] tens = {"", "", "twenty", "thirty", "forty", "fifty", "sixty", "seventy", "eighty", "ninety"}; 

     String [] hundreds = {"one hundred", "two hundred", "three hundred", "four hundred", "five hundred", 
      "six hundred", "seven hundred", "eight hundred", "nine hundred" }; 
    while(value != -1) 
{ 
    if (value < 20) 
    { 
     String result = ones[value]; 
     System.out.println("Result " + result); 
     value = In.nextInt(); 
    } 
    if (value > 20 && value < 100) 
    { 
     tensDigit = value%10; 
     onesDigit = value/10; 
     System.out.print("Result " + ones[onesDigit] + " " + tens[tensDigit]); 
     value = In.nextInt(); 

    } 
} 

}  
} 

任何帮助将不胜感激。

谢谢

+0

两个提示:逆序;并与分部和模运营商进行实验。 –

回答

3

下面的代码是不正确的:

tensDigit = value%10; 
onesDigit = value/10; 

的十位数,应该是value/10(即4如果值是41),而个位数字应该是value%10 (值除以十的余数)。

使用这个代替:

tensDigit = value/10; 
    onesDigit = value%10; 

此外,还有其他需要注意的事项:

  • 那什么事都打印,如果值等于20,因为无论是否条件将匹配。

  • 任何可以被十整除的值大于十(二十,三十等)都会打印出类似“二十零”的值。添加另一个处理value==0的特殊情况的if语句,并将零数组输入为空字符串。

  • 交换机级联的打印语句以tens[tensDigit] + " " + ones[onesDigit])