创建不同的数组:不显示正确的结果

时间:2012-11-23 21:58:13

标签: c# arrays winforms sorting

我目前正在构建一个排序程序。我有三种不同的方法来创建数组:RandomIn OrderReverse。我目前正在使用In OrderReverse数组遇到问题。每次创建In Order数组时,它都以1开头,我不知道该怎么做。此外,我的Reverse数组不会每次都显示数字,而不是每次点击后。我该如何解决这两个问题?

namespace sortingMachine
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        //Class Level Variables --------------------------------------------------------------------------------------

        Stopwatch sw = new Stopwatch();
        Random r = new Random();
        OpenFileDialog open1 = new OpenFileDialog();

        long operations = 0;
        int size;
        int max;
        int[] createArray;
        int[] sortArray;
        int[] copyArray;

        //Create Array Methods --------------------------------------------------------------------------------------

        public void RandomNumber()
        {
            size = Convert.ToInt32(textBoxSize.Text);
            max = Convert.ToInt32(textBoxMax.Text);
            createArray = new int[size];
            copyArray = new int[size];
            sortArray = new int[size];

            for (int i = 0; i < size; i++)
            {
                createArray[i] = r.Next(1, max);
            }

            textBoxResults.AppendText("-------------------------------------------------------------------------------" + Environment.NewLine + "Random" + Environment.NewLine + Environment.NewLine);

            DisplayArrays();
        }

        public void InOrder()
        {
            size = Convert.ToInt32(textBoxSize.Text);
            max = Convert.ToInt32(textBoxMax.Text);
            createArray = new int[size];
            copyArray = new int[size];
            sortArray = new int[size];

            createArray[0] = 1;

            for (int i = 1; i < size; i++)
            {
                createArray[i] = createArray[i - 1] + r.Next(1, max);
            }

            for (int i = 1; i < size; i++)
            {
                if (r.Next(1, 101) < Convert.ToInt32(textBoxPercentage.Text))
                {
                    for (int x = 1; x < size; x++)
                    {
                        createArray[x] = r.Next(1, createArray[size - 1]);
                    }
                }
            }

            textBoxResults.AppendText("-------------------------------------------------------------------------------" + Environment.NewLine + "In Order" + Environment.NewLine + Environment.NewLine);

            DisplayArrays();
        }

        public void ReverseOrder()
        {
            size = Convert.ToInt32(textBoxSize.Text);
            max = Convert.ToInt32(textBoxMax.Text);
            createArray = new int[size];
            copyArray = new int[size];
            sortArray = new int[size];

            createArray[size - 1] = 1;

            for (int i = size - 1; i > 0; i--)
            {
                createArray[i - 1] = createArray[i] + r.Next(1, max);
            }

            for (int i = size - 1; i > 0; i--)
            {
                if (r.Next(1, 101) < createArray[0])
                {
                    for (int x = size - 1; x > 0; x--)
                    {
                        createArray[x] = r.Next(1, createArray[0]);
                    }
                }
            }

            textBoxResults.AppendText("-------------------------------------------------------------------------------" + Environment.NewLine + "Reverse Order" + Environment.NewLine + Environment.NewLine);

            DisplayArrays();
        }



        private void buttonCreateArray_Click(object sender, EventArgs e)
        {

            if ((textBoxSortKey.Text != "") && (textBoxCreateKey.Text != ""))
            {
                if (radioButtonRandom.Checked == true)
                {
                    RandomNumber();
                }

                if (radioButtonInOrder.Checked == true)
                {
                    InOrder();
                }

                if (radioButtonReverseOrder.Checked == true)
                {
                    ReverseOrder();
                }
            }
            else
            {
                MessageBox.Show("Type a key into the Key textbox.");
            }
        }



    }
}

显示结果

订单数组我不知道为什么它始终以一个开头:

-------------------------------------------------------------------------------
In Order
1
2
4
6
10

有时候逆序数组会是这样的:

-------------------------------------------------------------------------------

    Reverse Order
    10
    2
    7
    6
    5

Windows窗体:

enter image description here

2 个答案:

答案 0 :(得分:2)

如果你看一下你如何为数组赋值,你会看到第一个元素被赋值为零,但是在你的循环中你从第二个元素开始(即1)所以你永远不会重新分配第一个元素。

        createArray[0] = 1;

        for (int i = 1; i < size; i++)
        {
            createArray[i] = createArray[i - 1] + r.Next(1, max);
        }

尝试编写第一个元素赋值如下:

        createArray[0] = r.Next(1, max);

至于你的反向功能,那里有太多的怪异,真正看到你正在尝试做什么。尝试再多思考几次。特别注意这样的代码:if (r.Next(1, 101) < createArray[0]) - 它具有随机行为,并且还包含幻数。

答案 1 :(得分:1)

在函数InOrder中,您将数组的第一个索引初始化为1.对于反向顺序,在两个fors之间的 if 语句中,每次比较一个随机数1-101,数组中的第一个数字。你应该做的是将数组中的数字相互比较。