繁体   English   中英

无法获得嵌套的IF在C#中正常工作。 我究竟做错了什么?

[英]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#而言,这是没有意义的,因为它只能执行两个输入的运算。 因此,第一个运算符将查看minx并输出一个布尔值,但是第二个<运算符将查看该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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM