- ベストアンサー
穴埋めができずに困ってます…(初心者です)
参考書に出ていた問題について質問です。 穴埋め形式になっていて、途中までは埋まったのですが、最後の部分がわかりません。 StringBuffer bf = new StringBuffer(); boolean let; for (int i = 0 ; i < (bf.length()); i ++){ let = true; for (int j = 0; j <(nch.length()); j ++){ if (inputstr.charAt(i) == nch[j]) let = false;} if (let) ×××} return ×××;}//bfをstring型に変えて戻り値} の×××の部分です。 引数として与えた文字列から数字以外の文字を抜き出すプログラムなのですが、どこで何を行っているのかがよくわからなくなってきています。 回答お願いします。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
外側のfor文で、引数で受け取ったStringを1文字ずつループし、 内側のfor文で数字比較用のchar配列を1要素ずつループしているようですね。 ただ、外側のfor文にbf.length()とありますが、 bfは直前でnewしているため、lengthは「0」になると思います。 そのため、for文の中に入ることはありません。 ここがinputstr.length()であれば、大丈夫だと思うのですが…。 上記を前提にすると、 if(let)×××は bf.append(inputstr.substring(i)); でいいのではないでしょうか。 戻り値がStringなのでreturn ×××;は bf.toString() でStringBufferをStringに変換します。 時間が無くて詳しいことが書けませんでした。 申し訳ありません。 あとでも良ければ補足します。
その他の回答 (1)
これは抜粋して掲載してませんか? プログラムはせめてメソッド全部ぐらいが見えてないと、正確な答えを出せません。(たとえばinputstrやnchが何なのかは想像するしかありません) ということで想像でしかお答えできませんが・・・ if(let)はそのinputstr.charAt(i)にある文字が数字のときの処理です。nchはなんとなく数字が入っているcharの配列だと想像できますが、inputstrはなんなのか分からないので、xxxに何を入れたら良いのか分かりません。 (inputstrでなくてbfをそのまま使っているなら、ここにはbfから数字を抜き取る処理が入るでしょう。) return xxxはコメントの通りならbf.toString()です。 これはマニュアルを読めば分かることなので、sunのサイトからマニュアルをダウンロードして、調べる癖をつけたほうがいいと思います。 老婆心ながらプログラムの勉強で最も効果的なのは自分でプログラムを作って、試すことです。問題を解いているだけではなかなか進歩しないでしょう。(ある程度できる人なら、マニュアルを読んだり、サンプルのプログラムを読むと、その言語のことが分かったりはしますけどね)
お礼
回答ありがとうございます。 nchは数字をchar型配列要素として定義したもの、inputstrはpublic static String lettersonly(String inputstr){ という記述が最初にあるので、実行時に引数として与えた文字列のことだと思います。 長いプログラムになっていて、どこからつながっているのかがわからなくなっていました。 中途半端な質問に答えてくださってありがとうございます。 また、アドバイスもありがとうございました。
お礼
回答ありがとうございました。 bf.lengthについては先ほど見直していて気づきました。ご指摘ありがとうございます。 もしお時間がありましたら、詳しい説明などをしていただけるとありがたいです。