2016-04-29 14 views
-2

Ich mag die Anzahl der Buchstaben in den Worten von 1 bis 100 zum Beispiel berechnen ....leerer String in einem Array von Strings

Wenn die Zahlen 1 bis 5 sind in Worten ausgeschrieben: eins, zwei , drei, vier, fünf,

dann gibt es 3 + 3 + 5 + 4 + 4 = 19 Buchstaben insgesamt verwendet.

, für die ich den folgenden Code geschrieben haben ...

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); 
    } 
} 

Die Hauptfunktion sieht aus wie

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); 

} 

Die richtige Antwort für dieses Problem 864 ist. In der String ones[] Reihe verwendete ich Interpunktionszeichen " " mit Abstand zwischen ihnen. Die result zurückgegebene war 872, die falsch ist, aber nach dem Entfernen von Leerzeichen zwischen ihnen Antwort zurückgegeben wurde 864. Ich habe "" ohne Leerzeichen verwendet. Ich frage mich, warum das passiert ist ..?

Gibt es einen logischen Aspekt in Bezug auf Strings oder String-Arrays für dieses Problem?

+0

Was meinst du? Ein Leerzeichen ('' '') beeinflusst offensichtlich die 'length()' einer Zeichenkette. – aioobe

+0

Ja, mir ist das bewusst, aber ich verstehe nicht, warum das meine Antwort beeinflussen würde? Da auf diesen Wert in meinem Code nie zugegriffen wird, dient er nur dazu, den String-Werten 'one'' two' die richtigen Indizes zu geben. –

+0

Ich denke, Sie sollten sich mein Problem und Code zum besseren Verständnis ansehen .... –

Antwort

2

Es passiert nur, wenn Sie die " " im ones Array haben.

Wenn Sie 20 haben, erhalten Sie die Länge von "twenty" + die Länge von helper(a%10), die helper(0) ist, die die Länge von " " zurückgibt. So erhalten Sie die Länge von "twenty" + die Länge von " ".

Dies geschieht für 20, 30, 40, 50, 60, 70, 80 und 90. 8 mal. Deshalb sollten Sie das sehen 872.

Die einfachste Lösung macht nur den ersten String "", wie Sie haben, aber auch dies funktionieren würde:

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

Das war eine sehr schöne Erklärung, vielen Dank –

1

Ein Raum in einem String fügt auch auf die Länge eines String zum Beispiel:

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

Wenn Sie dieses Problem vermeiden möchten und mit der Außenraumnutzung trim entfernen.

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

Hoffe das geholfen.

0

Was diese Codezeile berechnen tut, wenn Wert von a ist 20?

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

Ihre Antwort ist bei der Berechnung dieser Berechnung. Also, lasst uns das klären.

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

, die wird:

return helper(20) + helper(0);

und in Aufruf gegen helper(0), Ihre Methode führt diese besondere Bedingung:

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

Also, auch wenn Sie von Ihrer Schleife der Iteration starten 1 bedeutet nicht, dass Index 0 für Array ones nicht ist überquert.

Verwandte Themen