Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/336.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 将数组中的随机值设置到列表中,直到满足条件为止。在C中#_C#_Arrays_List_Random_While Loop - Fatal编程技术网

C# 将数组中的随机值设置到列表中,直到满足条件为止。在C中#

C# 将数组中的随机值设置到列表中,直到满足条件为止。在C中#,c#,arrays,list,random,while-loop,C#,Arrays,List,Random,While Loop,我想将数组中的新随机值设置到一个列表中,直到满足以下两个条件之一。但它只允许我在不考虑条件的情况下再加一个1值。在我输入“y”后,程序允许我获取另一个值,然后它再次询问我是否需要另一张卡,当我再次输入“y”时,代码继续,而不允许我添加另一个值。 第二个问题是if(Hands.playerHand.Sum()>22)我希望程序计算列表的总值,如果大于22,则执行命令 谢谢大家! string userAnotherCard = Console.ReadLine();

我想将数组中的新随机值设置到一个列表中,直到满足以下两个条件之一。但它只允许我在不考虑条件的情况下再加一个1值。在我输入“y”后,程序允许我获取另一个值,然后它再次询问我是否需要另一张卡,当我再次输入“y”时,代码继续,而不允许我添加另一个值。 第二个问题是if(Hands.playerHand.Sum()>22)我希望程序计算列表的总值,如果大于22,则执行命令

谢谢大家!

        string userAnotherCard = Console.ReadLine();

        bool secondHand = true;
        secondHand = (userAnotherCard == "y");

        bool secondHandNo = true;
        secondHandNo = (userAnotherCard == "n");

        while(secondHand)
        {

                //if user want another card, this programm will ganerate another card and store it inside playerHand

                    Hands.playerHand.Add(Deck.CardDeck[Hands.rando.Next(0, Deck.CardDeck.Length)]);
                    Console.WriteLine("Your cards are: ");
                    Hands.playerHand.ForEach(Console.WriteLine);

                    Console.WriteLine("Would u like to take another card?");
                    Console.ReadLine();
                 if(Hands.playerHand.Sum() > 22)
                    Console.WriteLine("You loss, your cards sum is more than 21");
                    break;
        }

        while (secondHandNo)
                    break;
所以我稍微修改了代码。现在,我可以选择任意多的值,但while(secondHandNo)和while(Hands.playernand.Sum()>21)命令有问题。当我在取下另一张卡后输入“n”时(secondHandNo),代码将不会执行。while(Hands.playerHand.Sum()>21)也不会执行。不管我的答案是什么,它只是给了我更多的价值。请注意,当我在不使用另一张卡的情况下立即输入“n”时,该命令工作正常,它将带我进入代码的其余部分

        string userAnotherCard = Console.ReadLine();

        bool secondHand = true;
        secondHand = (userAnotherCard == "y");

        bool secondHandNo = true;
        secondHandNo = (userAnotherCard == "n");

        while (secondHand)
        {

            Hands.playerHand.Add(Deck.CardDeck[Hands.rando.Next(0, Deck.CardDeck.Length)]);
            Console.WriteLine("Your cards are: ");
            Hands.playerHand.ForEach(Console.WriteLine);

            Console.WriteLine("Would u like to take another card?");
            Console.ReadLine();

        }
            while (Hands.playerHand.Sum() > 21)
            {
                Console.WriteLine("You loss, your cards sum is more than 21");
                break;
            }


            while (secondHandNo)
                break;

好的,我能够修复这段代码。它现在似乎起作用了。我将整个块设置为while循环,并使用if语句和break设置每个条件;如果条件满足

        while (true)
        {
            Console.WriteLine("Would u like to take another card?");
            string userAnotherCard = Console.ReadLine();

            bool secondHand = true;
            secondHand = (userAnotherCard == "y");

            bool secondHandNo = true;
            secondHandNo = (userAnotherCard == "n");

            if (secondHand)
            {
                Hands.playerHand.Add(Deck.CardDeck[Hands.rando.Next(0, Deck.CardDeck.Length)]);
                Console.WriteLine("Your cards are: ");
                Hands.playerHand.ForEach(Console.WriteLine);

            }
            if (Hands.playerHand.Sum() > 21)
            {
                Console.WriteLine("You loss, your cards sum is more than 21");
                break;
            }


            if (secondHandNo)
                break;
        }

这里有很多问题:

  • 您没有从控制台存储结果。这很容易解决:

    userAnotherCard = Console.ReadLine();
    
  • 即使我们将其存储在
    中,而
    您的条件也会检查以前分配的值,并且从未更改。这就是你处于一个无休止的循环中的原因。我只想用条件本身来代替它:

    while (userAnotherCard == "y")
    
  • 似乎您在使用中断时使用的是
    ,而不是简单的
    if

    if (Hands.playerHand.Sum() > 21)
    
  • while(secondHandNo)中断无效,可以从代码中删除
  • 这应该足够了。最终代码可以如下所示:

    string userAnotherCard = Console.ReadLine();
    
    while (userAnotherCard == "y")
    {
        Hands.playerHand.Add(Deck.CardDeck[Hands.rando.Next(0, Deck.CardDeck.Length)]);
        Console.WriteLine("Your cards are: ");
        Hands.playerHand.ForEach(Console.WriteLine);
    
        Console.WriteLine("Would u like to take another card?");
        userAnotherCard = Console.ReadLine();
    
        if (Hands.playerHand.Sum() > 21)
        {
            Console.WriteLine("You loss, your cards sum is more than 21");
            break;
        }
    }
    

    您在哪里存储用户对您关于第二张卡的请求的响应?始终执行第一个while内的中断,因为它不在Sum之后的大括号块{..}内。做数学要求精度>22是23这里有很多无用的代码:f.i.while(secondhandno)break;一个简单的空行也会有同样的效果我如何存储用户响应?我尝试再次创建值为“y”的新bool varb,并将其与用户响应进行比较(所有这些都在while(二手){}中),但它不起作用。我真的是一个新的编码,所以我希望你能在这一点上给我小费。谢谢你好谢谢你的回复。我改了密码。请看一看,让我知道你的想法。!