C#解决Kattis平台Jumbo Javelin题出现运行时错误求排查
运行时错误原因及修复方案
核心错误原因
- 你仅捕获了
FormatException异常,但所有输入读取完毕后,Console.ReadLine()会返回null,此时调用int.Parse(null)会抛出ArgumentNullException,该异常未被捕获会直接导致程序崩溃,Kattis平台因此判定为运行时错误。 - 额外逻辑问题:Jumbo Javelin题目第一行输入是标枪的总数量N,你直接将其当做第一个标枪的长度使用,会导致输入读取次数和预期不符,也可能间接触发异常。
修复代码(仅解决运行时错误)
using System; namespace JumboJavelin { class Program { static void Main(string[] args) { // 先读取第一行的总数量N,避免输入读取错位 int N = int.Parse(Console.ReadLine()); int sum = 0; int loss = 1; for (int n = 0; n < N; n++) { // 已知输入行数为N,直接读取即可,无需异常捕获避免漏抓错误 int l = int.Parse(Console.ReadLine()); sum += l; if((n + 1) % 2 == 0 && n != 0) { sum -= ((n + 1) / 2)*loss; } } Console.WriteLine(sum); // 无需手动调用Environment.Exit,Main方法执行完程序会自然退出 } } }
兼容原有读取逻辑的调整方案
如果你一定要保留循环读取+异常捕获的逻辑,可以调整输入读取的判断逻辑,避免未捕获异常:
try { string line = Console.ReadLine(); // 输入读取完毕直接退出循环 if (line == null) break; l = int.Parse(line); } catch (Exception) { break; }
内容的提问来源于stack exchange,提问作者kelank
相关产品推荐
相关产品推荐

