Java中的数字转换为Word

时间:2014-09-19 01:25:08

标签: java if-statement switch-statement

我正在为我正在重修的这门课做这个家庭作业,我遇到的问题是我过度思考解决方案。我必须创建一个程序,将四位数转换为单词。

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

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

我在想这个吗?我无法弄清楚如何使这段代码更短,我只想使用一个没有while循环的switch语句。它是否可能,或者它是否尽可能短。

这是我的代码。

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;
		}
	}

}

4 个答案:

答案 0 :(得分:2)

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

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 + ")";
}

然后,您可以获得String的{​​{1}}值。并从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());

答案 1 :(得分:1)

这可能会有所帮助

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);
    }
}

答案 2 :(得分:0)

是的,您可以在for循环中执行该操作,执行4次。除法和mod在10处是一致的。像

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

答案 3 :(得分:0)

使用数字复制粘贴代码和名称应该是一个红色标记以使用循环(或更多的东西)。

  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();
  }