如何解决我的反向方法没有反向任何东西?
这是我的代码:
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;
}
}
我的数字根据需要打印为字符串,但它们的顺序相反。
我尝试在转换方法中加入反向方法,但结果总是一样,不知道如何反向。
解决方法
- 删除所有
if
语句,使用Array
存储数字到单词的关联(数字 = 数组索引,字符串 = 数组值) - 从右到左查找每个数字,构建所有数字单词的列表
- 反转它
- 对列表做任何你想做的事情(即将它加入一个字符串)
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);
}
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。