【问题标题】:Find the first uneven number in random array in c#在c#中找到随机数组中的第一个奇数
【发布时间】:2021-03-25 08:26:59
【问题描述】:

我必须创建数组并用 1-100 之间的随机数填充它。从那里,我必须找到第一个奇数并打印出来。 如果数组中没有奇数,也必须打印 0。 这是我所做的:

int[] tab = new int[10];
int[] uneven = new int[tab.Length];
int i;


           for (i = 0; i < tab.Length; i++)
               tab[i] = new Random().Next(100) + 1;   


           do
           {
               uneven[i] = tab[i];             



           } while (tab[i] % 2 == 1);   


           Console.WriteLine(uneven[0]); 

所以我的理由是,只要 tab[i] 不均匀,我就在不均匀 [i] 中添加不均匀数字,然后打印数组的第一个元素。 但是,我得到“脱离债券异常”。

提前感谢您的帮助。

【问题讨论】:

  • tab[i] % 2 == 1 应该是tab[i] % 2 != 0
  • 在 for 循环之后,i 等于 tab.Length。因此,当您到达uneven[i] 时,它是非法索引。你需要在 for 循环之后重置 i,并在 do-while 循环中增加它以防止无限循环。
  • 您应该只拨打一次new Random(),然后拨打Next,否则您的号码可能不是随机的。

标签: c# arrays loops foreach


【解决方案1】:

您的 for 循环将 i 设置为 10,这超出了数组的范围。您需要在执行循环之前将其重新设置为 0。另外,你需要增加 i。

        i = 0;
        do
        {
            uneven[i] = tab[i];
            i++;
        } while (tab[i] % 2 != 0);

【讨论】:

  • 可能也提供更正的代码
  • Lucien,查看编辑。我添加了 i++ 以防止它陷入无限循环,并且像@Rahul 所说的那样将 == 1 更改为 != 0。
  • 是的,谢谢@TerryTyson。这正是问题所在。
【解决方案2】:

当您的 do 循环开始时,您的“i”变量停留在 10。数组从 0 开始,所以它只上升到 9,这就是您看到越界异常的原因。这是您要实现的目标的一个小示例:

        int[] tab = new int[10];
        var rnd = new Random(); 


        // Create 10 random numbers
        for (int i = 0; i < tab.Length; i++)
        {
           tab[i] = rnd.Next(100) + 1;
        }

        // Find the first uneven number
        bool found = false;
        for (int i = 0; i < tab.Length; i++)
        {
           if (tab[i] % 2 != 0)
           {
              Console.WriteLine(tab[i]);       
              found = true;
              break;
           }
        }

        // Didn't generate an uneven number?
        if (!found)
        {
          Console.WriteLine("Nothing found");
        }

【讨论】:

    【解决方案3】:

    这将创建一个数组[],并为每个元素分配随机数。 第二个 for 循环检查数字是偶数/奇数,如果是奇数则中断循环。

        static void Main(string[] args)
      {
         int[] numList = new int[100];
         var rand = new Random();
    
         Console.WriteLine(rand.Next(101));
    
         for (int i = 0; i <= 99; i++)
         {
            numList[i] = rand.Next(101);
            Console.WriteLine($"Element; {i}: {numList[i]}");
         }
    
         for (int i = 0; i <= 99; i++)
         {
            int num = numList[i];
            if (num / 2 != 0)
            {
               Console.WriteLine($"The first uneven number is: {num} in element: {i}");
               break;
            }
            if(i == numList.Count())
            {
               Console.WriteLine("All numbers are even");
               break;
            }
         }
          Console.ReadLine();
      }
    

    【讨论】:

      猜你喜欢
      • 2012-01-25
      • 1970-01-01
      • 1970-01-01
      • 2014-12-12
      • 2022-12-04
      • 1970-01-01
      • 2013-11-13
      • 2020-12-07
      • 1970-01-01
      相关资源
      最近更新 更多