2016-09-26 6 views
0

のjavaのnoobの配列を結ぶ...は、文字列+ここでは、セパレータ

これは私にナットを運転しているが、私は30分間これに取り組んできました...

この

引数= ["コード"、 "オン"、 "!"]とセパレータ= "/"の場合、出力は myConcat(arguments、separator)= "コード/ファイト/オン/!/ "

私のコード:

String myConcat(String[] arguments, String separator) { 
    for(int i = 0; i <= arguments.length; i++){ 
     String output = arguments[0] + separator; 
    } 
    return output; 
} 

エラー:エラー:行5にfile.javaがシンボル リターン出力を見つけることができません。 ^記号:可変出力 場所:クラス_runfniek 1エラー

任意のヒントをいただければ幸い...

+0

適切な言語タグを追加してください。いずれにしても、現在のコンパイル時エラーは、連結演算子または配列または連結の行為とは無関係です。実際の問題から始めて、すべてをショットガンするよりもうまくいくように広げてください。ヒント: 'output'の* scope *は何ですか?なぜ、この変数( "symbol")*は* for *ループの外で書かれているようにアクセスできないのでしょうか? – user2864740

答えて

1

まず、StringBuilderが+演算より優先されます。

第2に、実際に値を保存しないループ本体に文字列出力を定義するのは間違いです。

第3に、境界線を考慮する必要があります。つまり、引数配列の最後の要素にセパレータを追加しないでください。

第四に、それはi < arguments.lengthある、ないi <= arguments.length

String myConcat(String[] arguments, String separator) { 
    StringBuilder output = new StringBuilder(); 
    for(int i = 0; i < arguments.length; i++){ 
     output.append(arguments[i]); 
     if(i < arguments.length-1){ 
      output.append(separator); 
     } 
     return output.toString(); 
    } 
+0

私のエラーの説明をありがとうございます。あなたのコードを読んで理解しました。私は一つのことを見つけました。 あなたのコードは現在、最後にセパレータを追加しません。 "Code/Fight/On /!/"の代わりに "Code/Fight/On /!"を出力します。私は引数で-1を取り除くことでこれを修正しました。長さ-1 –

1
String output = arguments[0] + separator; 

引数[0] - >引数[I] と文字列出力varは{for}に定義する必要があります

エラーのヒントは非常に明白です。

1

問題がoutputが唯一の文のために内に存在する文字列である、それは理想的なのStringBuilderを使用し、それ以外で作成する必要があります

String myConcat(String[] arguments, String separator){ 
     StringBuilder output = new StringBuilder(); 
     for(int i = 0; i < arguments.length; i++){ 
      output.append(arguments[i]); 
      output.append(separator); 
     } 
     return output.toString(); 
    } 

不要な場合は後続の区切り文字が必要なようですが、ifステートメントを使用して区切り記号を削除できます。

関連する問題