有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java字符串数组中的空字符串

我想计算单词中字母的数量,从1到100。例如

如果数字1到5是用文字写出来的:一,二,三,四,五

然后总共使用了3+3+5+4+4=19个字母

为此我编写了以下代码

public static int helper(int a){

    String ones[]= {"","one","two","three","four","five","six","seven","eight","nine","ten",
            "eleven","twelve","thirteen","fourteen","fifteen","sixteen","seventeen"
            ,"eighteen","nineteen"};

    String tens[]=  {"","","twenty","thirty","forty","fifty","sixty","seventy","eighty","ninety"};

    if(a<20){
        return ones[a].length();
    }
    else
        return tens[a/10].length();
}

public static int countLetters(int a){
    if(a==100)
        return 10;

    else if(a<20){

        return helper(a);
    }   

    else{

        return helper((a/10)*10)+ helper(a%10);
    }
}

主要功能如下

public static void main(String[] args) {
    // TODO Auto-generated method stub

    int result=0;
    for(int i=1;i<=100;i++){
        result+=countLetters(i);
    }
    System.out.println(result);

}

这个问题的正确答案是864。在String ones[]数组中,我使用了标点符号" ",它们之间有空格。返回的result872,这是不正确的,但在删除它们之间的空格后,返回的答案是864。我使用了没有空格的""。我想知道为什么会这样

Is there any logical aspect with respect to strings or string arrays for this problem ?


共 (1) 个答案

  1. # 1 楼答案

    a的值为20时,这行代码计算什么

    return helper((a / 10) * 10) + helper(a % 10);

    你的答案就在这个计算中。所以,让我们来解决这个问题

    return helper((20 / 10) * 10) + helper(20 % 10);

    这就变成了:

    return helper(20) + helper(0);

    在对helper(0)的调用中,您的方法执行以下特定条件:

        if(a<20){
            return ones[a].length();
        }
    

    因此,虽然从1开始循环的迭代,但并不意味着数组ones的索引0没有被遍历