相关疑难解决方法(0)

检查是否已使用数组的所有值

对不起,如果这是一个愚蠢的菜鸟问题.我正在为我的女朋友做一个非常小的项目 - 一个国家名单,她必须进入他们的首都(晦涩的国家,请注意).由于我是一个初学者,我不得不求助于使用两个数组,一个用于国家,另一个用于大写,具有匹配的索引.这样很容易检查正确的答案,我不必解析任何文本文件或使用任何数据库.我使用随机数字来使它更有趣.为了阻止程序一遍又一遍地生成相同的国家,我使用了一个整数列表来跟踪已经使用了哪些索引,如果列表包含前一个索引,则重新生成该数字.很基本的东西.令人惊讶的是,这一切都有效.

但我遇到了问题.我如何检查我的国家已经用完了?:)我不能简单地检查我的国家/地区数组的列表大小,因为List可能包含比数组更多的值,并且if(taken.Equals(Countries.Length))似乎不起作用.或者我在代码中找不到合适的位置来进行此检查.

对不起,如果这很简单,但我似乎找不到合适的解决方案.

编辑 哇,多么令人惊叹的社区.在从星巴克到我的地方的短暂步行中,我得到了许多质量答案,涵盖了大量的设计技巧.这真是太棒了!谢谢大家!显然,问题已得到解答,但如果有人有任何其他意见,我会为您发布代码.

//现在只需13个国家的测试

string[] Countries = {"Belgium", "France", "The Netherlands", "Spain", "Monaco", "Belarus", "Germany",
                             "Portugal", "Ukraine", "Russia", "Sweden", "Denmark", "South Africa"};
        string[] Capitals = {"Brussels", "Paris", "Amsterdam", "Madrid", "Monaco", "Minsk", "Berlin",
                            "Lisbon", "Kiev", "Moscow", "Stockholm", "Copenhagen", "Pretoria"};
        Random number = new Random();
        List<int> taken = new List<int>();
        int index;
        int score = 0;

        private int Generate()
        {

            while (true) {
                index = number.Next(0, Countries.Length);
                if (taken.Contains(index)) continue;
                // THIS IS WHAT I WAS INITIALLY TRYING …
Run Code Online (Sandbox Code Playgroud)

c# arrays list

3
推荐指数
1
解决办法
834
查看次数

不重复的随机数生成器

我正在尝试创建一个 1 到 500 之间不重复的随机数生成器。我创建了一个数组来跟踪生成的数字是否已被使用,但它似乎不起作用

if (drawnTF[num] == false)
            {
                labels[labelNum].Visible = false;
                txtLatestDrawnNum.Text = "Latest Drawn Number: " + latestDrawnNum.ToString("000");
                drawnTF[num] = true;
            }
            else
            {
                while (drawnTF[num] == true)
                {
                    num = random.Next(0, 499);
                    if (drawnTF[num] == false)
                    {
                        labelNum = 499 - num;
                        labels[labelNum].Visible = false;
                        txtLatestDrawnNum.Text = "Latest Drawn Number: " + latestDrawnNum.ToString("000");
                        drawnTF[num] = true;
                    }
                }
            }
Run Code Online (Sandbox Code Playgroud)

c#

1
推荐指数
1
解决办法
382
查看次数

奇怪的按位异或行为

为什么以下"交换"操作会在随机时间失败?

int i,p,a[11] = {0,1,2,3,4,5,6,7,8,9,10 };

srand(time(0));

for (i=0;i<11;i++)
{
    p = rand() % 11;
    a[i] = a[i] ^ a[p];
    a[p] = a[i] ^ a[p];
    a[i] = a[i] ^ a[p];
}
Run Code Online (Sandbox Code Playgroud)

它与这个答案中的逻辑没那么不同
它将适用于3/4运行然后开始复制0

用C和C++试过,结果相同

[编辑]
通过初始化p=0和替换相关的行来解决while (p==i) p = rand() % 11;

更新:不使用原因xor(参见Mark Byers的回答和评论)

bit-manipulation

0
推荐指数
2
解决办法
196
查看次数

随机排列列表<object>

我有一个对象列表,我想随机排列或混乱.这可能吗?该列表由公司产品构成.我占据了每家公司的前2名,并将其余的添加到另一个名单中.我想混淆第二个清单.

谢谢你的帮助

c# shuffle list

0
推荐指数
1
解决办法
3949
查看次数

按随机数顺序排序列表

我有一个列表,我想每次排序成随机顺序.

我遇到过几种方法:

  1. list = list.OrderBy(x => Guid.NewGuid()).ToList();
    
    Run Code Online (Sandbox Code Playgroud)
  2. var rnd = new Random();
    myList = myList.OrderBy(x => rnd.Next()).ToList();
    
    Run Code Online (Sandbox Code Playgroud)
  3. static Random random = new Random();
    
    public static IEnumerable<T> RandomPermutation<T>(IEnumerable<T> sequence)
    {
        T[] retArray = sequence.ToArray();
    
        for (int i = 0; i < retArray.Length - 1; i += 1)
        {
            int swapIndex = random.Next(i + 1, retArray.Length);
            T temp = retArray[i];
            retArray[i] = retArray[swapIndex];
            retArray[swapIndex] = temp;
        }
    
        return retArray;
    }
    
    Run Code Online (Sandbox Code Playgroud)

显然,1到3之间的代码量有很大差异,但是有什么好处吗?

c# asp.net random

0
推荐指数
1
解决办法
1213
查看次数

为什么"new Random().Next()"不返回像"random.Next()"这样的随机数?

我尝试了两种不同的方法来获得一系列随机数:

// (a) works
Random random = new Random();
return Enumerable.Range(0, 20).OrderBy(n => random.Next());

// (b) does not work
return Enumerable.Range(0, 20).OrderBy(n => new Random().Next());
Run Code Online (Sandbox Code Playgroud)

我正在使用的第一个变体random.Next()工作正常.

但是我调用的变体new Random().Next()并不返回随机数; 相反,它返回一个从0到20的数字序列.

现在我的问题是:

  • 什么术语表示new Random().Next()C#中对象的第二种初始化?
  • 它与第一个有什么不同,以至于我没有获得欲望输出?

c# random

0
推荐指数
1
解决办法
655
查看次数

在每次执行中随机数和生成相同的数字序列

下面的片段随机数和每次执行中更改数字序列:

Enumerable.Range(1, 1000).OrderBy(r => Guid.NewGuid()).ToList();
Run Code Online (Sandbox Code Playgroud)

但是我想要随机数字并在每次执行应用程序时生成相同的数字序列?

.net c# .net-core

0
推荐指数
1
解决办法
301
查看次数

标签 统计

c# ×6

list ×2

random ×2

.net ×1

.net-core ×1

arrays ×1

asp.net ×1

bit-manipulation ×1

shuffle ×1