[英]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.