You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用循环对比随机数数组与用户输入数组找共同元素?

彩票号码程序问题排查与修复

需求说明

  • 接收用户输入10个1-25之间的数字,存入用户数组;输入值不符合范围的,不存入数组,重新获取输入
  • 生成10个1-25的随机数字,存入随机数数组
  • 仅通过循环对比两个数组,统计并告知用户猜对的数字数量

现存问题

使用continue处理无效输入时程序异常,调整循环括号位置后,数组对比逻辑无法正常工作

用户原代码

//User array
int[] användarTal = new int[10];

//Random numbers array
int[] slumpadeTal = new int[10];

//Generator for 10 random numbers.
Random randomerare = new Random();

//Foor-loop for storing user's 10 guesses in the user array.           
for (int i = 0; i < användarTal.Length; i++)
{
     Console.Write("Enter your guess: ");
     string input = Console.ReadLine();
     int num = Convert.ToInt32(input); 
     användarTal[i] = num;

    //If the user enters wrong value
    if (num < 1 || num > 25)
    {
         Console.WriteLine("Wrong! You must enter a number between 1-25!");
         användarTal[i] = i--;  //Wrong number will not be stored in the user array.                    
    }
    // continue; 
 // } 

    //For-loop for storing and writing out the 10 random numbers.
    for (int j = 0; j < slumpadeTal.Length; j++)
    {
        Console.WriteLine(randomerare.Next(1, 26));  
        
        // Checking if the two arrays have any common numbers
        if (användarTal[i] == slumpadeTal[j])
        {
            Console.WriteLine(användarTal[i]);
        }
    }
}

用户尝试的参考示例代码

int[] arr1 = { 12, 5, 45, 47, 22, 10 };
int[] arr2 = { 23, 45, 10, 58, 78, 77, 46 };

for (int i = 0; i < arr1.Length; i++)
{
    for (int j = 0; j < arr2.Length; j++)
    {
        if (arr1[i] == arr2[j])
        {
            Console.WriteLine(arr1[i]);
        }
    }
}

问题分析与修复后的代码

原代码核心问题

  1. 随机数未存入数组:原代码只打印了随机数,但没把值赋值给slumpadeTal[j],导致对比时数组全是默认值0,无法正确匹配
  2. 无效输入处理错误:användarTal[i] = i--;逻辑混乱,应该通过i--让循环回到当前索引,重新获取有效输入,同时不要给数组赋值无效值
  3. 对比循环位置错误:对比逻辑嵌套在用户输入的循环里,导致每输入一个数就重新生成随机数并对比,完全不符合需求,应该在用户输入完成、随机数全部生成后再执行对比

修复后的完整代码

// 用户数组:存储10个有效输入
int[] användarTal = new int[10];
// 随机数数组:存储10个1-25的随机数
int[] slumpadeTal = new int[10];
Random randomerare = new Random();

// 1. 收集用户的10个有效输入
for (int i = 0; i < användarTal.Length; )
{
    Console.Write("请输入你的猜测数字(1-25):");
    string input = Console.ReadLine();
    // 先判断输入是否能转成整数,避免格式错误崩溃
    if (!int.TryParse(input, out int num))
    {
        Console.WriteLine("请输入有效的整数!");
        continue;
    }
    // 验证数字范围
    if (num < 1 || num > 25)
    {
        Console.WriteLine("错误!必须输入1-25之间的数字!");
        continue;
    }
    // 有效输入存入数组,索引自增
    användarTal[i] = num;
    i++;
}

// 2. 生成并存储10个随机数
Console.WriteLine("\n生成的中奖号码为:");
for (int j = 0; j < slumpadeTal.Length; j++)
{
    slumpadeTal[j] = randomerare.Next(1, 26);
    Console.Write(slumpadeTal[j] + " ");
}
Console.WriteLine();

// 3. 对比两个数组,统计猜对的数量
int correctCount = 0;
Console.WriteLine("\n你猜对的数字有:");
for (int i = 0; i < användarTal.Length; i++)
{
    for (int j = 0; j < slumpadeTal.Length; j++)
    {
        if (användarTal[i] == slumpadeTal[j])
        {
            Console.Write(användarTal[i] + " ");
            correctCount++;
            // 避免重复统计同一个数字(如果用户输入重复的话)
            break;
        }
    }
}

Console.WriteLine($"\n总共猜对了 {correctCount} 个数字!");

关键修复点说明

  • 用int.TryParse处理输入格式错误,避免程序崩溃
  • 修改用户输入循环的逻辑:只有输入有效时才让索引i自增,确保数组里全是符合要求的数字
  • 把随机数正确存入数组,而不是只打印
  • 将对比逻辑放在所有数据准备完成后执行,使用嵌套循环遍历两个数组统计匹配数量

内容的提问来源于stack exchange,提问作者Ronnika Olsson

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 10:25:17