字符串数组

时间:2016-04-29 20:51:18

标签: java arrays string

我想计算从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。我没有空间使用""。我想知道为什么会这样......?

  

对于这个问题,字符串或字符串数​​组是否有任何逻辑方面?

3 个答案:

答案 0 :(得分:2)

只有在" "数组中有ones时才会发生。

如果您有20,则"twenty"的长度+ helper(a%10)的长度为helper(0),其长度为" "。因此,您获得"twenty"的长度+ " "的长度。

这发生在20,30,40,50,60,70,80和90.8次。这就是你看到872的原因。

最简单的解决方法就是像你一样制作第一个字符串"",但这也可行:

// return helper((a/10)*10)+ helper(a%10);
return helper((a/10)*10) + (a%10 == 0 ? 0 : helper(a%10));

答案 1 :(得分:1)

String中的空格也会增加String的长度,例如:

"foo bar".length() --> 7
" foo bar ".length() -->9
"foobar".length() -->6

如果您想避免出现此问题并删除外部空间请使用修剪。

"foo bar".trim().length() --> 7
" foo bar ".trim().length() -->7
"foobar".trim().length() -->6

希望这会有所帮助。

答案 2 :(得分:0)

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没有被遍历。