我只有打印 BINGO ,现在我必须在每个 col 行中输入一个随机数
Posted
技术标签:
【中文标题】我只有打印 BINGO ,现在我必须在每个 col 行中输入一个随机数【英文标题】:I only have the print BINGO , Now I have to put a randomizer number will go to each col row 【发布时间】:2021-11-03 12:33:22 【问题描述】:这是主代码。我确实需要一个 Randomizer 编号并且没有重复在我的 BINGO Board 中创建一个编号表
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
namespace BingoCardGen
class Program
static void Main(string[] args)
string[,] table = new string[5, 5];
printboard(table);
Console.ReadKey();
此代码将仅打印 BINGO 板。我缺少的代码是生成一个随机数并将其放在正确的列和单元格中 不重复号码
static void printboard(string[,] table)
int i, j;
string[] headings = "B", "I", "N", "G", "O" ;
for (i = 0; i < 5; i++)
Console.Write("0 ", headings[i]);
Console.WriteLine();
for (i = 0; i < 5; i++)
for (j = 0; j < 5; j++)
if (i == 2 && j == 2)
Console.Write("X ");
else
Console.Write("0 ", table[i, j]);
Console.WriteLine();
【问题讨论】:
Missing : 生成要放入宾果卡的数字。并将其放在正确的位置(列,单元格)我有:生成宾果卡:重复检查,因为它是给定的 这是 BINGO 生成器。 如果您需要在问题中添加信息,可以单击问题左下角的Edit 链接。 请参阅How do I ask a good question?。最值得注意的是:这是一个尚未开始的完整任务,而 *** 是针对特定问题的。 @Robson ,我很抱歉。我很难将随机整数放入 BINGO 的确切列和单元格中。 【参考方案1】:我已经修改了您的代码以生成宾果卡:(后面有解释)
using System;
using System.Linq;
namespace BingoCardGen
class Program
private const int BingoSpacing = 5;
private const int BingoBallBuckets = 15;
private const int BingoCardLength = 5;
private const int BingoCardAmount = 3;
private static Random random = new Random();
static void Main()
for (int i = 0; i < BingoCardAmount; i++)
var table = new string[BingoCardLength, BingoCardLength];
PopulateBingoBoard(table);
PrintBoard(table);
Console.WriteLine();
Console.ReadKey();
private static void PopulateBingoBoard(string[,] table)
for (var col = 0; col < table.GetLength(0); col++)
// generate all possible bingo ball numbers for this column
var allNumbers = Enumerable.Range(1 + (col * BingoBallBuckets), BingoBallBuckets).ToList();
// randomly place those numbers into the rows of this column
for (var row = 0; row < table.GetLength(1); row++)
var chosenIndex = random.Next(allNumbers.Count);
table[row, col] = allNumbers[chosenIndex].ToString();
allNumbers.RemoveAt(chosenIndex);
// middle cell is always free
table[table.GetLength(0) / 2, table.GetLength(1) / 2] = "X";
private static void PrintBoard(string[,] table)
// print the title
string[] headings = "B", "I", "N", "G", "O" ;
for (var i = 0; i < headings.Length; i++)
Console.Write(headings[i].PadRight(BingoSpacing));
Console.WriteLine();
// print the numbers
for (var i = 0; i < table.GetLength(0); i++)
for (var j = 0; j < table.GetLength(1); j++)
Console.Write(table[i, j].PadRight(BingoSpacing));
Console.WriteLine();
我做了以下事情:
private const int BingoSpacing = 5;
private const int BingoBallBuckets = 15;
private const int BingoCardLength = 5;
private const int BingoCardAmount = 3;
我在代码的顶部定义了一些数字,因为这使它们易于更改,并使我们的代码更具可读性/可理解性。
private static void PopulateBingoBoard(string[,] table)
for (var col = 0; col < table.GetLength(0); col++)
// generate all possible bingo ball numbers for this column
var allNumbers = Enumerable.Range(1 + (col * BingoBallBuckets), BingoBallBuckets).ToList();
// randomly place those numbers into the rows of this column
for (var row = 0; row < table.GetLength(1); row++)
var chosenIndex = random.Next(allNumbers.Count);
table[row, col] = allNumbers[chosenIndex].ToString();
allNumbers.RemoveAt(chosenIndex);
// middle cell is always free
table[table.GetLength(0) / 2, table.GetLength(1) / 2] = "X";
这是新功能。我们发送数组,函数修改该数组。
对于每一列:
我们使用Linq 生成该列的可能数字列表。例如,它将为第一列生成 1, 2, 3 ... 13, 14, 15
列表。
然后代码遍历该列中的每个单元格,从列表中随机选择一个宾果球,将该宾果球编号放入表中,然后从列表中删除该宾果球。这样可以确保没有重复,因为一个球永远不能被选择两次。
Console.Write(table[i, j].PadRight(BingoSpacing));
我已将PadRight
添加到所有输出中。这可以确保一切都很好地排列。 PadRight
将在字符串末尾添加空格,直到该字符串达到我们所需的长度。因此,如果我们想要长度为 6 并且我们的字符串是 frog
,那么输出将是 frog
。
for (var i = 0; i < table.GetLength(0); i++)
我没有将5
硬编码到输出循环中,而是将其更改为使用数组长度。这意味着如果数组长度发生变化,代码将继续工作。
示例输出:
B I N G O
1 30 37 49 61
15 16 35 53 75
12 29 X 58 68
4 28 39 51 70
10 24 34 47 64
【讨论】:
我非常感谢您所做的,先生。我也明白了,但 B 的范围为 (1,15) I = (16,30) N = (31, 45) G = (46,60) O = (61,75) 这是每个字母中唯一的数字允许。 不用担心,我可以稍微修改一下。一会儿…… 完成了——我也更新了解释。 谢谢,帮了大忙,最后一个问题,这可以一次生成多张卡片吗?将添加什么代码? 是的,您可以在Main
函数中放置一个循环来执行此操作。我已经在上面的代码中添加了循环。以上是关于我只有打印 BINGO ,现在我必须在每个 col 行中输入一个随机数的主要内容,如果未能解决你的问题,请参考以下文章