这是一项单一的任务,我遇到了部分问题。这是代码;
namespace Assignment_1
{
public partial class Classifier : System.Web.UI.Page // We are using a web form as stated
{
protected void Page_Load(object sender, EventArgs e) // No variables are initiated for the beginning
{
}
protected void ButtonClassify_Click(object sender, EventArgs e)
{
if (this.TextBox1.Text != "")
{
List<string> numbersText = this.TextBox1.Text.Split(',').ToList<string>();
foreach (var item in numbersText)
{
int num = int.Parse(item);
if (RadioButtonList1.SelectedValue == "Both")
{
if (num % 2 == 0)
{
if (CheckBoxDuplicate.Checked == true)
{
List<int> evenNumbers = new List<int>();
evenNumbers.Add(num);
List<int> distinctEvenNumbers = evenNumbers.Distinct().ToList();
ListBoxEvenNumbers.DataSource = distinctEvenNumbers;
}
else
{
//Put the results into the respective boxes
ListBoxEvenNumbers.Items.Add(num.ToString());
}
}
else
{
//Put the results into the respective boxes
ListBoxOddNumbers.Items.Add(num.ToString());
}
}
if (RadioButtonList1.SelectedValue == "Even")
{
if (num % 2 == 0)
{
//Put the results into the respective boxes
ListBoxEvenNumbers.Items.Add(num.ToString());
}
}
if (RadioButtonList1.SelectedValue == "Odd")
{
if (num % 2 == 1)
{
//Put the results into the respective boxes
ListBoxOddNumbers.Items.Add(num.ToString());
}
}
让我解释一下这个问题以及我所做的事情。用户将数字列表插入文本框,然后有3个选项(radiolistbutton)。他可以列出偶数,奇数或两种类型的数字。它们显示在偶数和奇数列表框中(2个列表框)。我已经完成了这一部分。
有一个复选框可以删除重复项,用户可以根据需要进行检查。如果选中该按钮,则代码应删除重复项。我试图在第4个&#34; if-else&#34; &#34; if(CheckBoxDuplicate.Checked == true)&#34;。我理解它的方式,我检查数字是否均匀,然后检查CheckboxDuplicate按钮。如果选中它,我将值放在一个新列表中,然后删除重复的值。然后放入EvenNumbers列表框。出于某种原因,这部分不起作用。
如果您想帮助我,请不要发布您的答案。这是我在C#中的第一个项目,我很难理解一个优雅的解决方案。如果你有时间,请检查我的代码,让我知道我犯了什么错误。感谢您提前的时间。
答案 0 :(得分:1)
在它上面撒上一些linq魔法,你就完成了。
var my_list = new List<int>{1,2,3,4,5,5,6,7};
var pair = my_list.Where (n => n%2 ==0); // 2,4,6
var odd = my_list.Where (n => n%2 ==1); // 1,3,5,5,7
var unique_pair = pair.Distinct(); // stays the same
var unique_odd = odd.Distinct(); // 1,3,5,7
从这里只是将它添加到适当的调用和GUI容器
根据您的评论,以下是一些事项:
if
更改为if - else if
,因为只会应用一个。{/ li>
这里有一些帮助,没有代码,因为我相信我已经覆盖了它。
第1步:获取用户输入,并创建一个int列表。 (称之为:input_list)。
第2步:根据他选择的内容(偶数,奇数,两者),您希望为每个列表框分配一个数字列表。看看我上面的代码,它会为你做的那一点
第3步:如果用户选择了唯一身份,则会将Distinct
列表传递给这些列表框,再次查看上面的代码。
如果您愿意,可以在选中复选框的情况下应用唯一。
注意:
将整数列表(input_list)保存为变量,因此无论何时更改其选择,您都不需要解析它。
答案 1 :(得分:-1)
public enum PairOddEnum
{
Evens,
Odds,
Both
}
public void BindControl(PairOddEnum type)
{
if (this.textBox1.Text != "")
{
List<string> numbersText = this.textBox1.Text.Split(',').ToList<string>();
var evens = numbersText.Where(t => int.Parse(t) % 2 == 0).Distinct();
var odds = numbersText.Where(t => int.Parse(t) % 2 == 1).Distinct();
if (type == PairOddEnum.Evens)
{
ListBoxEvenNumbers.DataSource = evens.ToList();
}
else if (type == PairOddEnum.Odds)
{
ListBoxOddNumbers.DataSource = odds.ToList();
}
else
{
ListBoxEvenNumbers.DataSource = evens.ToList();
ListBoxOddNumbers.DataSource = odds.ToList();
}
}
}
protected void ButtonClassify_Click(object sender, EventArgs e)
{
if (RadioButtonList1.SelectedValue == "Both")
{
BindControl(PairOddEnum.Both);
}
if (RadioButtonList1.SelectedValue == "Even")
{
BindControl(PairOddEnum.Evens);
}
if (RadioButtonList1.SelectedValue == "Odd")
{
BindControl(PairOddEnum.Odds);
}
}