Java中的数字到单词的转换

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/25924949/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-08-11 01:31:16  来源:igfitidea点击:

Number to Word Conversion in Java

javaif-statementswitch-statement

提问by Jeremiah Pleas Eugene Johnson

I have this homework assignment for this class I'm retaking, the problem I'm running into is that I'm over-thinking the solution. I have to create a program that converts a four digit number to words.

我要重修这门课的家庭作业,我遇到的问题是我想太多了。我必须创建一个将四位数字转换为单词的程序。

(Example: 1134 becomes "One One Three Four")

(例如:1134变成“一一三四”)

I have a basic code, but it's bulky and ugly. I'm also only allowed to use basic if and switch statements, we have to use a switch statement as well.

我有一个基本的代码,但它又大又丑。我也只允许使用基本的 if 和 switch 语句,我们也必须使用 switch 语句。

Am I over thinking this? I can't figure out how to make this code shorter and I only want to use one switch statement without a while loop. Is it even possible or is this as short as it gets.

我是不是想多了?我不知道如何缩短这段代码,我只想使用一个没有 while 循环的 switch 语句。它甚至可能还是尽可能短。

Here's my code.

这是我的代码。

import java.util.Scanner;

public class NumberToWords {

 public static void main(String[] args) {
  //Set up scanner.
  Scanner kb = new Scanner(System.in);
  
  //Ask for a 4 digit integer.
  System.out.println("Enter a 4 digit number.");
  
  //Store 4 digit number into a variable
  int number = kb.nextInt();
  
  //Seperate number into digits.
  int digit4 = number%10;
  number = number/10;
  int digit3 = number%10;
  number = number/10;
  int digit2 = number%10;
  number = number/10;
  int digit1 = number%10;
  number = number/10;
  
  //Set up a switch statement to read through the number.
  switch (digit1)
  {
  case 1: System.out.print("One ");break;
  case 2: System.out.print("Two "); break;
  case 3: System.out.print("Three "); break;
  case 4: System.out.print("Four "); break;
  case 5: System.out.print("Five "); break;
  case 6: System.out.print("Six "); break;
  case 7: System.out.print("Seven "); break;
  case 8: System.out.print("Eight "); break;
  case 9: System.out.print("Nine "); break;
  case 0: System.out.print("Zero "); break;
  default: System.out.print(""); break;
  }
  switch (digit2)
  {
  case 1: System.out.print("One ");break;
  case 2: System.out.print("Two "); break;
  case 3: System.out.print("Three "); break;
  case 4: System.out.print("Four "); break;
  case 5: System.out.print("Five "); break;
  case 6: System.out.print("Six "); break;
  case 7: System.out.print("Seven "); break;
  case 8: System.out.print("Eight "); break;
  case 9: System.out.print("Nine "); break;
  case 0: System.out.print("Zero "); break;
  default: System.out.print(""); break;
  }
  switch (digit3)
  {
  case 1: System.out.print("One ");break;
  case 2: System.out.print("Two "); break;
  case 3: System.out.print("Three "); break;
  case 4: System.out.print("Four "); break;
  case 5: System.out.print("Five "); break;
  case 6: System.out.print("Six "); break;
  case 7: System.out.print("Seven "); break;
  case 8: System.out.print("Eight "); break;
  case 9: System.out.print("Nine "); break;
  case 0: System.out.print("Zero "); break;
  default: System.out.print(""); break;
  }
  switch (digit4)
  {
  case 1: System.out.print("One ");break;
  case 2: System.out.print("Two "); break;
  case 3: System.out.print("Three "); break;
  case 4: System.out.print("Four "); break;
  case 5: System.out.print("Five "); break;
  case 6: System.out.print("Six "); break;
  case 7: System.out.print("Seven "); break;
  case 8: System.out.print("Eight "); break;
  case 9: System.out.print("Nine "); break;
  case 0: System.out.print("Zero "); break;
  default: System.out.print(""); break;
  }
 }

}

回答by Xogle

Yeah, you can simply do that operation in a for loop, executed 4 times. The division and mod is consistent at 10. Something like

是的,您可以简单地在 for 循环中执行该操作,执行 4 次。除法和 mod 一致为 10。类似的东西

For i = 0; i < 4; i++
Number/10%10
Condition to check number
Save number in array or print

回答by Elliott Frisch

First, write a method to convert a single digit to a word. Something like,

首先,编写一个将单个数字转换为单词的方法。就像是,

private static String digitToWord(char ch) {
    switch(ch) {    
    case '0': return "Zero";
    case '1': return "One";
    case '2': return "Two";
    case '3': return "Three";
    case '4': return "Four";
    case '5': return "Five";
    case '6': return "Six";
    case '7': return "Seven";
    case '8': return "Eight";
    case '9': return "Nine";
    }
    return "Unknown (" + ch + ")";
}

Then you can get the Stringvalue of your int. And get the four characters from that String. Something like,

然后你可以得到String你的int. 并从中获取四个字符String。就像是,

int number = kb.nextInt();
String str = String.format("%04d", number);
StringBuilder sb = new StringBuilder();
sb.append(digitToWord(str.charAt(0)).append(' ');
sb.append(digitToWord(str.charAt(1)).append(' ');
sb.append(digitToWord(str.charAt(2)).append(' ');
sb.append(digitToWord(str.charAt(3));
System.out.println(sb.toString());

Or,

或者,

String str = String.format("%04d", kb.nextInt());
System.out.printf("%s %s %s %s%n", digitToWord(str.charAt(0)), 
    digitToWord(str.charAt(1)), digitToWord(str.charAt(2)),
    digitToWord(str.charAt(3)));

回答by nmore

Copy pasting code and names with numbers should be a red flag to use a loop (or something more is worng).

复制粘贴代码和带有数字的名称应该是使用循环的危险信号(或更多的东西)。

  private static final String[] DIGIT_NAMES = new String[] {"Zero ", "One ", "Two ", 
    "Three ", "Four ", "Five ", "Six ", "Seven ", "Eight ", "Nine "};

  public static void main(String[] args) {
    Scanner input = new Scanner(System.in);

    int number = 0;
    do {
      // ask for a 4 digit integer
      System.out.println("Enter a 4 digit number: ");
      try {
      number = input.nextInt();
      } catch (InputMismatchException ignore) {
        System.out.println("Recieved non integer input");
        input.next(); // clear bad input
      }
    } while (number < 1000 || number > 9999);

    String result = "";
    while (number != 0) {
      result = DIGIT_NAMES[number % 10] + result;
      number = number / 10;
    }
    System.out.println(result);
    input.close();
  }

回答by Shuchi Jain

this might help

这可能有帮助

public class NumbersInWords {

    public static void main(String[] args) {

        String number = "153";
        int numLength = number.length();
        System.out.println(numLength);
        String numberToWord = "";

        for (int j = 0; j < numLength; j++) {

            switch (number.charAt(j)) {

                case '1': {  
                    numberToWord = numberToWord + "one";
                    break;
                }
                case '2': { 
                    numberToWord = numberToWord + "two";
                    break;
                }
                case '3': {
                    numberToWord = numberToWord + "three";
                    break;
                }
                case '4': {
                    numberToWord = numberToWord + "four";
                    break;
                }
                case '5': {
                    numberToWord = numberToWord + "five";
                    break;
                }
                case '6': {
                    numberToWord = numberToWord + "six";
                    break;
                }
                case '7': {
                    numberToWord = numberToWord + "seven";
                    break;
                }
                case '8': {
                    numberToWord = numberToWord + "eight";
                    break;
                }
                case '9': {
                    numberToWord = numberToWord + "nine";
                    break;
                }
                default: {
                    numberToWord = numberToWord + "zero";
                }
            }
        }
        System.out.println(numberToWord);
    }
}