2017-12-21 7 views
-3

これは基本的に0からnまでの数値を二乗して出力する方法です。数値に含まれる数字の桁数dを0からnに戻すには、コードで正しい桁数が表示されない

それでは、n=10d=1を言わせて、私たちは0 1 4 9 16 25 36 49 64 81 100を持つことになりますと数字のこのセットで4ものがあるので、この方法は、4を返す必要があります。

これはうまく動作しますが、nが、メソッドが不正な桁数を返すようになるより大きな整数で定義されている場合です。

たとえば、n=5750d=0がある場合、4700を返すと、このメソッドは3012を返します。どこが間違っていたのですか?

public static int numberOfDig(int n, int d) { 
     String output=""; 
     for(int i=0;i<=n;i++){ 
      output+=(int)Math.pow(i, 2)+" "; 
     } 


     String[] numbers=output.split(" "); 
     String digit= Integer.toString(d); 
     int count =0; 

     for(int i=0;i<numbers.length;i++){ 
      if(numbers[i].contains(digit))count++; 
     } 

     return count; 
} 

さらに詳しい説明が必要な場合は、お気軽にご質問ください。

+0

最初の質問:どのデバッグを試みましたか? –

+0

どういう意味ですか? –

+2

https://ericlippert.com/2014/03/05/how-to-debug-small-programs/ – shmosel

答えて

1

数値に数字dが含まれている場合は、カウントを1だけ増やすという問題があります。それぞれの数字に0〜235の数字で数字を増やす必要があります。

関連するコードは次のとおりです。

if (numbers[i].contains(digit)) 
    count++; 

d == 5numbers[i] == 25のであれば、あなたが正しいとする1countをインクリメント。

ただし、d == 0numbers[i] == 100の場合は、countに1を加算します。これは正しくありません。 2つ増やす必要があります(2つのゼロがあるため)。

n=10d=1となり、output0 1 4 9 16 25 36 49 64 81 100 121となります。あなたのメソッドは1を含む5つの数字があるので5を返しますが、6を返します。121には1という2つのインスタンスが含まれています。

+0

nが0から10に0から11になるので、実際には4を返す必要があります.n = 11とd = 1のときに同じ数字の2桁を数えます。私はちょうど試しました –

+0

@BlueEagleループはあなたが 'i <= n'を' i dave

関連する問題