2016-04-28 12 views
2

説明は、配列の各文字列に含まれる桁数を数え、numberDigitsに代入することです。配列の各文字列に含まれる桁数はどのように数えますか?

私はここで間違っていますか?

public void computeStatistics(String []strings){  
    numberDigits = 0; 
    for(String s : strings){ 
     for(int i : s.toCharArray()){ 
      if(i >= 0 || i <= 2) 
       numberDigits++; 
     } 
    } 
} 
+1

なぜ、 'numberDigits + = s.length();'ではないのですが、それぞれの文字列に対して別々の数字があるはずですか? –

+1

'if(i> = 0 || i <= 2)'は常にtrueを返します。何を試そうとしていますか? – Maljam

+0

数字の文字列の文字数を意味しますか?または文字列の長さ? –

答えて

0

あなたの質問が正しく理解されているかどうかはわかりませんが、文字列配列の桁数は数えていますか? public int computeStatistics(String []strings){ int numberDigits = 0; for(String s : strings){ s = s.replaceAll("\D+",""); numberDigits = numberDigits + s.length(); } return numberDigits; }

+0

s = s.replaceAll( "\\ D +"、 ""); numberDigits = numberDigits + s.length();これらのステートメントは実際にそれを修正しました。私の2番目のforループとnumberDigits ++をあなたのものに置き換え、それはトリックでした。ありがとう! – stgray

+0

@stgray cool。実際には最適化されたソリューションではなく、コード化するための最短のソリューションです。 :) – rankaru

0

私はあなたの文字列がアルファ数値であると仮定しています。 if条件が間違っています。 charデータ型には、対応するASCII値の整数表現があります。ですから、intにキャストされたときのchar a = 'A'は実際には65として格納されます。したがって、反復処理中の配列に格納されているchar '0'はiとして48に格納されます。したがって、このコードは動作しません。

if(i>=48 && i<=57) 

それとも私が良い一般的なポリシーとして見つけるまでの条件のいずれかの場合の変化は、charとして文字を維持することです。

for(char ch:s.toCharArrat()) 
    if(ch>='0' && ch<='9') 

このようにして、アスキーについて考える必要はありません。 char '0'をintに変換するには、次のようにします。

int i = (int)ch - (int)'0'; 

これは対応する整数を与えます。

0

また、全体の数字が重要なので、すべての文字列を1つに連結し、各文字を数字であるかどうか確認することができます。

関連する問題