需要帮助来了解这一基本挑战吗?

时间:2020-09-15 00:46:37

标签: java loops

当前正在做一个称为数字到单词的挑战,我创建了2种方法,其中一种 处理各个值的比较,以便可以打印出字符串值(称为numberToWord的方法),另一种称为reverse的方法,基本上对值进行重新排序,以便按正确的顺序打印,例如: 步骤567->步骤2,它将转换为765->步骤3,然后反向方法将其分别转换回5、6、7,以便可以将这些值与if语句进行比较。但是,我已经尝试了很多方法来使它起作用,我设法使其进入了步骤3,但是当我尝试返回该值时,它在转换之前给了我3个随机值,例如= 7,6,7 ... 5 ,6,7,我无法弄清楚如何删除前三个值并仅返回最后三个值,以便可以在numberToWords方法中进行比较。

package com.company;

public class Main {

    public static void main(String[] args) {
        numberToWords(567);


    }

    public static void numberToWords(int number) {
        int lastDigit = 0;
        int digit = number;
        int reverseDigit = 0;

        if (number < 0) {
            System.out.println("Invalid Value");
        }

        for (int i = 0; i < digit; i++) {
            //so we are taking the last digit from 567 per iteration
            lastDigit = digit % 10;
            //we are then dividing the digit by 10 each time so we can get another last digit
            digit /= 10;
            //i will now try to essentially get down to the final number which will be flipped
            reverseDigit = (reverseDigit * 10) + lastDigit;
            //checking values
            System.out.println(reverse(reverseDigit));

//            if (reverse(reverseDigit)== 0) {
//                System.out.println("Zero");
//            } else if (reverse(reverseDigit) == 1) {
//                System.out.println("One");
//            }else if (reverse(reverseDigit) == 2) {
//                System.out.println("Two");
//            }else if (reverse(reverseDigit) == 3) {
//                System.out.println("Three");
//            }else if (reverse(reverseDigit) == 4) {
//                System.out.println("Four");
//            }else if (reverse(reverseDigit) == 5) {
//                System.out.println("Five");
//            }else if (reverse(reverseDigit) == 6) {
//                System.out.println("Six");
//            }else if (reverse(reverseDigit) == 7) {
//                System.out.println("Seven");
//            }else if (reverse(reverseDigit) == 8) {
//                System.out.println("Eight");
//            }else if (reverse(reverseDigit) == 9) {
//                System.out.println("Nine ");
//            }

                if (lastDigit == 0) {
                    System.out.println("Zero");
                } else if (lastDigit == 1) {
                    System.out.println("One");
                } else if (lastDigit == 2) {
                    System.out.println("Two");
                } else if (lastDigit == 3) {
                    System.out.println("Three");
                } else if (lastDigit == 4) {
                    System.out.println("Four");
                } else if (lastDigit == 5) {
                    System.out.println("Five");
                } else if (lastDigit == 6) {
                    System.out.println("Six");
                } else if (lastDigit == 7) {
                    System.out.println("Seven");
                } else if (lastDigit == 8) {
                    System.out.println("Eight");
                } else if (lastDigit == 9) {
                    System.out.println("Nine");
                }
        }
    }


        public static int reverse (int a){
        int lastDigit = 0;
        for (int i =0; i < a; i++) {
                lastDigit = a % 10;
                a /= 10;
        //testing values here
        //System.out.println(lastDigit);
                //sout in loop gives us 567
        }

        return lastDigit;
        }


}

2 个答案:

答案 0 :(得分:0)

我认为您有正确的想法,可以对numberToWords()和reverse()进行余数除法。 但是我认为您退出for循环的条件是错误的

for (int i = 0; i < digit; i++)

它将在您获得所有数字之前退出。您想要循环直到数字为0,因为您要除以除法直到没有除数(意味着数字为0)。

如此

for(int i = 0; digit != 0; i++){
...
}

while循环可能比for循环要好,因为您还是不使用i。

while(digit != 0){
...
}

这还取决于您所使用的IDE,但是IntelliJ和eclipse可以逐行进行调试,以便您查看引起问题的行。

答案 1 :(得分:0)

如果我正确理解您的需求,则不需要那么多代码。只需将除数提示打印为10,然后除以10,即可进行下一次迭代,直到得到零为止。

enum Numbers {
    Zero,
    One,
    Two,
    Three,
    Four,
    Five,
    Six,
    Seven,
    Eight,
    Nine;
}

private static void process(int number) {
    do {
        final int digit = number % 10;
        System.out.println(Numbers.values()[digit]);
        number /= 10;
    } while (number > 0);
}

首先使用一个枚举,因为您可以像数组一样使用它,但是更易于声明。然后使用您得到的号码,首先获得超过10条的提醒。对于任何用十进制表示的整数,十位以上的提示是最后一位。由于您必须首先打印最后一位,所以只打印它即可。然后将数字替换为数字除以十。因为这是整数除法,所以将舍弃最后一位(刚刚打印出的一位)。我的意思是,超过10的1234是123.4,但是因为它们是整数,所以它会被截断为123。因此,现在循环并再次打印最后一位(但由于除法,它现在是左边的第一位)。在某个时候,在打印原始数字的第一位后,您将得到一个一位整数(即7)除以十,结果为零(因为它将为0.7,但它是整数除法)。 您需要添加一些否定条件,例如底片。