需要使用单独的方法对数组中的单词进行排序

时间:2018-03-15 02:01:42

标签: c# arrays sorting

问题: 编写一个名为SortWords的程序,其中包含一个接受任意数量单词并按字母顺序对其进行排序的方法。当使用一个,两个,五个或十个单词调用该方法时,证明程序正常工作。

到目前为止我所拥有的:

private void button1_Click(object sender, EventArgs e)
{
    String[] outWords = new string[20];       
    outWords[0] = textbox1.Text;
    outWords[1] = textBox2.Text;
    outWords[2] = textBox3.Text;
    outWords[3] = textBox4.Text;
    outWords[4] = textBox5.Text;
    outWords[5] = textBox6.Text;
    outWords[6] = textBox7.Text;
    outWords[7] = textBox8.Text;
    outWords[8] = textBox9.Text;
    outWords[9] = textBox10.Text;

    sortAndPrint(outWords[11]);
}

private void sortAndPrint(params string[] newWords)
{
    Array.Sort(newWords);

    label1.Text = newWords[0];
    label2.Text = newWords[1];
    label3.Text = newWords[2];
    label4.Text = newWords[3];
    label5.Text = newWords[4];
    label6.Text = newWords[5];
    label7.Text = newWords[6];
    label8.Text = newWords[7];
    label9.Text = newWords[8];
    label10.Text = newWords[9];
}

我的问题是我要么在标签框中没有任何内容,要么因为无法将字符串转换为string[]System.IndexOutOfRangeException而导致错误。我确定我在这里做了一些完全错误的事情。

3 个答案:

答案 0 :(得分:1)

试试这个:

private void button1_Click(object sender, EventArgs e)
{
    string[] outWords = new string[10];

    outWords[0] = textbox1.Text;
    outWords[1] = textBox2.Text;
    outWords[2] = textBox3.Text;
    outWords[3] = textBox4.Text;
    outWords[4] = textBox5.Text;
    outWords[5] = textBox6.Text;
    outWords[6] = textBox7.Text;
    outWords[7] = textBox8.Text;
    outWords[8] = textBox9.Text;
    outWords[9] = textBox10.Text;

    sortAndPrint(outWords);

}

private void sortAndPrint(string[] newWords)
{
    Array.Sort(newWords);

    label1.Text = newWords[0];
    label2.Text = newWords[1];
    label3.Text = newWords[2];
    label4.Text = newWords[3];
    label5.Text = newWords[4];
    label6.Text = newWords[5];
    label7.Text = newWords[6];
    label8.Text = newWords[7];
    label9.Text = newWords[8];
    label10.Text = newWords[9];
}

<强>摘要

传递整个数组sortAndPrint(outWords);而非单个元素。

仅根据您的需要获取数组长度。 string[] outWords = new string[10];

请检查this question以查看params的使用情况。您需要在用户param时传递值,但如果您需要传递变量,则必须删除params

参数的例子

private void button1_Click(object sender, EventArgs e)
{
    sortAndPrint("one","two","three","four","five");
}

private void sortAndPrint(params string[] newWords)
{
    Array.Sort(newWords);

    label1.Text = newWords[0];
    label2.Text = newWords[1];
    label3.Text = newWords[2];
    label4.Text = newWords[3];
    label5.Text = newWords[4];
}

答案 1 :(得分:0)

sortAndPrint(outWords[11]);

会将单个字符串(作为数组)传递给sortAndPrint,因此当您致电时

label2.Text = newWords[1];

你得到一个越界异常。试试吧

sortAndPrint(outWords);

传递整个数组。另请注意,数组中的空插槽将在其他字符串之前进行排序,因此您需要找到一种方法来删除空/空字符串。

或者,如果目的是演示如何使用params,您可以执行以下操作:

sortAndPrint(textbox1.Text, 
             textbox2.Text,  
             textbox3.Text,  
             textbox4.Text,  
             textbox5.Text);

但是你需要在sortAndPrint中检查数组的边界,而不是假设数组的大小至少为10.

答案 2 :(得分:0)

如果您仔细阅读说明,则有此要求:

  

...包含一个接受任意数量单词的方法......

您可以使用$(document).ready(function () { $('#button1').on('click', function(event) { Button1_Click(event); }); }); function Button1_Click(event) { var container = $('.container'); var containerChildren = $(container).children(); var containerChildrenCount = $(containerChildren).length; var inputId = 'fileInput[' + containerChildrenCount + ']'; $('.container').append('<input id="' + inputId + '" type="file" />'); $('#' + inputId).trigger('click'); } 关键字和params来完成此操作。

  

...并按字母顺序对它们进行排序。

您使用string[]

执行此部分
  

使用一个,两个,五个或十个单词调用方法时,证明程序正常工作

这部分你没有做 - 你在代码中假设输入数组有10个项目,而你应该在输出结果之前检查它有多少项。

由于该方法无法确定数组大小,因此无法假设表单上有足够的标签来填充结果。鉴于此,我们可以使用Array.Sort(newWords);来显示结果,我们可以使用MessageBoxString.Join字符加入数组中的所有项目,以便显示已排序的字词在不同的行:

Environment.NewLine

现在,我们可以通过向其传递不同数量的参数来演示此函数的使用。

首先,我们在同一页面上,我在private void SortAndPrint(params string[] newWords) { Array.Sort(newWords); MessageBox.Show(string.Join(Environment.NewLine, newWords)); } 方法中添加了10个文本框中的代码,所有文本框都带有“输入”标记:

Form_Load

现在,在我们的按钮点击事件中,我们可以搜索表单上具有private void Form1_Load(object sender, EventArgs e) { var stdHeight = 20; var stdWidth = 100; var stdPad = 10; var count = 10; for (int i = 0; i < count; i++) { var textBox = new TextBox { Name = "textBox" + (i + 1), Left = stdPad, Width = stdWidth, Height = stdHeight, Top = (stdHeight + stdPad) * i + stdPad, Tag = "input" }; Controls.Add(textBox); } } 且其Tag == "input"属性不为空的所有控件,并且我们可以传递这些.Text我们的方法的值作为单个数组 OR 作为单个项目:

Text