java - Java 中的数字到单词的转换

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

}

最佳答案

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

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

然后你就可以得到你的intString值。并从该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());

或者,

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

关于java - Java 中的数字到单词的转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25924949/

相关文章:

使用接口(interface)的 Java 泛型方法

java - 自定义 ListView onItemClickListener

r - For循环提取数据

function - 是否可以在 PowerShell 函数中自动传递开关参数?

enums - 在 Gosu 中使用枚举代替 switch case

Java Regex 在大行上抛出 StackOverflow

java - 在 Java 中用一个字符替换多个单个字符?

java - 测试成绩评分器 - Java 初学者

c - 从 C 语言到汇编语言的 If 语句转换(Motorola 68k)

c++ - 需要帮助使用 switch 语句创建函数和错误