繁体   English   中英

读取 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM