我只有打印 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 行中输入一个随机数的主要内容,如果未能解决你的问题,请参考以下文章

从更多相同的表创建一个大表

如何打开Print Friendly Page Windows?

显示来自其他 tbl 的列别名

为谷歌浏览器中的每一页打印一个标题

如何总结一个数据库? SQL 服务器

尝试打印正确数量的'*'代替数值