【问题标题】:c# randomNumber in array == winNumber [closed]c#数组中的随机数== winNumber [关闭]
【发布时间】:2021-01-07 15:53:27
【问题描述】:

所以我是编码初学者(1 个月)。 我已经更改代码 4 天了,没有运气。 我坚持让我的 randomNumber == winNum 中断。 如果用户写入,用户将获得 10 个数字(假设 winNum 为 9) 1,2,5,9,10,11.... 等等。代码不会选择数组中的数字,并打印“你幸运”。 该代码用于工作。 9.2.3.4.5 ......等等,它得到“你很幸运”,但不再是。 我也得到“你输了”“你输了”“你输了”和“游戏结束”。

不确定我做错了什么。

    static void Main(string[] args)
    {
        // -int size = Convert.ToInt32(Console.In.ReadLine());   // this to change amount of variables the user wants instead of [x]
        int[] numbers = new int[10];  //  task 1, modul 3. The 10 in the array is a statment for how many varibles this array can hold.
                                     // you can have as many varibles as you want.
        Random randomNumbers = new Random();
        int winNum = randomNumbers.Next(1, 26);
        Console.WriteLine(winNum);
        Console.WriteLine("Pick your 10 numbers! "); // här får vi våra 10 tal av användaren 
            for (int hallon = 0; hallon < 10; hallon++)  //this loop will print the users numbers
            {
                
                Console.WriteLine($"Your have used: {hallon}" ); // här får vi våra 10 tal av användaren 
            try
            {
                numbers[hallon] = Convert.ToInt32(Console.In.ReadLine());  // numbers lagrar våra 10 tal som kommer spelas nu mot winNum
            }
            catch (SystemException e) // going to catch if the user writes in a letter instead of a number        
            {
                --hallon;
                Console.WriteLine(e.Message);
            }
            if (numbers[hallon] < 1 || numbers[hallon] > 25)
                {
                    Console.WriteLine("Write a number within 1-25. ");
                    --hallon;
                }
            } 
        for (int hallon = 0; hallon < 10; hallon++)
        {
            if (numbers[hallon] == winNum)  // vad gör jag om jag vill ha två vinnande resultat? 
            {
                Console.WriteLine("Lucky number:" + numbers[hallon]);
                break;
            } ////task 2 modul 3 this loops my array untill i have all varbiles printed 
        }

        for (int hallon = 0; hallon < 10; hallon++)
        {
            if (numbers[hallon] != winNum)
            Console.WriteLine("You lost");

        }
        Console.WriteLine("End of the game");
        Console.ReadLine();
    }
    }

【问题讨论】:

  • 学习how to debug small programs对于程序员来说是一项极其宝贵的技能。请浏览链接页面并将其中描述的技术应用于您的问题,以缩小错误原因。
  • 正如 vc 所发现的 - 您的缩进已关闭,因此在第一个“for”循环中发生了很多事情。最后同一行的两个 } 暗示了这一点。尝试修复缩进(有一些工具可以为你做这件事),它可能会让事情变得更干净。与python不同,C#中的缩进只是为了方便程序员,它对编译器没有影响
  • 我一直在使用 Visual Studios 的调试工具,但是(程序运行时没有任何错误)”所以代码在技术上是“错误的”。但它并没有做我想做的事。但我 appricaite 你的反馈--PranavHosangadi。 @StuartMoore我知道我最后的“for循环”是“错误的”,或者甚至可能不需要,正如micke在他的解释中所写的那样。我知道在其他软件中缩进作为 python 有不同的功能,我会尝试让我的代码更干净,并停止使用不必要的代码。正如我之前所说。感谢您抽出宝贵的时间!。

标签: c# arrays for-loop random


【解决方案1】:

我认为您在这里遇到的问题是“break”关键字只超出了它自己的 for 循环。你有一个 for 循环来查看中奖号码是否在猜测中,如果是,则打印“幸运号码” - 但随后它会再次遍历所有猜测并打印“你输了”。因此,即使我猜对了 10 条中的一条,我也希望看到“幸运数字”,然后是 9 条“你输了”。

解决此问题的一种方法是设置一个“赢得”布尔变量,如果您找到中奖号码,则该变量设置为 true,并且仅在“幸运号码”for 循环后为 false 时打印“您输了”。

一些额外的想法:

  • 您的“Catch”语句在 if (numbers[hallon] &lt; 1 || numbers[hallon] &gt; 25) 行上的hallon 变量可能为-1,我认为这会导致错误。建议您在 catch 块中使用continue,这意味着它会再次进入循环顶部。 (要尝试此操作,请输入一个字母作为您的第一个回复)
  • 而不是numbersguesses 可能是变量的更清晰的名称。

【讨论】:

  • 没有想到布尔值,会尝试一些,感谢输入!我注意到我不擅长编写函数。我的朋友也这样告诉我。我评价反馈。这么快
【解决方案2】:

我认为与其遍历每个数字来找到结果,不如执行以下操作:

    static void Main(string[] args)
    {
        // -int size = Convert.ToInt32(Console.In.ReadLine());   // this to change amount of variables the user wants instead of [x]
        int[] numbers = new int[10];  //  task 1, modul 3. The 10 in the array is a statment for how many varibles this array can hold.
                                        // you can have as many varibles as you want.
        Random randomNumbers = new Random();
        int winNum = randomNumbers.Next(1, 26);
        Console.WriteLine(winNum);
        Console.WriteLine("Pick your 10 numbers! "); // här får vi våra 10 tal av användaren 
        for (int hallon = 0; hallon < 10; hallon++)  //this loop will print the users numbers
        {

            Console.WriteLine($"Your have used: {hallon}"); // här får vi våra 10 tal av användaren 
            try
            {
                numbers[hallon] = Convert.ToInt32(Console.In.ReadLine());  // numbers lagrar våra 10 tal som kommer spelas nu mot winNum
            }
            catch (SystemException e) // going to catch if the user writes in a letter instead of a number        
            {
                --hallon;
                Console.WriteLine(e.Message);
            }
            if (numbers[hallon] < 1 || numbers[hallon] > 25)
            {
                Console.WriteLine("Write a number within 1-25. ");
                --hallon;
            }
        }

        if (numbers.Any(n => n == winNum))
        {
            Console.WriteLine("You won! The lucky number was:" + winNum);
        } else
        {
            Console.WriteLine("You lost");
        }

        Console.WriteLine("End of the game");
        Console.ReadLine();
    }

【讨论】:

  • 它出于某种原因可以工作,但我不理解下面的代码 if (numbers.Any(n => n == winNum)) 这个函数有什么作用?我想我理解 numbers.any (将选择“winNum”并将其设置为正确。但是如果输入用户输入 5 个 9 会发生什么(代码不会写 5 次“你赢了!...”?
  • .Any 是一个 LINQ 查询,它在您的 numbers 数组等集合上执行。该查询使用 lambda 表达式,它是“n => n == winNum”部分。 “n”的更好名称是“number”,例如 numbers.Any(number => number == winNum)。 Any 只检查集合中的至少一个元素是否满足条件,然后返回一个真正的布尔值。如果您找到满足条件的第一个元素并且没有进一步循环,它基本上是循环遍历集合并返回 true 的简写。然后 if 语句为真。
  • @Ruan你不明白我给了我多少reif,非常感谢Ruan的帮助和指导,如果你来瑞典让我请你吃饭.非常感谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-01-12
  • 1970-01-01
  • 2020-07-16
  • 2017-09-27
  • 1970-01-01
相关资源
最近更新 更多