![](/img/trans.png)
[英]simplified regex solution for version with format <0-999>.<0-999>.<0-999>
[英]Read numbers between 0-999 and returns number in words
我正在创建一个程序,它读取 0-999 之间的数字,然后以单词形式返回该数字。 我已经让所有其他号码都有效,但我不知道如何获得 111 - 119、211 - 219、311 - 319 等一直到 911 - 919 之间的号码。有人能帮忙吗? 谢谢!
我试过改变numones = number%10;
to numones = number%100;
但这无法读取所有其他数字并导致array outofbounds
错误。
public static void main(String[] args) {
int numones;
int numtens;
int numhundreds;
String [] ones = {"", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine", "ten",
"eleven", "twelve", "thirteen", "fourteen", "fiveteen", "sixteen", "seventeen", "eighteen", "nineteen", "twenty"};
String [] tens = {"","", "twenty", "thirty", "forty", "fifty", "sixty", "seventy", "eighty", "ninety"};
System.out.print("Number: ");
int number = In.nextInt();
while(number !=- 1) {
if (number >= 100 && number <= 999) {
numhundreds = number / 100;
numtens = number/10%10;
numones = number%10;
if (number == 100 || number == 200 || number == 300 || number == 400 || number == 500
|| number == 600 || number == 700 || number == 800 || number == 900){
System.out.println("" + ones[numhundreds] + " " + "hundred");
System.out.print("Number: ");
number = In.nextInt();
}else{
System.out.println("" + ones[numhundreds] + " " + "hundred and " + tens[numtens] + " " + ones[numones]);
System.out.print("Number: ");
number = In.nextInt();
}
}
}
}
}
当输入 111 时,输出是 101,而应该是 111。
首先,而不是这个长的“if”语句:
if (number == 100 || number == 200 || number == 300 || number == 400 || number == 500
|| number == 600 || number == 700 || number == 800 || number == 900)
您可以检查数字除以 100 是否没有余数,如下所示:
if(number%100==0)
因为 100%100=0, 200%100=0, 300%100=0 ...
现在就像Rishaan 所说,您需要检查“numtens”值是否为 1,您也可以使用条件运算符在打印语句中执行此操作:
else{
System.out.println("" + ones[numhundreds] + " " +
"hundred and "+ (numtens == 1 ? ones[numones+10] : tens[numtens] + " " + ones[numones]));
System.out.print("Number: ");
number = In.nextInt();
}
您需要检查十位中的数字是否等于 1,并且可以执行以下操作:
if (numtens == 1)
{
System.out.println(... + ones[numones + 10]);
} else {
System.out.println(... + tens[numtens] + ones[numones]);
}
我会采用这种方法,因为它很容易扩展到更大的数字。
StringBuilder sb = new StringBuilder();
if (numhundreds > 0)
{
sb.append(ones[numhundreds] + " hundred");
if (numtens > 0 || numones > 0) sb.append(" and ");
}
if (numtens == 1)
{
sb.append(ones[10 + numones]);
} else if (numtens > 1){
sb.append(tens[numtens]);
if (numones > 0) sb.append(" ");
}
if (numones != 0 && numtens != 1)
{
sb.append(ones[numones]);
}
String result = sb.toString();
System.out.println(result);
缺少两种情况,即“... and [tens]”和“[tens]”:
public static void main(String[] args) {
int numones;
int numtens;
int numhundreds;
int twenties;
String [] ones = {"", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine", "ten",
"eleven", "twelve", "thirteen", "fourteen", "fiveteen", "sixteen", "seventeen", "eighteen", "nineteen", "twenty"};
String [] tens = {"","", "twenty", "thirty", "forty", "fifty", "sixty", "seventy", "eighty", "ninety"};
Scanner In = new Scanner (System.in);
System.out.print("Number: ");
int number = In.nextInt();
while(number !=- 1) {
if (number >= 100 && number <= 999) {
numhundreds = number / 100;
numtens = number/10%10;
numones = number%10;
twenties = number%100;
System.out.println("Nbr"+number+" "+numtens);
if (number == 100 || number == 200 || number == 300 || number == 400 || number == 500
|| number == 600 || number == 700 || number == 800 || number == 900){
System.out.println("" + ones[numhundreds] + " " + "hundred");
System.out.print("Number: ");
number = In.nextInt();
}else if(number%100<20 && numtens==1){
System.out.println("" + ones[numhundreds] + " " + "hundred and " + ones[twenties]);
System.out.print("Number: ");
number = In.nextInt();
}else{
System.out.println("" + ones[numhundreds] + " " + "hundred and " + tens[numtens] + " " + ones[numones]);
System.out.print("Number: ");
number = In.nextInt();
}
}else{
twenties = number%100;
System.out.println("" +ones[twenties]);
System.out.print("Number: ");
number = In.nextInt();
}
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.