如何将 100 转换为一个零零而不是一个?

  • 本文关键字:一个 转换 java
  • 更新时间 :
  • 英文 :


我必须调用一个将数字转换为单词的方法和另外两个正在反转并获取输入数字计数的方法,并且必须在第一种方法中调用两者,但在数字 100 的情况下,它给出输出为 ONE,但它应该给出一个零 ZERO.So 我的困惑是如何在转换数字方法中调用计数方法,并通过简单的将输出作为 ONE ZERO ZERO调用因为我正在使用 intelliJ 和初学者所以我必须找出如何在第一个方法是数字到单词的方法中调用 get count方法。

public static void numberToWords(int number) {
if (number == 0) {
System.out.println("Zero");
} else if (number < 0) {
System.out.println("Invalid Value");
}
int revInteger = reverse(number);
while (revInteger != 0) {
int modulus = revInteger % 10;
revInteger /= 10;
switch (modulus) {
case 1:
System.out.println("One");
break;
case 2:
System.out.println("Two");
break;
case 3:
System.out.println("Three");
break;
case 4:
System.out.println("Four");
break;
case 5:
System.out.println("Five");
break;
case 6:
System.out.println("Six");
break;
case 7:
System.out.println("Seven");
break;
case 8:
System.out.println("Eight");
break;
case 9:
System.out.println("Nine");
break;
default:
break;
}
}
}

public static int reverse(int reversedNumber) {
int revNumber = reversedNumber;
int digit = 0;
while (revNumber != 0) {
int n = revNumber % 10;
digit = digit * 10 + n;
revNumber /= 10;
}
return digit;
}
public static int getDigitCount(int number) {
int count = 0;
if (number > 0) {
while (number != 0) {
number /= 10;
++count;
}
return count;
} else if (number == 0) {
return 1;
}
return -1;
}

相反,您可以使用预先构建的地图将数字替换为单词,如下所示

public class NumToWord {
public static void main(String[] args) {
numberToWords(100);
}
public static final String[] numToWord = new String[10];
static {
numToWord[0]="Zero";
numToWord[1]="One";
numToWord[2]="Two";
numToWord[3]="Three";
numToWord[4]="Four";
numToWord[5]="Five";
numToWord[6]="Six";
numToWord[7]="Seven";
numToWord[8]="Eight";
numToWord[9]="Nine";
}
public static void numberToWords(int number) {
String numberStr = number + "";
for (char a: numberStr.toCharArray()) {
String word = numToWord[Integer.parseInt(a+"")];
if(null!=word) {
System.out.println(word);
}
}
}
}

问题是数字 100 的反面是 001,它只是 1。但是,你可以拉出一个技巧,在反转数字之前将 1(通过数字*10 + 1(附加到数字,然后在剩余数字为 1 时终止(当然你可以附加任何非零数字,但 1 和任何数字一样好(。例如,在 200 的情况下,您将反转 2001,即 1002。当您输出两个零零时,您只剩下 1,因此终止。

int revInteger = reverse(number * 10 + 1);
while (revInteger != 1) {...}

但是,您还必须处理 switch 语句中的 0 情况:

case 0:
System.out.println("Zero");
break;

通过这两项更改,您的代码就可以工作了。

int revInteger = reverse(number * 10 + 1);
while (revInteger != 1)
{
int modulus = revInteger % 10;
revInteger /= 10;
switch (modulus)
{
case 0:
System.out.println("Zero");
break;
case 1:
System.out.println("One");
break;
// snipped cases 2-8
case 9:
System.out.println("Nine");
break;
default:
break;
}
}

强制性 Java 8 流代码:

private static final Map<Character, String> MAP;
static {
Map<Character, String> map = new HashMap<>();
map.put('0', "ZERO");
map.put('1', "ONE");
...
MAP = Collections.unmodifiableMap(map);
}
public static String numberToWords(int number) {
String numStr = String.valueOf(number);
return IntStream.range(0, numStr.length())
.mapToObj(i -> MAP.get(numStr.charAt(n.length() - 1 - i)))
.collect(Collectors.joining(" ");
}

还有一些其他解决方案。

第一个只是初始化数组并通过串联向后构造字符串。 它使用remainder operator (%)索引到数组中。

int n = 100;
String[] digitWords = { "ZERO", "ONE", "TWO", "THREE", "FOUR",
"FIVE", "SIX", "SEVEN", "EIGHT", "NINE" };
String s = "";
while (n > 0) {
s = digitWords[n % 10] + " " + s;
n /= 10;
}
System.out.println(s);

或者使用 Java Streams。 这只是迭代连续的整数商,然后应用remainder operator来流式传输相应的数组元素。使用还原操作再次反向组装各个元件。

n = 100;
String str = IntStream.iterate(n, i -> i > 0, i -> i = i / 10)
.mapToObj(i->digitWords[i % 10]).reduce("", (a,b)->b = b + " " + a);

两种方法打印

ONE ZERO ZERO 

最新更新