簡體   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