在我的编程课程中,我们正在学习Arraylists和结构。我们得到了一个赋值,我们将在arraylist中存储结构的多个实例。 struct存储最大值和与该值对应的字母等级。例如,我创建一个名为F的结构。它的字母是F,它的最大值是299.假设我输入399进入程序。这应该返回C作为等级,但它返回F.我真的不确定是什么导致了这个问题。任何帮助将不胜感激。
namespace StructAssignment
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
ArrayList Grades = new ArrayList();
public struct Grade
{
public char letter;
public int maxPoints;
}
private void Form1_Load(object sender, EventArgs e)
{
Grade A;
A.letter = 'A';
A.maxPoints = 299;
Grades.Add(A);
Grade B;
B.letter = 'B';
B.maxPoints = 349;
Grades.Add(B);
Grade C;
C.letter = 'C';
C.maxPoints = 399;
Grades.Add(C);
Grade D;
D.letter = 'D';
D.maxPoints = 449;
Grades.Add(D);
Grade F;
F.letter = 'F';
F.maxPoints = 500;
Grades.Add(F);
}
private void button1_Click(object sender, EventArgs e)
{
string grade = string.Empty;
if(int.TryParse(textBox1.Text, out int points))
{
if(points < 0 || points > 500)
{
MessageBox.Show("Please enter a number greater than 0 and less than 500");
}
else
{
foreach(Grade gr in Grades)
{
if(points < gr.maxPoints)
{
grade = gr.letter.ToString();
}
}
MessageBox.Show(grade);
}
}
else
{
MessageBox.Show("Please enter a valid number!");
}
}
}
}
答案 0 :(得分:3)
我认为一旦条件为真,你需要打破循环。并且您应该使用<=
条件来匹配用户输入的确切数字。
foreach(Grade gr in Grades)
{
if(points <= gr.maxPoints)
{
grade = gr.letter.ToString();
break;
}
}
MessageBox.Show(grade);
答案 1 :(得分:0)
我很惊讶399的输入正在返回F;它的编码方式我希望D.你应该检查小于或等于,而不仅仅是小于。