【问题标题】:Converting an input word number (like seven) into a character (like @)将输入的字数(如七)转换为字符(如@)
【发布时间】:2010-12-07 16:03:35
【问题描述】:

所以如果用户使用 Scanner 键入七,@@@@@@@ (7) 将是输出。我将不得不使用 for 循环语句,但我至少可以弄清楚这么多。只是需要帮助找出一种将单词数字转换为数字数字并最终转换为随机字符的方法。

【问题讨论】:

  • 展示您迄今为止的工作会很有帮助。
  • 输入究竟会是什么样子?更长的数字会被连字吗(例如,七十三对七十三)?您是从美式英语还是英式英语转换而来(例如 10 亿对 1 亿)? “和”这个词会在个位数之前(例如,一百零三对一百三)吗?

标签: java algorithm loops for-loop


【解决方案1】:

您应该对这个问题更具体。这是我理解的问题的一个非常基本的解决方案(一个非常有限的解决方案)。

Scanner in = new Scanner(System.in);
Random rand = new Random();

String word = in.nextLine().toLowerCase();
int number = 0;

// Convert a word number into a numerical number.
if (word.equals("one"))
    number = 1;
else if (word.equals("two"))
    number = 2;
else if (word.equals("three"))
    number = 3;
else if (word.equals("four"))
    number = 4;
else if (word.equals("five"))
    number = 5;
else if (word.equals("six"))
    number = 6;
else if (word.equals("seven"))
    number = 7;
else if (word.equals("eight"))
    number = 8;
else if (word.equals("nine"))
    number = 9;
else
    System.out.println("Number does not exist. ");

// Convert the number into a random character.
char character = (char) (33 + rand.nextInt(94));

// Print the character as many times as the number implies.
for (int i = 0; i < number; i++)
    System.out.print(character);

【讨论】:

  • 你会想使用 equalsIgnoreCase() 这样你就不必担心“Seven”、“SEven”等。
  • 在 if 块之前将单词小写更便宜
【解决方案2】:

您需要做的第一件事是将有效的数字字符串“十”、“二十五”等转换为数字,然后将该数字传递到循环中。

因此,您基本上需要编写一个标记解析器来将单词转换为数字。然后定义标记将允许您轻松转换为 int。 (在这个例子中我只打算处理整数)。

明显的标记:

  1. 一、二、三等(一到十九)。 (称之为数字)。
  2. 二十、三十、四十等(二十到九十)。 (称之为十)
  3. 百、千等(称之为力量)

使用“”、“and”和“-”作为分隔符(常用的写法是 106 或 25)。

然后您可以将您的字符串解析为标记,这应该为您提供转换为 int 的规则。从右边开始,向左工作,你遵循一定的规则。一次递归地使用两个令牌。沿途添加。幂是一种特殊情况,您可以乘以前面的数字。

例如,“一百二十七”将转换为标记:

数字功率十位数

这将使用规则 (DIGIT + TENS) + (DIGIT * POWER)

(7 + 20) + (1 * 100) = 127

转换后,您可以使用 for 循环轻松转换为重复字符串。

我希望这能让你朝着正确的方向开始。

【讨论】:

    【解决方案3】:

    我将不得不使用 for 循环语句,但我至少可以弄清楚这么多。

    我在这里没有看到太多关于面向对象方法的内容。我讨厌看到人们采用面向对象的语言并用它编写 Fortran。

    从一个对象开始,把这个问题分解成几个部分:

    1. 将单词转换为数字并返回,而不考虑输入或输出。
    2. 读入一个字符串,将其解析为单词,并进行验证,因为您不能接受所有字符串。
    3. 您的特殊输出需求。

    不要从数字、字符串和扫描仪的角度来思考这样一个原子级别。创建一个抽象;想象一个对象并开始分解。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-01-28
      相关资源
      最近更新 更多