![](/img/trans.png)
[英]Can't get my insensitive user login function to work, what am I doing wrong? Xamarin forms
[英]Can't get nested IF's to work properly in C#. What am I doing wrong?
我到底在做什么错? 我不确定if条件中的“ &&”是引起问题的原因还是其他原因。 在每个“ if”的条件的“> =”部分下方,都有一个红色标记。 有人可以告诉我如何解决这个问题吗?
static void Main(string[] args)
{
Int32 pointsEarned;
string firstName;
string lastName;
Int32 percentageGrade;
Console.WriteLine("Enter the student's first name.");
firstName = Console.ReadLine();
Console.WriteLine("Enter the student's last name.");
lastName = Console.ReadLine();
Console.WriteLine("Enter the amount of points earned.");
pointsEarned = int.Parse(Console.ReadLine());
percentageGrade = pointsEarned / 1000;
if (percentageGrade <=100 && >= 90);
{
string finalGrade = "A";
}
else if (percentageGrade <=89 && >= 80 );
{
string finalGrade = "B";
}
else if (percentageGrade <= 79 && >= 70);
{
string finalGrade = "C";
}
else if (percentageGrade <= 69 && >= 60);
{
string finalGrade = "D";
}
else if (percentageGrade <= 59 && >= 0);
{
string finalGrade = "F";
}
}
}
}
虽然用英语说“如果值大于x或小于y”是有意义的,但是这对代码没有意义-在这种情况下,编译器很难推断出您使用相同的变量。
相反,您必须重新打印要测试的变量:
if(percentageGrade <= 100 && percentageGrade >= 90)
类似地,尽管我们可以在大多数数学形式中编写“ min <x <max”,但对于C#而言,这是没有意义的,因为它只能执行两个输入的运算。 因此,第一个运算符将查看min
和x
并输出一个布尔值,但是第二个<
运算符将查看该bool和max
,从而产生错误。
而且,正如Travis指出的那样,请勿使用;
条件之后-就像方法声明不需要它们一样,块声明也不需要。 但是要小心,因为这会产生奇怪的微妙之处,并且不会引发编译错误EDIT在单个if
块上-它仍然会在else
上引发错误,因为它不再与if
配对
从条件行中删除分号,并提供不等式的两面:
if (percentageGrade <=100 && percentageGrade >= 90)
我并不是将其发布为该问题的直接答案,但我认为可能值得发布比使用一系列if语句更强大的解决方案。
此类if语句的问题在于,您很容易犯逻辑编码错误。 像这样:
else if (percentageGrade <= 59 && percentageGrade>= 60)
{
finalGrade = "D";
}
请注意,if是错误类型的,永远不能为真。 这种错误很容易造成。
这是对您来说应该更健壮的替代方案。
var grades = new []
{
new { grade = "A", cutoff = 90 },
new { grade = "B", cutoff = 80 },
new { grade = "C", cutoff = 70 },
new { grade = "D", cutoff = 60 },
new { grade = "F", cutoff = 0 },
};
string finalGrade =
grades
.Where(g => percentageGrade >= g.cutoff)
.Select(g => g.grade)
.First();
这将创建一个“表格”等级及其截止分数。 .Where
子句仅过滤学生达到临界线的那些年级的列表。 因此,分数75
仅包括"C"
, "D"
和"F"
。 .Select
选择实际成绩,而.First
选择学生达到.First
的第一年级。 因此,如果分数为75
,则其得分为"C"
。
我已更正代码:
static void Main(string[] args)
{
Int32 pointsEarned;
string firstName;
string lastName;
Int32 percentageGrade;
Console.WriteLine("Enter the student's first name.");
firstName = Console.ReadLine();
Console.WriteLine("Enter the student's last name.");
lastName = Console.ReadLine();
Console.WriteLine("Enter the amount of points earned.");
pointsEarned = int.Parse(Console.ReadLine());
percentageGrade = pointsEarned / 1000;
if (percentageGrade <=100 && percentageGrade>= 90)
{
string finalGrade = "A";
}
else if (percentageGrade <=89 && percentageGrade>= 80 )
{
string finalGrade = "B";
}
else if (percentageGrade <= 79 && percentageGrade>= 70)
{
string finalGrade = "C";
}
else if (percentageGrade <= 69 && percentageGrade>= 60)
{
string finalGrade = "D";
}
else if (percentageGrade <= 59 && percentageGrade >= 0)
{
string finalGrade = "F";
}
}
错误是:您使用了“;” 在每个if语句中,这是错误的。 除此之外,您还必须在if语句中&&之后将变量名用于其他条件。 跳,我的回复将对您有用。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.