代码显示输出错误

时间:2013-02-18 14:48:54

标签: c# sorting insertion-sort

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

代码:

    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();
    }

我提供的示例输入:

5
2 4 6 8 3

出现的输出: enter image description here

任何人都可以解释为什么会发生这种情况!

非常感谢任何帮助! :)

1 个答案:

答案 0 :(得分:2)

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

因此,对Console.Read()的第一次调用将返回50(ASCII值'2') 第二个调用将返回32(空格的ASCII值) 第三个调用将返回52(ASCII值'4') 等

要解决此问题,请按以下方式初始化ar

var numbers = Console.ReadLine().Split(' ');
for (int i = 0; i < ar_size; i++)
    ar[i] = Convert.ToInt32(numbers[i]);

请注意,此代码缺少错误处理。它将在以下情况下抛出异常:

  1. 用户输入除空格和数字之外的任何内容
  2. 用户输入的数字少于第一行中指定的数字