C# と VB.NET の質問掲示板

わんくま同盟

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

■95443 / 親階層)  行ごとに乱数で0、1を指定して二次配列を作る方法について(続
□投稿者/ サイカク (5回)-(2020/08/02(Sun) 04:54:52)

分類:[.NET 全般] 

お世話になっております。
C#初心者のサイカクです。
VisualStudioCodeで開発を行っており、versionは1.47です。

昨日、同タイトルで以下のご質問をしました。

===================================
現在、「0」と「1」で構成された6×6の二次配列を作ろうとしています。
その際、行ごとに「0」を4つ、「1」を2つランダムで格納させたいです。
(列ごとの「0」と「1」の構成はどんな形であれ構わないです)
つまり、36個の要素の構成は最終的に「0」が24個、「1」が12個になります。

具体的には

000110
100100
001010
110000
101000
001001

このような二次配列を完成させたいと思っています。
二次配列の作り方や、1次配列の乱数指定方法は存じているのですが、
組み合わせて運用する方法を理解できなかったので、ご質問させていただきました。
====================================

この質問に対して、「Fisher-Yates」アルゴリズムを使ってはどうか?とアドバイスをいただき、
以下のコードを作成しました。

====================================

public class TestScpirt : MonoBehaviour
{
int[,] StageData = new int[6,6];

void Start()
{
LoadStageData();
DebugTable();
}

void LoadStageData()
{
int[] conbination = new int[6]{1, 1, 0, 0, 0, 0};
System.Random rnd = new System.Random();

for(int n = conbination.Length - 1; n >= 0; n--)
{
int k = rnd.Next(n + 1);
int tmp = conbination[k];
conbination[k] = conbination[n];
conbination[n] = tmp;
for(int l = StageData.GetLength(0) - 1; l >= 0; l--)
{
StageData[l, n] = conbination[l];
}
}
}

void DebugTable()
{
for(int y = 0; y < 6; y++)
{
string debugtext = "";
for(int x = 0; x < 6; x++)
{
debugtext += StageData[x, y] + ", ";
}
Debug.Log(debugtext);
}
}
}

====================================

しかし、実際にコンソール画面に表示されるデバッグは

000101
000101
000101
000101
100001
100001

あるいは

101000
101000
010100
010100
110000
110000

といった規則的な二次配列が表示されます。
おそらく、一次配列ごとの「0」と「1」のランダム格納はできているのですが、
出来上がった一次配列を二次配列の行に格納する段階、すなわち

for(int l = StageData.GetLength(0) - 1; l >= 0; l--)
{
StageData[l, n] = conbination[l];
}

この部分でコードが間違っているのだと思います。

数時間考えてみたのですが、原因が分からず困っています。
長文になってしまい、申し訳ございません。
原因がわかる方がいらっしゃいましたら、ご指導のほどよろしくお願い申し上げます。
編集キー/

前の記事(元になった記事) 次の記事(この記事の返信)
親記事 →Re[1]: 行ごとに乱数で0、1を指定して二次配列を作る方法につ.. /サイカク
 
上記関連ツリー

行ごとに乱数で0、1を指定して二次配列を作る方法について(続 / サイカク (20/08/02(Sun) 04:54) #95443 ←Now
Re[1]: 行ごとに乱数で0、1を指定して二次配列を作る方法につ.. / サイカク (20/08/02(Sun) 05:05) #95444
  ├ Re[2]: 行ごとに乱数で0、1を指定して二次配列を作る方法につ.. / WebSurfer (20/08/02(Sun) 10:13) #95446
  │└ Re[3]: 行ごとに乱数で0、1を指定して二次配列を作る方法につ.. / WebSurfer (20/08/02(Sun) 10:15) #95447
  └ Re[2]: 行ごとに乱数で0、1を指定して二次配列を作る方法につ.. / キングダム (20/08/02(Sun) 13:11) #95450
    ├ Re[3]: 行ごとに乱数で0、1を指定して二次配列を作る方法につ.. / Hongliang (20/08/02(Sun) 14:34) #95452
    │└ Re[4]: 行ごとに乱数で0、1を指定して二次配列を作る方法につ.. / サイカク (20/08/02(Sun) 16:50) #95455
    └ Re[3]: 行ごとに乱数で0、1を指定して二次配列を作る方法につ.. / サイカク (20/08/02(Sun) 16:45) #95454 解決済み
      └ Re[4]: 行ごとに乱数で0、1を指定して二次配列を作る方法につ.. / サイカク (20/08/02(Sun) 16:53) #95456 解決済み
        └ Re[5]: 行ごとに乱数で0、1を指定して二次配列を作る方法につ.. / shu (20/08/03(Mon) 07:52) #95457 解決済み

上記ツリーを一括表示 / 上記ツリーをトピック表示
 
上記の記事へ返信