2015-11-24 143 views
-2

我想創建一個程序,讓我在十個不同的文本框中輸入十個不同的數字,然後稍後將這些輸入的數字按升序或降序排序。 Windows窗體應用程序設計中有十個文本框,一個名爲「Sort」的按鈕(可根據您選擇的單選按鈕對數字進行排序的按鈕)和兩個名爲「Ascending」和「Descending」的單選按鈕。該設計還有10個標籤,其中在用戶點擊排序按鈕之後將顯示已排序的數字。但是,我發現有關實際編碼本身的麻煩,我考慮使用嵌套for循環,但無法處理條件。現在我已經使用了一個支持多個if else語句的數組。將10個輸入數字按升序和降序排列

這裏是我的C#Windows窗體應用程序代碼:

using System; 
using System.Collections.Generic; 
using System.ComponentModel; 
using System.Data; 
using System.Drawing; 
using System.Linq; 
using System.Text; 
using System.Windows.Forms; 

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

     private void radioButton1_CheckedChanged(object sender, EventArgs e) 
     { 

     } 

     private void btnSort_Click(object sender, EventArgs e) 
     { 
      int num1, num2, num3, num4, num5, num6, num7, num8, num9, num10; 
      num1 = int.Parse(textBox1.Text); 
      num2 = int.Parse(textBox2.Text); 
      num3 = int.Parse(textBox3.Text); 
      num4 = int.Parse(textBox4.Text); 
      num5 = int.Parse(textBox5.Text); 
      num6 = int.Parse(textBox6.Text); 
      num7 = int.Parse(textBox7.Text); 
      num8 = int.Parse(textBox8.Text); 
      num9 = int.Parse(textBox9.Text); 
      num10 = int.Parse(textBox10.Text); 


      if (radioButton1.Checked == true) 
      { 
       int[] numbers = { num1, num2, num3, num4, num5, num6, num7, num8, num9, num10 }; 
       //String[] display = { l1, l2, l3, l4, l5, l6, l7, l8, l9, l10 }; 
       Array.Sort(numbers); 

       if (num1 <= num2) 
       { 
        label12.Text = textBox1.Text; 
       } 
       else if (num2 <= num3) 
       { 
        label13.Text = textBox2.Text; 

       } 
       else if (num3 <= num4) 
       { 
        label14.Text = textBox3.Text; 
       } 
       else if (num4 <= num5) 
       { 
        label15.Text = textBox4.Text; 

       } 
       else if (num5 <= num6) 
       { 
        label16.Text = textBox5.Text; 

       } 
       else if (num6 <= num7) 
       { 
        label21.Text = textBox6.Text; 

       } 
       else if (num7 <= num8) 
       { 
        label20.Text = textBox7.Text; 

       } 
       else if (num8 <= num9) 
       { 
        label19.Text = textBox8.Text; 

       } 
       else if (num9 <= num10) 
       { 
        label18.Text = textBox9.Text; 

       } 
       else if (num10 <= num1) 
       { 
        label17.Text = textBox10.Text; 
       } 
     } 
      } 
    } 
} 
+1

特別是你卡在哪裏?哪部分不工作? –

+0

其實,我已經運行了它,並沒有觸發我輸入的代碼。所以基本上,它不起作用。與我所做的嵌套for循環一樣,也許條件沒有被編碼,就像這個一樣。 – Raios

+0

您可以在'btnSort_Click'的第一行放置一個斷點,然後運行它並查看代碼的運行方式。如果它甚至沒有打到,那麼事件沒有連接到按鈕。 –

回答

0

試試這個

using System; 
using System.Collections.Generic; 
using System.ComponentModel; 
using System.Data; 
using System.Drawing; 
using System.Linq; 
using System.Text; 
using System.Windows.Forms; 

namespace WindowsFormsApplication1 
{ 
    public partial class Form1 : Form 
    { 
     List<TextBox> textBoxes = null; 
     List<Label> labels = null; 
     public Form1() 
     { 
      InitializeComponent(); 

      textBoxes = new List<TextBox>() { textBox1, textBox2, textBox3, textBox4, textBox5, textBox6, textBox7, textBox8, textBox9, textBox10 }; 
      labels = new List<Label>() { label1, label2, label3, label4, label5, label6, label7, label8, label9, label10 }; 

      for (int i = 0; i < textBoxes.Count; i++) 
      { 
       labels[i].Text = textBoxes[i].Text; 
      } 
      for (int i = 0; i < labels.Count - 1; i++) 
      { 
       int iInt = int.Parse(labels[i].Text); 
       for (int j = i + 1; j < labels.Count; j++) 
       { 
        int jInt = int.Parse(labels[j].Text); 
        if (jInt < iInt) 
        { 
         iInt = int.Parse(labels[j].Text); 
         string temp = labels[i].Text; 
         labels[i].Text = labels[j].Text; 
         labels[j].Text = temp; 
        } 
       } 
      } 
     } 
    } 
} 
​ 

或者這種方法

using System; 
using System.Collections.Generic; 
using System.ComponentModel; 
using System.Data; 
using System.Drawing; 
using System.Linq; 
using System.Text; 
using System.Windows.Forms; 

namespace WindowsFormsApplication1 
{ 
    public partial class Form1 : Form 
    { 
     List<TextBox> textBoxes = null; 
     List<int> numbers = new List<int>(); 
     List<Label> labels = null; 
     public Form1() 
     { 
      InitializeComponent(); 

      textBoxes = new List<TextBox>() { textBox1, textBox2, textBox3, textBox4, textBox5, textBox6, textBox7, textBox8, textBox9, textBox10 }; 
      labels = new List<Label>() { label1, label2, label3, label4, label5, label6, label7, label8, label9, label10 }; 

      for (int i = 0; i < textBoxes.Count; i++) 
      { 
       numbers.Add(int.Parse(textBoxes[i].Text)); 
      } 
      numbers = numbers.OrderBy(x => x).ToList(); 
      for (int i = 0; i < numbers.Count; i++) 
      { 
       labels[i].Text = numbers.ToString(); 
      } 
     } 
    } 
} 
​ 
+0

我希望在另一組標籤上顯示排序後的數字,當我點擊排序按鈕而不是文本框時。所以我只需要替換「int jInt = int.Parse(textBoxes [j] .Text);」去標記?這裏的接口順便說一句http://i.imgur.com/Eti4Sp8.jpg – Raios

+0

修改了代碼。 – jdweng

+0

該代碼看起來合適且合乎邏輯,但我希望當用戶首先單擊單選按鈕序列時(選擇是將其排列爲升序還是降序),將文本框中的數字排列並顯示在標籤上,然後單擊排序按鈕來執行該命令。就像在界面http://i.imgur.com/Eti4Sp8.jpg – Raios

0

試試這個代碼。在這裏,我使用實體框架來使用函數OrderBy和OrderByDescending來根據需要對數據進行排序。

private void btnSort_Click(object sender, EventArgs e) 
     { 
      int num1, num2, num3, num4, num5, num6, num7, num8, num9, num10; 
      num1 = int.Parse(textBox1.Text); 
      num2 = int.Parse(textBox2.Text); 
      num3 = int.Parse(textBox3.Text); 
      num4 = int.Parse(textBox4.Text); 
      num5 = int.Parse(textBox5.Text); 
      num6 = int.Parse(textBox6.Text); 
      num7 = int.Parse(textBox7.Text); 
      num8 = int.Parse(textBox8.Text); 
      num9 = int.Parse(textBox9.Text); 
      num10 = int.Parse(textBox10.Text); 

      var inputList = new List<int>(); 
      inputList.Add(num1); 
      inputList.Add(num2); 
      inputList.Add(num3); 
      inputList.Add(num4); 
      inputList.Add(num5); 
      inputList.Add(num6); 
      inputList.Add(num7); 
      inputList.Add(num8); 
      inputList.Add(num9); 
      inputList.Add(num10); 

     inputList.OrderBy(order =>order); 
     inputList.OrderByDescending(order =>order); 

    } 

您可能必須使用nuGet包導入實體框架,然後嘗試此代碼。希望我的回答能回答你的問題。

相關問題