我的反向方法没有反向任何东西?

问题描述

这是我的代码

public static void numberToWords(int number){
    int lastDigit;

    if(number < 0){
        System.out.println("Invalid Value");
    }
    while(number != 0) {
        lastDigit = number % 10; // lastDigit = 3
        number = number / 10;
        reverse(number);

        if (lastDigit == 0) {
            System.out.println("ZERO");
        }
        if (lastDigit == 1) {
            System.out.println("ONE");
        }
        if (lastDigit == 2) {
            System.out.println("TWO");
        }
        if (lastDigit == 3) {
            System.out.println("THREE");
        }
        if (lastDigit == 4) {
            System.out.println("FOUR");
        }
        if (lastDigit == 5) {
            System.out.println("FIVE");
        }
        if (lastDigit == 6) {
            System.out.println("SIX");
        }
        if (lastDigit == 7) {
            System.out.println("SEVEN");
        }
        if (lastDigit == 8) {
            System.out.println("EIGHT");
        }
        if (lastDigit == 9) {
            System.out.println("NINE");
        }
    }
}

public static void reverse(int a){
    int finalDigit = 0;
    int reverse1 = 0;

    while(a > 0) {
        finalDigit = a % 10;
        reverse1 = reverse1 * 10 + finalDigit;
        a = a / 10;
    }
}

我的数字根据需要打印为字符串,但它们的顺序相反。

我尝试在转换方法中加入反向方法,但结果总是一样,不知道如何反向。

解决方法

  1. 删除所有 if 语句,使用 Array 存储数字到单词的关联(数字 = 数组索引,字符串 = 数组值)
  2. 从右到左查找每个数字,构建所有数字单词的列表
  3. 反转它
  4. 对列表做任何你想做的事情(即将它加入一个字符串)
class NumTest {
    
    private static final String[] digits = {
        "ZERO","ONE","TWO","THREE","FOUR","FIVE","SIX","SEVEN","EIGHT","NINE"
    };
    
    private String numAsString(int num) {
        List<String> lDigs = new ArrayList<>();
        while (num > 0) {
            String dig = digits[num % 10];
            lDigs.add(dig);
            num /= 10;
        }
        Collections.reverse(lDigs);
        return lDigs.stream().collect(Collectors.joining(" "));
    }
    
    @Test
    public void testNumAsString() {
        Map<Integer,String> nums = new LinkedHashMap<>();
        //nums.put(0,"ZERO"); <- will return empty string
        nums.put(1,"ONE");
        nums.put(24,"TWO FOUR");
        nums.put(2567,"TWO FIVE SIX SEVEN");
        nums.put(90000,"NINE ZERO ZERO ZERO ZERO");
        nums.put((int) 1.56e6,"ONE FIVE SIX ZERO ZERO ZERO ZERO");
        
        for (Entry<Integer,String> test: nums.entrySet()) {
            String res = numAsString(test.getKey());
            System.out.println(String.format("%d -> %s",test.getKey(),res));
            assertEquals(test.getValue(),res);
        }
    }
    
}