【问题标题】:C# - Exception while trying to print the last element in an arrayC# - 尝试打印数组中的最后一个元素时出现异常
【发布时间】:2018-12-31 16:25:52
【问题描述】:

我在尝试打印数组中的最后一个元素时遇到异常。

这是我的代码:

int[] nums = { 1, 2, 5, 7, 8 };

Console.WriteLine("first element is " + nums[0]);
int fe = Convert.ToInt32(Console.ReadLine());
Console.WriteLine("Last element is {0}" , nums[nums.Length - 1]);
int le = Convert.ToInt32(Console.ReadLine());

例外:

第一个元素是 1

未处理的异常:System.FormatException:输入字符串的格式不正确。 在 System.Number.StringToNumber(String str, NumberStyles options, NumberBuffer& number, NumberFormatInfo info, Boolean parseDecimal) 在 System.Number.ParseInt32(String s,NumberStyles 样式,NumberFormatInfo 信息) 在 System.Convert.ToInt32(字符串值) 在 C:\Users\SudhaPraveen\Documents\Visual Studio 2017\Projects\CSharpPractice21DaysPlan\W2Resource\BasicExProb51.cs:line 16 中的 W2Resource.BasicExProb51.Main() 按任意键继续 。 . .

【问题讨论】:

  • 调试看看Console.ReadLine()返回了什么。
  • 提示:当你认为异常并没有发生。
  • 您对 Console.ReadLine 的输入是什么?
  • 查看你的堆栈跟踪,你会找到导致异常的方法,它以at...开头。与您使用的方法进行比较,然后您就知道Convert.ToInt32 引发了该异常。为什么?因为控制台中的内容不是有效的整数
  • Console.ReadLine() 不是整数,这就是它抛出异常的原因

标签: c#


【解决方案1】:

你的台词:

Console.WriteLine("first element is " + nums[0]);
Console.WriteLine("Last element is {0}" , nums[nums.Length - 1]);

都是正确的。

您的异常来自

中的用户输入
Convert.ToInt32(Console.ReadLine());

只要您的用户键入一个可以解析为整数的值,它就可以工作。否则它会引发你所看到的那种异常。

如果您不使用输入值,您可以将其替换为:

Console.ReadKey();

它会让程序“暂停”,直到用户按下键盘的任意键。

否则,如果你需要使用它,你必须在使用它之前验证输入。例如,我建议您检查int.TryParse() 方法的行为和用法。

这是一个与您类似的问题的答案:https://stackoverflow.com/a/45259920/461444 但它使用int.Parse() 而不是建议的int.TryParse(),这并不好,因为它需要更多代码并引发无用且完全可以避免的异常。

【讨论】:

    猜你喜欢
    • 2014-12-30
    • 1970-01-01
    • 2020-01-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多