2012-11-23 97 views
0

我目前正在构建一个排序程序。我做了三种不同的方法来创建一个数组:Random,In 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

+0

你调试过吗?逐步浏览代码并查看正在更改的值。 –

+1

如果你会展示一个简短但完整的程序来展示你的问题,那么这真的会有所帮助。一个控制台应用程序会使这个重现更容易。 –

+0

@JonSkeet这是一个完整的示例程序。所有需要的是复制粘贴并在Windows窗体中相应地命名文本框。请帮帮我。 – techAddict82

回答

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。逆顺序,在两层之间FORS,每个如果语句的函数你需要将数组中的第一个数字与1-101之间的随机数进行比较。你应该做的是将数组中的数字相互比较。

+0

+1你能告诉我你将如何使用我的示例代码对“逆序”进行更改吗? – techAddict82