当前正在做一个称为数字到单词的挑战,我创建了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;
}
}
答案 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,但它是整数除法)。 您需要添加一些否定条件,例如底片。