Java整数转英文单词程序故障:百位及十几数转换异常
修复整数转英文单词的Java程序问题
原代码存在的核心问题
- 处理百位后余数为10-19的数字时逻辑错误,没有直接使用
ones数组中对应的十几数,而是错误拆分十位和个位 - 判断百位后是否需要加"and"的条件错误,应该判断
num%100 !=0而非num%10 !=0,导致像100这类数字会错误添加内容,还可能引发不必要的数组访问 tens数组里"fourty"拼写错误,正确应为"forty"- 两位数处理逻辑中,当个位为0时会多出空格(比如20会输出"twenty ")
main方法中使用了不存在的In类,应该用Scanner来读取输入
修复后的完整代码
import java.util.Scanner; public class NumberToWords { public static String intToWords(int num) { String ones[] = {"", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine", "ten", "eleven", "twelve", "thirteen", "fourteen", "fifteen", "sixteen", "seventeen", "eighteen", "nineteen"}; String tens[] = {"", "", "twenty", "thirty", "forty", "fifty", "sixty", "seventy", "eighty", "ninety"}; StringBuilder words = new StringBuilder(); if (num == 0) { return "zero"; } if (num >= 100) { words.append(ones[num / 100]).append(" hundred"); int remainder = num % 100; if (remainder != 0) { words.append(" and "); if (remainder < 20) { words.append(ones[remainder]); } else { words.append(tens[remainder / 10]); int onesDigit = remainder % 10; if (onesDigit != 0) { words.append(" ").append(ones[onesDigit]); } } } } else if (num >= 20) { words.append(tens[num / 10]); int onesDigit = num % 10; if (onesDigit != 0) { words.append(" ").append(ones[onesDigit]); } } else { words.append(ones[num]); } return words.toString().trim(); } public static void main(String[] args) { Scanner scanner = new Scanner(System.in); int num; System.out.print("Enter a number between 0-999, or -1 to exit: "); while ((num = scanner.nextInt()) != -1) { if (num < 0 || num > 999) { System.out.println("Invalid number! Please enter a number between 0-999."); } else { String words = intToWords(num); System.out.println("In Words: " + words); } System.out.print("Enter a number between 0-999, or -1 to exit: "); } scanner.close(); } }
关键修复点说明
- 十几数处理逻辑:百位余数如果是10-19,直接调用
ones[remainder]获取完整单词,比如112的余数是12,直接取"twelve",解决了原代码拆分错误的问题。 - and的判断条件:改为判断
remainder !=0,只有百位后面还有非零数字时才添加"and",避免了100这类数字错误添加内容的情况。 - 拼写修正:把
tens数组里的"fourty"改成正确的"forty"。 - 使用StringBuilder:相比字符串拼接更高效,避免多次创建字符串对象。
- 输入处理修复:替换不存在的
In类为标准的Scanner,同时增加输入合法性判断,防止用户输入超出范围的数字。 - 两位数末尾空格处理:当个位为0时,不添加空格和空字符串,比如20会正确输出"twenty"而非"twenty "。
内容的提问来源于stack exchange,提问作者FatherFabian
相关产品推荐
相关产品推荐

