无法让嵌套的 IF 在 C# 中正常工作.我做错了什么

本文关键字:工作 什么 错了 常工作 嵌套 IF | 更新日期: 2023-09-27 18:32:34

我到底做错了什么?我不确定 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";
        }

    }
}

}

无法让嵌套的 IF 在 C# 中正常工作.我做错了什么

虽然在

英语中说"如果值大于 x 或小于 y"是有意义的,但这对代码没有意义 - 在这种情况下,编译器在推断你使用相同的变量方面非常糟糕。

相反,您必须重新打印要测试的变量:

if(percentageGrade <= 100 && percentageGrade >= 90)

同样,虽然我们可以在大多数形式的数学中编写"min

此外,正如 Travis 所指出的,不要在条件后使用 ; - 就像方法声明不需要它们一样,块声明也不需要。但是要小心,因为这会产生一种奇怪的微妙之处,并且不会在单个if块上引发编译错误 EDIT - 它仍然会在else上抛出错误,因为它不再与if配对

从条件行中删除分号,并提供不等式的两边:

if (percentageGrade <=100 && percentageGrade >= 90)

我不是将其作为对问题的直接回答,但我认为发布比使用一系列 if 语句更强大的解决方案可能是值得的。

像这样的 if 语句的问题在于你很容易犯逻辑编码错误。像这样:

    else if (percentageGrade <= 59 && percentageGrade>= 60)
    {
        finalGrade = "D";
    }

请注意,if 键入错误,永远不会为 true。这种错误很容易犯。

这是一个替代方案,对您来说应该更强大一些。

    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子句仅筛选学生进入截止的成绩的列表。因此,min0的分数将只包括"C""D""F".Select选择实际成绩,.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语句中使用了";",这是错误的。除此之外,您必须在 &&in if 语句之后为另一个条件使用变量名。跳,我的回复对你有用。