首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >显示错误输出的代码

显示错误输出的代码
EN

Stack Overflow用户
提问于 2013-02-18 14:48:54
回答 1查看 88关注 0票数 1

我在c#中开发了一个程序,它执行“插入排序”,代码获取元素和元素值的最大值,然后逐个显示排序值的步骤。

代码:

代码语言:javascript
复制
    static void insertionSort(int[] ar)
    {
        for (int i = 1; i < ar.Length; i++)
        {
            int temp = ar[i];
            int j = i - 1;

            while (j >= 0 && ar[j] > temp)
            {
                ar[j + 1] = ar[j];

                foreach (int val in ar)
                    Console.Write(val + " ");
                Console.WriteLine();

                j--;
            }
        }


    }

    static void Main(String[] args)
    {

        int ar_size;
        ar_size = Convert.ToInt32(Console.ReadLine());
        int[] ar = new int[ar_size];
        for (int i = 0; i < ar_size; i++)
        {
            ar[i] = Convert.ToInt32(Console.Read());
        }

        insertionSort(ar);
        Console.ReadKey();
    }

我给出的示例输入:

代码语言:javascript
复制
5
2 4 6 8 3

输出:

,有人能解释一下为什么会发生这种事吗!

任何帮助都将不胜感激!:)

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-02-18 14:50:55

除了排序本身的问题外,结果中出现奇怪数字的原因是您使用Console.Read非常错误。它返回用户输入的字符的ASCII值。此外,它将返回所有输入字符的ASCII值,而不仅仅是数字。

因此,第一个对Console.Read()的调用将返回50 ('2'的ASCII值)。

第二个调用将返回32 (空格的ASCII值)。

第三个调用将返回52 ('4'的ASCII值)。

等。

要解决这个问题,请像下面这样初始化ar

代码语言:javascript
复制
var numbers = Console.ReadLine().Split(' ');
for (int i = 0; i < ar_size; i++)
    ar[i] = Convert.ToInt32(numbers[i]);

请注意,此代码缺乏错误处理。在以下情况下,它将引发异常:

  1. 用户输入了除空格和数字以外的任何内容。
  2. 用户输入的数字少于他在第一行中指定的数字。
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14938977

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档