前提・実現したいこと
<ソースコードとして前提>
用意している配列において、同じ要素の数をカウントして、その数を出力したい。(5を出力)
<自分として実現したいこと>
ただこのコードの
var cnt = 0;の位置がどこにあるべきかの理由を知りたいだけです。
発生している問題・エラーメッセージ
自分では以下の様なコードを入力しました。 var cnt = 0; foreach (var pattern in array) { foreach (var word in array) { if (pattern == word) { cnt++; } } 調べた結果、正解は foreach (var pattern in array) { var cnt = 0; foreach (var word in array) { if (pattern == word) { cnt++; } } で、foreachの中に以上のようにvar cnt=0;を置くのが正解らしいが、foreachの中にvar cnt = 0;が入っているということは、毎回、var cnt = 0;が作られていませんか。foreachの中の状況がいまいちわかりません。外に置くとなぜ間違いかわからない。
該当のソースコード
C#
1//これは自分がうった間違いのソースコードです。 2using System; 3 4class paiza 5{ 6 static void Main() 7 { 8 string[] array = {"HND", "NRT", "KIX", "NGO", "NGO", "NGO", "NGO", "NGO"}; 9 var duplicate = 0; 10 11 var cnt = 0; 12 foreach (var pattern in array) 13 { 14 foreach (var word in array) 15 { 16 if (pattern == word) 17 { 18 cnt++; 19 } 20 } 21 22 23 duplicate = cnt; 24 25 26 } 27 28 Console.WriteLine(duplicate); 29 } 30} 31
試したこと
正解を調べたところ、発生している問題・エラーメッセージのようにするのが正解のようです。
また、duplicate = cnt;
break;
を、if (cnt != 1)
{
duplicate = cnt;
break;
}
とするそうです。
補足情報(FW/ツールのバージョンなど)
なお、このサイトでの質問が初めての為、マルチポストがダメなのを知らず、知恵袋の方に先に質問しています。知恵袋では心配でしたのでこちらにも質問しました。なお、知恵袋には正しいソースコードを、こちらでは自分が入力した間違いのソースコードを記入しています。知恵袋の方でも教えていただいているので、そちらの方もご参照下さい。https://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q13214577238
また、こちらの問題はpaizaラーニングというこちらのサイトの
https://paiza.jp/works
レベルアップ問題集、Bランクレベルアップセット、C#編、文字と整数の組のソート2、STEP3の問題になります。