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

时间:2016-01-30 05:21:42

标签: c# if-statement

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


    }
}

}

4 个答案:

答案 0 :(得分:3)

虽然在英语中说&#34;如果值大于x或小于y&#34;这是有意义的,这对代码没有意义 - 编译器在推断你使用同一个变量时非常糟糕在这种情况下。

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

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

同样,虽然我们可以写&#34; min&lt; x&lt; MAX&#34;在大多数数学形式中,这对C#没有意义,因为它只能用两个输入执行操作。因此,第一个运算符将查看minx并输出一个bool,但第二个<将查看该bool和max,从而产生错误。< / p>

另外,正如特拉维斯指出的那样,不要在条件之后使用; - 正如方法声明不需要它们一样,阻止声明也不是。但要小心,因为这会产生一种奇怪的微妙之处并且会抛出一个编译错误编辑在一个if块上 - 它会...仍然会在else上抛出错误,因为它不再与if配对

答案 1 :(得分:1)

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

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

答案 2 :(得分:1)

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

像这样的if语句的问题是你可以轻易地使逻辑编码错误。像这样:

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

注意if是miss-typed,永远不会是真的。这种错误很容易实现。

这是一个对你来说应该更健壮的替代方案。

    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"和&amp; "F".Select选择实际成绩,.First选择学生达到截止日期的第一年级。因此,得分75的成绩为"C"

答案 3 :(得分:0)

我已经纠正了代码:

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";
        }


    }

错误是:你使用了&#34 ;;&#34;在每个if语句中,这是错误的。 除此之外,你必须在&amp;&amp;和&amp;&amp;在if语句中。 跳,我的回复对你有用。