質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

87.37%

【C#】List<>に入れた要素をコンソール出力するとエラーが出る

解決済

回答 2

投稿

  • 評価
  • クリップ 0
  • VIEW 600

score 13

実現したいこと

・List<>内に乱数で0が出るまで格納し、コンソールへ表示させる。
・取得した乱数を奇数・偶数で分けて表示させる。

格納した乱数を表示させ、奇数、偶数に分ける処理まではできています。

発生している問題・エラーメッセージ

分けた奇数・偶数を以下のようにして表示させることを試みましたが、エラーが出てしまい表示できません。

static void Main(string[] args)
        {
            int num;
            var kisu = new List<int>();
            var gusu = new List<int>();
            var rnd = new Random();

            do
            {
                num = rnd.Next(0, 11);
                Console.WriteLine("0~10の値を出力:" + num);

                if(num % 2 == 0)
                {
                    gusu.Add(num);                }
                else if(num % 2 == 1)
                {
                    kisu.Add(num);
                }


            } while (num != 0);

            Console.Write("偶数:");
            foreach (int i in gusu)
            {
                Console.Write(gusu[i] + " ");
            }
            Console.WriteLine();

            Console.Write("奇数:");
            foreach (int j in kisu)
            {
                Console.Write(kisu[j] + " ");
            }
            Console.WriteLine();
        }

エラーコード

010の値を出力:9
010の値を出力:3
010の値を出力:4
010の値を出力:2
010の値を出力:2
010の値を出力:6
010の値を出力:0
偶数:0 2 2
ハンドルされていない例外: System.ArgumentOutOfRangeException: インデックスが範囲を超えています。負でない値で、コレクションのサイズよりも小さくなければなりません。
パラメーター名:index
   場所 System.ThrowHelper.ThrowArgumentOutOfRangeException(ExceptionArgument argument, ExceptionResource resource)
   場所 System.Collections.Generic.List`1.get_Item(Int32 index)
   場所 Ex.Program.Main(String[] args) 場所 D:Program.cs:行 27
続行するには何かキーを押してください . . .

調べたこと

・「コレクションのサイズよりも小さくなければなりません。」
・「System.ArgumentOutOfRangeException」
などのキーワードで解決を試みたのですが今回のエラーに対しての対処法は出てきませんでした。

以下の過去記事を参考にしようと試みたのですが、記事内にはエラーの原因と対処法が記載されておりませんでした。
https://teratail.com/questions/76685

何が原因で起こっているのか、どう対処したらいいのか、助言をお願いします。

補足情報(FW/ツールのバージョンなど)

OS:Windows10 Pro 64bit
IDE:Visual Studio Community 2015

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 2

checkベストアンサー

+1

forearchがどんな値を取得するのか調べてください
質問にある以下のソースでいう所のint iが何者なのかを確認すれば解決します

            foreach (int i in gusu)
            {
                Console.Write(gusu[i] + " ");
            }

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2020/08/25 16:12

    len_souko様
    ありがとうございます!
    「int i」の意味を配列を回すためだけの変数と誤認識しておりました。
    foreachに関して今一度復習します。

    キャンセル

+1

foreachとforの挙動を混同していそうですね。
foreach内でgusu,kisuリストの中身を1つずつ参照しているので、i,jはインデックスにせずそのまま出力させると期待しているものになるのではないでしょうか。

Console.Write("偶数:");
foreach (int i in gusu)
{
    // Console.Write(gusu[i] + " ");
    Console.Write(i + " ");    // 修正箇所
}
Console.WriteLine();

Console.Write("奇数:");
foreach (int j in kisu)
{
    // Console.Write(kisu[j] + " ");
    Console.Write(j + " ");    // 修正箇所
}
Console.WriteLine();

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2020/08/25 16:15

    takapi_cs様
    おっしゃる通り、for文のint iと同じ動きをするものだと誤認識してしまいました。
    foreachとforの違いに関して復習してみます。

    ベストアンサーに関してですが、申し訳ございません。
    先に解決に至る回答をいただけたlen_souko様にさせていただきます。
    ご了承ください。

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 87.37%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る