【问题标题】:How do I declare a local variable using another local variable? [duplicate]如何使用另一个局部变量声明一个局部变量? [复制]
【发布时间】:2017-12-22 18:59:58
【问题描述】:

我是 C# 的初学者。

我可以使用局部变量来声明局部变量吗?

我想生成 4 个不重复的唯一随机数 0-100,但现在我被这些变量困住了。我正在尝试使用另一个局部变量数据声明这些局部变量,但我不能,因为语句从上到下运行。例如从下面的代码:我不能声明 index1,因为 exclude1 还没有被声明。如果有人可以帮助我解决这个问题或提出一种新方法,将不胜感激。谢谢!

        var rand = new System.Random();
        int index1 = rand.Next(0, 101 - exclude1.Count);
        int index2 = rand.Next(0, 101 - exclude2.Count);
        int index3 = rand.Next(0, 101 - exclude3.Count);
        int index4 = rand.Next(0, 101 - exclude4.Count);
        var exclude1 = new HashSet<double>() { index2, index3, index4 };
        var exclude2 = new HashSet<double>() { index1, index3, index4 };
        var exclude3 = new HashSet<double>() { index2, index1, index4 };
        var exclude4 = new HashSet<double>() { index2, index3, index1 };

【问题讨论】:

  • exclude1.Count 变量 exclude1 未声明如何获取未声明对象的计数
  • 您的变量循环地相互依赖。你认为这应该如何运作?您认为这是在哪种其他编程语言中工作的?如果您知道 excludes 将只有 3 个项目,那么您应该直接使用 3 而不是使用 Count of excludes。
  • 你问过XY Problem。您的真正问题是如何生成一系列唯一随机数。您提出的计划是行不通的,但您仍然在询问如何实施该计划。不要那样做。相反,请使用有效且已得到解答的算法。考虑到 0-100 的小数字范围,随机排列的数组似乎是理想的。有关示例和其他想法,请参阅标记的重复项。
  • 我想为生成的 4 个唯一数字设置 4 个不同的变量,因为我想让它显示在 Unity 中的 4 个单独的 UI 文本框中。

标签: c# variables local


【解决方案1】:

我是否可以使用 local 声明局部变量 变量?

当然你可以使用其他局部变量来声明一个局部变量,前提是你使用的局部变量已经在你要定义的变量之前定义了。

在你的情况下,你有这个:

int index1 = rand.Next(0, 101 - exclude1.Count);

您需要exclude1,它在index1 之后声明。即使您将 exclude1 的声明移到 index1 之前,您也会遇到问题,因为从下面可以清楚地看出:

 var exclude1 = new HashSet<double>() { index2, index3, index4 };

exclude1需要index2index3index4index2需要exclude2,其中包含index1!所以代码是无效的。

如果您想获得 [0,100] 范围内的 4 个唯一随机数,您可以尝试以下操作:

var numbers = new List<int>();
var random = new Random();
while(numbers.Length < 4)
{
    int number = random.Next(0,101);
    if(!numbers.Contains(number))
    {
        numbers.Add(number);
    }
}

【讨论】:

  • 我也在使用 Unity,我想在 4 个单独的 UI 文本框中显示 4 个唯一数字。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-05-23
  • 1970-01-01
  • 2021-10-01
  • 1970-01-01
相关资源
最近更新 更多