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

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

ただいまの
回答率

91.81%

  • C#

    3713questions

    C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Listの可変長配列を作成する行為をfor文で生成したいです。

解決済

回答 5

投稿 2017/05/19 12:53

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

Subasic

score 11

某サイトの問題に手を焼いています。
ここの問題6_3なのですが、以下参照
『 0から100までの乱数を発生させてその値を表示し、0が出たら、それまで出力した整数の1の位が同じものをまとめて表示するプログラムを作りなさい。このとき、入力された整数値は、Listで作った可変長配列の中に格納すること。 』
とのことです。
考え方は同リンク問題6_1の乱数を発生させ偶奇で判別、格納のやりかたの
今度は選択しが10個に増えました。
というイメージはつかめたのですが、実際に冒頭で0から9までの順で何もはいていない(null)のList型の入れ物を10個生成したとすると、
Listクラスのどこをいじればfor文を駆使してList型クラスをnewできるのでしょうか。
自分のイメージとしては
① 最初にList型クラスを0~9verをnewする

② whileで0が出るまで乱数発生

③ 0以外の乱数は判別

④ 判別した1の位の数をもとに
0から9までのListにList名.Add(乱数);で格納

⑤ 0がでたらFin。

⑥ 最後に表示
for文で0から9まで繰り返し
ただif文でnullじゃないときに数表示
それ以外なら
なしと表示
という構成です。

そのイメージが初めはつかめないために、配列を駆使し全体のコードは作成しました。

配列の場合だと
①、配列の型はStirngにして冒頭に10個newに置き換わり
④、判別した1の位をもとに格納先を検索、格納する直前にToStringして変換処理
と処理内容が少々変更します。
ちなみに以下自分が配列で作成したものです。
この配列で10個newしてるのを
Listで10個newしたいです。

static void Main(string[] args)
        {
            /*
             * 0から100までの乱数を発生させてその値を表示し
             * 0が出たら、それまで出力した整数の1の位が同じものを
             * まとめて表示するプログラムを作りなさい。
             * この際入力された整数値は、Listで作った可変長配列の中に格納すること。
             */

            // 乱数発生のオブジェクトを生成
            Random r = new Random();

            //  0から9までの1の位の数に応じて格納先が変わるListを生成

            for (int f = 0; f <= 9; f++)
            {
                List<String> NumberBox_f = new List<String>();
            }
            //List<String> NumberBox = new List<String>();


            string[] BoxOfRndomNumber = new string[10];

            for (int a = 0; a < BoxOfRndomNumber.Length; a++)
            {
                BoxOfRndomNumber[a] = null;
            }



            //Dictionary<int, int> NumberBox = new Dictionary<int, int>();

                while (true)
                {
                    int RandomNumber = r.Next(0, 101);
                    Console.WriteLine("0~100までの値を出力 : " + RandomNumber);
                    //  0が出るまで繰り返し
                    if (RandomNumber == 0)
                    {
                        break;
                    }
                    //  一の位を判別するため判別用に発生した乱数と同じ値をとる変数を用意
                    int JudgementRandomNumber = RandomNumber;

                    /*  もし値が10以上なら10で割った余りの数で1のけたを判別
                     *  例:36や50はこのifに入り、
                     *  10で割った際の余りの数に変数値を上書き
                     */

                    if (JudgementRandomNumber >= 10)
                    {
                        JudgementRandomNumber %= 10;
                    }
                    //  1の位の判別完了 JudgeRNが判別用、格納用はRN

                    //  0から9までの配列に各々格納
                    for (int i = 0; i <= 9; i++)
                    {
                        if (JudgementRandomNumber == i)
                        {
                            BoxOfRndomNumber[JudgementRandomNumber] += " " + RandomNumber.ToString();
                        } 
                    }
                }

                for (int j = 0; j <= 9; j++)
                {
                    if (BoxOfRndomNumber[j]  != null )
                    {
                        Console.WriteLine("一の位が{0}:{1}", j, BoxOfRndomNumber[j]);
                    }
                    else
                    {
                        Console.WriteLine("一の位が{0}:なし", j);
                    }
                }
            System.Threading.Thread.Sleep(100000);
        }
  • 気になる質問をクリップする

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

    クリップした質問はマイページの「クリップ」タブからいつでも見ることができます。

    クリップを取り消します

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

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

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

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

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

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

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

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

    質問の評価を下げる

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

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

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

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

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

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

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

    詳細な説明はこちら

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

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

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

質問への追記・修正、ベストアンサー選択の依頼

  • coco_bauer

    2017/05/19 13:11

    [ヒント] 生成する乱数はint型ですから、list<String>ではなくlist<Int>。10個のlistを別々に作るのではなく、listの配列を作れば良いのではないでしょうか。 また、整数の1の位の値は ('元の値' % 10 )で求められます。

    キャンセル

  • Subasic

    2017/05/22 17:57

    ヒントをありがとうございます。listの配列を使うのと、わざわざsting型にしないでint型でなおしたところ、先ずListの配列を作ろうとしたのでずか、エラーが出てしまいました。

    キャンセル

回答 5

checkベストアンサー

+1

一応自分なりに考えた結果みたいだから丸投げじゃないと判断しておく

List<int>にポコポコぶち込んだ後、Linq使って0~9の順に表示するのかと思ったけど、
Zuishinさんの指摘にある「この問題を解くためには…」を見るとたぶんDictionary使ってねって気がする
少なくともList<int>[10]は違うと思う。

なので、Dictionary<int, List<int>>でkeyになるintに1の位の数値を、ランダムで作った数値自身はvalueになるList<int>に追加する形でやればいいんじゃないかな?
、というのを念頭に置いてもう一度「この問題を解くためには…」を見直して頑張ってみるといいと思う。

ソースをまるっと書くと勉強にならないと思うのであえてぼんやりとした表現にしています

投稿 2017/05/19 20:49

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

    以下のような回答は評価を下げられます

    • 間違っている回答
    • 質問の回答になっていない投稿
    • 不快な投稿

    評価を下げる際はその理由をコメントに書き込んでください。

  • 2017/05/20 01:29

    いやいや List の説明がまんま書いてありますよ。

    キャンセル

  • 2017/05/20 01:34

    Dictionaryで0から9まで各々割り振り対応する選択肢を用意しておく

    乱数発生

    どこいれる?

    乱数%10=判別等の変数 i
    判別式(dictionary名,ContainsKey( i ){
    ditionary(i), Add(乱数);
    こんなイメージですかね
    実践してみます。
    回答へと向かうベクトルを示していただいてありがとうございました!
    15分考えても具体的なイメージがわかなかったので質問を投稿したのですが、自分が伝えたいことが明確に言語化にできずに困っていました。
    ほんとにありがとうございました!

    キャンセル

+1

void Main()
{
    IEnumerable<int> Generate(int maxValue)
    {
        var random = new Random();

        while (true)
        {
            yield return random.Next(maxValue);
        }
    }

    var dictionary = Generate(101)
        .Select(value =>
        {
            Console.WriteLine($"0~100の値を出力:{value}");
            return value;
        })
        .TakeWhile(value => value != 0)
        .GroupBy(value => value % 10)
        .ToDictionary(_ => _.Key, _ => _.ToList());

    foreach (var i in dictionary.Keys.OrderBy(_ => _))
    {
        Console.WriteLine($"一の位が{i} : {string.Join(" ", dictionary[i])}");
    }
}


とか。

投稿 2017/05/19 13:09

編集 2017/05/20 21:41

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

    以下のような回答は評価を下げられます

    • 間違っている回答
    • 質問の回答になっていない投稿
    • 不快な投稿

    評価を下げる際はその理由をコメントに書き込んでください。

+1

A.Listの配列を作る
B.とりあえず0が出るまで一つのListに詰めて、0が出たらDictionaryなり別のリストなり配列なりに仕分ける

投稿 2017/05/19 13:09

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

    以下のような回答は評価を下げられます

    • 間違っている回答
    • 質問の回答になっていない投稿
    • 不快な投稿

    評価を下げる際はその理由をコメントに書き込んでください。

0

えーっと。
何を聞きたいのかがよくわかりませんが(問題を全部解け、ということじゃないですよね?)
質問を簡潔にまとめると
「string型の要素が10個のListクラスのインスタンスを生成する方法はなんですか?」
ということでしょうか。

List<string> BoxOfRndomNumber = new List<string>(10);
ですかね。

でも質問文には可変長と書いてあるので
List<string> BoxOfRndomNumber = new List<string>();
なのかな。

投稿 2017/05/19 13:09

編集 2017/05/19 13:34

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

    以下のような回答は評価を下げられます

    • 間違っている回答
    • 質問の回答になっていない投稿
    • 不快な投稿

    評価を下げる際はその理由をコメントに書き込んでください。

-3

この問題の書いてあるページの一番上に

この問題を解くためには…
→ 応用編第6日目参照

とあります。
そのリンク先はここです。
コレクション

コレクションとは
List
サンプルプログラム
実行結果
Listの宣言と生成
Listへのデータの追加
Addメソッドの利用
Insertメソッドの利用
Listの出力
Listの中のデータの削除
Listクラスの主要メソッド
ハッシュテーブルの利用
ハッシュテーブルとは
サンプルプログラム
実行結果
Dictionaryクラスの宣言と生成
Dictionaryクラスの宣言と利用
Dictionaryクラスのデータの設定
Dictionaryクラスの働き
データの出力
Dictionaryクラスのキーの取得
HashSet
サンプルプログラム
実行結果
HashSetクラスの働き
練習問題 : 問題6.

最後の「練習問題 : 問題6.」からのリンクがこの問題です。
つまり、応用編第6日目を勉強してから練習問題に入りなさいということです。

そんなに面倒ならもうやめればいいじゃないですか。

投稿 2017/05/19 16:50

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

    以下のような回答は評価を下げられます

    • 間違っている回答
    • 質問の回答になっていない投稿
    • 不快な投稿

    評価を下げる際はその理由をコメントに書き込んでください。

  • 2017/05/20 02:04

    やる気スイッチを押していただきありがとうございました。

    キャンセル

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

ただいまの回答率

91.81%

関連した質問

  • 解決済

    国旗を表示させたい(続き)

    前提・実現したいこと btn [0][1][2]をクリックすると、それに対応した国旗が表示されるようにしたい。 ソースコード import java.awt.*;   

  • 解決済

    【C#】3文字目の数値を変換するには

    12345 という値を持つint型の変数があった場合 3文字目の数字だけを0に変換したいのですが、 どうすればよいのでしょうか? 12045 このように変換したいです。

  • 受付中

    C# 乱数で生成する数字の出現頻度

    実現したいこと C#の乱数宣言(0~7)を行いましたが、特定の数字だけめったに生成されないように頻度の調整を行いたいです。 頻度調整の対象になる数字1~3です。 各数字ごとに

  • 解決済

    Listを使って出力した乱数を奇偶にわけたいです

    某サイトのコレクションに関する問題で躓いています。 問題の条件として Listg型の可変長配列を生成し乱数を奇偶判別し格納するというメソッドを作りなさいと のことなのですが

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

  • C#

    3713questions

    C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

閲覧数の多いC#の質問