【问题标题】:Converting numbers to words in Java [duplicate]在Java中将数字转换为单词[重复]
【发布时间】:2014-02-21 20:41:40
【问题描述】:

我的程序是将 0 到 100 之间的数字转换为单词。我不确定哪种策略最适合解决这个问题,但我想使用模块等数学运算符。这就是我目前所掌握的。

package project.pkg1;

import java.util.Scanner;

public class Project1 {
public static final int MINUMUN_NUMBER = 0;
public static final int MAXIMUM_NUMBER = 100;
public static void main(String[] args) {
Scanner keyboard = new Scanner(System.in);
int num, x;
do{
    System.out.println("Enter a number between 0 and 100: ");
    num = keyboard.nextInt();

} while ((num < 0) || (num > 100));
if(num == 0)
        System.out.println("zero");
if(num == 100)
        System.out.println("one hundred");

我不想每次都使用 if(num == x)。我的验证陷阱确保它在 0 到 100 之间工作正常。我只是不确定如何处理其余部分。这是我可以打印的:

run:
Enter a number between 0 and 100: 
-1
Enter a number between 0 and 100: 
101
Enter a number between 0 and 100: 
34
BUILD SUCCESSFUL (total time: 23 seconds)

我需要 34 来打印“三十四” 任何反馈将不胜感激!

【问题讨论】:

  • 这是一项乏味的任务。我建议写下数字和它们的匹配词,以找到案例的相似之处。将涉及许多if 语句。
  • 不一定是 if 语句,例如如果单词存储为数组元素,数字为索引。
  • 有一个基本和不规则情况的地图(1->一,2->二,...);尝试使用组合规则(例如 46 = (40) 四十 + (6) 六)。
  • 不是重复的,因为 1-100 是一种特殊情况,手工完成时更易于管理。
  • 记得大学的时候,有人写了一个 100 swich case block,太搞笑了:-)

标签: java module numbers words


【解决方案1】:

你应该看看从 0 到 100 的数字的模式是什么。这是你会发现的:

  • 个位数:从 String[] digit = {"zero", "one", two, ... , "ten" } 中提取
  • 对于青少年从 String[] 中提取 teen = {"eleven", "twelve", ... ,"nineteen"}
  • 对于较大的数字除以 10 并从 {"twenty", "thirty", ... "ninety"} 中提取;然后,如果数字除以十有余数,则添加数字部分“-”+从上面的数字中提取。

【讨论】:

  • 如何让它除以十,然后加上个位数?
【解决方案2】:

您不妨为 1-19 和 100 的数字创建单独的变量。至于 20-99,它们具有可以使用字符串连接组合的前缀和后缀,并且可以通过第一个和最后一个数字来识别。

【讨论】:

  • 是的,我想我会做 1-19、20-99、100 个变量,但我不确定如何设置它们以及如何组合它们。对不起,我对编码很陌生。
  • 如果您愿意,可以尝试一下并在您的工作中发布另一个问题。
【解决方案3】:
public class NumbersToWords {

    private static final String[] NUMBERS = {
        "zero",
        "one",
        "two",
        "three",
        "four",
        "five",
        "six",
        "seven",
        "eight",
        "nine",
        "ten",
        "eleven",
        "twelve",
        "thirteen",
        "fourteen",
        "fifteen",
        "sixteen",
        "seventeen",
        "eighteen",
        "nineteen",
        "one hundred"
    };

    private static final String[] TENS = {
        "twenty",
        "thirty",
        "fourty",
        "fifty",
        "sixty",
        "seventy",
        "eighty",
        "ninty"
    };

    public static String numberToWord( final int number ){
        if ( number < 0 )
            throw new IllegalArgumentException( "Number too low" );
        if ( number > 100 )
            throw new IllegalArgumentException( "Number too high" );
        if ( number < 20 )
            return NUMBERS[number];
        if ( number == 100 )
            return NUMBERS[20];
        return TENS[number/10-2] + ((number%10>0)?(" "+NUMBERS[number%10]):"");
    }

    public static void main(String[] args) {
        for ( int i = 0; i <= 100; ++i )
            System.out.println( numberToWord( i ) );
    }
}

【讨论】:

  • 我非常感谢代码!但是,我试图让您的代码输出的内容作为我的答案。我需要它来输出输入一个介于 0 和 100 之间的数字:34 三十四
猜你喜欢
  • 1970-01-01
  • 2022-05-30
  • 2011-02-13
  • 2020-02-17
  • 1970-01-01
  • 2012-03-05
  • 2010-10-02
相关资源
最近更新 更多