You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

关键修复点说明

  1. 十几数处理逻辑:百位余数如果是10-19,直接调用ones[remainder]获取完整单词,比如112的余数是12,直接取"twelve",解决了原代码拆分错误的问题。
  2. and的判断条件:改为判断remainder !=0,只有百位后面还有非零数字时才添加"and",避免了100这类数字错误添加内容的情况。
  3. 拼写修正:把tens数组里的"fourty"改成正确的"forty"。
  4. 使用StringBuilder:相比字符串拼接更高效,避免多次创建字符串对象。
  5. 输入处理修复:替换不存在的In类为标准的Scanner,同时增加输入合法性判断,防止用户输入超出范围的数字。
  6. 两位数末尾空格处理:当个位为0时,不添加空格和空字符串,比如20会正确输出"twenty"而非"twenty "。

内容的提问来源于stack exchange,提问作者FatherFabian

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.28 13:17:53