C#新手求助:数组生成数字判断能否被11整除的代码无输出问题
问题排查与修复方案
嘿,我帮你梳理下代码里的几个关键问题,正是这些问题导致程序卡死、没有输出:
1. 无限循环让程序彻底卡住
你提取前半区数字首位的while循环逻辑有大问题:
while (arr[i] >= 10) { div = arr[i] / 10; }
这里arr[i]的值在循环里从来没改过,只要这个数字大于等于10,循环就会一直跑下去,程序直接卡死在这儿,自然不会有任何输出。如果想用数学方法取首位,得把div作为迭代对象更新:
div = arr[i]; while (div >= 10) { div = div / 10; }
当然用字符串取首位更简单直观,后面我会在修正代码里展示。
2. 数组元素赋值错误
你这段代码:
arr[i] = Convert.ToInt32(str[i]);
完全搞反了!str一开始是个空格字符串,你应该把输入的numArray里的元素转成int赋值给arr[i],正确写法是:
arr[i] = Convert.ToInt32(numArray[i]);
3. 半区划分条件错误
if (i <= n / 2)会把中间的元素也算进前半区,比如n=4时,n/2=2,i<=2会包含索引0、1、2,而前半区应该是前n/2个元素,也就是i < n/2,后半区从i >= n/2开始。
4. 初始字符串带空格导致转换失败
string str = " ";开头的空格会让后面转数字的时候出错,应该初始化为空字符串string str = "";。
修正后的完整代码
using System; namespace IsDivisible { class Program { static void Main(string[] args) { int n = Convert.ToInt32(Console.ReadLine()); int div, digit; string str = ""; // 初始化为空字符串,避免转换异常 string[] numArray = Console.ReadLine().Split(' '); int[] arr = new int[n]; for (int i = 0; i < n; i++) { // 正确读取输入的数组元素 arr[i] = Convert.ToInt32(numArray[i]); // 前半区:取每个数字的首位 if (i < n / 2) { // 用字符串方式取首位,简单不易错 div = int.Parse(arr[i].ToString()[0].ToString()); str += div; } // 后半区:取每个数字的末位 else { digit = arr[i] % 10; str += digit; } } // 用TryParse避免转换失败抛出异常,增强健壮性 if (long.TryParse(str, out long newNumber)) { Console.WriteLine(newNumber % 11 == 0 ? "YES" : "NO"); } else { Console.WriteLine("生成的新数格式无效"); } Console.Read(); } } }
额外小建议
- 用
long.TryParse替代直接Convert.ToInt64,能处理生成的字符串无法转数字的情况,不会直接崩溃。 - 如果偏爱数学方法取首位,记得要更新迭代变量(就像我前面说的那样),别让循环无限跑。
内容的提问来源于stack exchange,提问作者Sravan
相关产品推荐
相关产品推荐

