在寫程式時你會遇到「如果
這樣的話執行這一段,否則
則進行另一段」的狀況,就像下圖
寫法如下:
if(條件成立)
{
程式A;
}
else
{
程式B;
}
我們接下來將會透過三個題目來說明if-else
題目一:if-else怎麼用?----輸入x跟y,輸出比較大的數
題目二:不只一個條件要判斷怎麼辦?----賣場周年慶折扣
題目三:if裡面可以包if嗎?----男女標準體重計算
int x, y, answer;
Console.Write("請輸入x =");//show出請輸入的字串
x = Convert.ToInt32(Console.ReadLine());//讀入輸入的數字(此時為字串)並轉型成int
Console.Write("請輸入y =");
y = Convert.ToInt32(Console.ReadLine());
if (x > y)
{
answer = x;
}
else
{
answer = y;
}
Console.Write("較大者為 = {0}", answer);
Console.ReadKey();//避免視窗關掉看不到結果
欸可是這樣第一個判斷完其實就知道第二個的結果啦,else好像有一點點多餘的感覺?
是的,所以只有兩種結果的狀況你其實不一定要寫出else
解法二:
思考邏輯→我先把答案指定為其中一個數,如果比答案大就把答案換成大的數
int x, y, answer;
Console.Write("請輸入x =");
x = Convert.ToInt32(Console.ReadLine());
Console.Write("請輸入y =");
y = Convert.ToInt32(Console.ReadLine());
answer = x;
if (answer < y)
{
answer = y;
}
Console.Write("較大者為 = {0}", answer);
Console.ReadKey();
還有還有~還記得三元運算子?:
嗎?輸出只有兩種結果的狀況也很適合使用喔~
解法三:
int x, y, answer;
Console.Write("請輸入x =");
x = Convert.ToInt32(Console.ReadLine());
Console.Write("請輸入y =");
y = Convert.ToInt32(Console.ReadLine());
answer = (x > y) ? x : y;
Console.Write("較大者為 = {0}", answer);
Console.ReadKey();
不只要進行一個條件判斷時,寫法為
if(條件一成立)
{
程式A;//條件一成立執行A
}
else if(條件二成立)
{
程式B;//條件一不成立且條件二成立,執行B
}
else
{
程式C;//上面都不成立,執行C
}
解法一:
double discount;
Console.Write("請輸入購買金額 =");
int price = Convert.ToInt32(Console.ReadLine());//將讀入的值轉成int
if(price >= 10000){//先進行第一個判斷是否大於10000,如果有的話進入這個括號內的程式
Console.WriteLine("恭喜享有7折優惠");
discount = 0.7;//折扣數7折
}
else if (price >= 5000)
{
Console.WriteLine("恭喜享有8折優惠");//如果不符合>10000,則進行這一個判斷。因為要判斷不只兩次,用else if陳述
discount = 0.8;//折扣數8折
}
else if (price >= 1000)
{
Console.WriteLine("恭喜享有9折優惠");//上面兩個都不符合,進行這一個條件判斷,也是用else if寫
discount = 0.9;//折扣數9折
}
else {
Console.WriteLine("金額不足,沒有優惠喔");//以上都不符合,則執行else內的程式碼
discount = 1;//無折扣
}
Console.WriteLine("折扣後金額為 = {0}", Math.Round(discount * price));//算出折扣總金額,注意台灣沒有小數點的金額,Math.Round在後方介紹
Console.ReadKey();//防止程式關閉
這裡要特別注意順序
,下方的解法你會發現只要輸入大於1000,怎麼樣都只有9折,因為在第一個條件就符合了~當然不會跑到其他if囉~
錯誤
解法(對!我曾經這麼寫過QQ)
double discount;
Console.Write("請輸入購買金額 =");
int price = Convert.ToInt32(Console.ReadLine());
if (price >= 1000)
{
Console.WriteLine("恭喜享有9折優惠");
discount = 0.9;
}
else if (price >5000)
{
Console.WriteLine("恭喜享有8折優惠");
discount = 0.8;
}
else if (price >10000)
{
Console.WriteLine("恭喜享有7折優惠");
discount = 0.7;
}
else
{
Console.WriteLine("金額不足,沒有優惠喔");
discount = 1;
}
Console.WriteLine("折扣後金額為 = {0}", Math.Round(discount * price));
Console.ReadKey();
補充:
Math.Round():將值四捨五入為最接近的整數或是指定的小數位數。
Math.Round(值):將值四捨五入為最接近的整數
Math.Round(值,小數位數):將值四捨五入為指定的小數位數
當然可以囉~判斷完一個再判斷另一個也是很常見的,就像是人生一樣複雜(欸)
解法參考
思考邏輯:
程式碼
string gender;
double waist;
Console.Write("請輸入性別(M/F) =");
gender = Console.ReadLine();//讀入輸入的值,因為是要把值(字串)放入字串內,所以不用轉型
Console.Write("請輸入腰圍 =");
waist = Convert.ToDouble(Console.ReadLine());//讀入輸入的值,因為是要把值(字串)放入double內,所以要轉型
if (gender == "M")//如果是男的走這個{}
{
if (waist > 90)//是男的且腰圍大於90是這個{}
{
Console.WriteLine("男生腰圍超過90就過胖囉");
}
else//是男的且腰圍不大於90是這個{}
{
Console.WriteLine("男生這腰圍還行,記得不要超過90喔~");
}
}
else//如果是女的走這個{}
{
if (waist > 80)//是女的且腰圍大於80是這個{}
{
Console.WriteLine("女生腰圍超過80就過胖囉");
}
else//是女的且腰圍不大於80是這個{}
{
Console.WriteLine("女生這腰圍還行,記得不要超過80喔~");
}
}
Console.ReadKey();//避免視窗關閉
這就是兩個if的用法~同一層是同一組if 跟else,看到了嗎~當用到巢狀寫法(一層包一層),這時縮排的重要性就非常重要了!
巢狀寫法
當然最後這題也可以使用&&並搭配if else if else的寫法寫出來,你可以自己試試看唷~
有任何問題都歡迎大大們跟我討論~我會修改文章或是補充在回覆der~
根據條件判斷的部分,還有另一個switch好朋友可以使用喔~switch請見第下一篇~
由小寫到大那邊,應該不需要用到&& XDDD
if (price < 1000)
{
Console.WriteLine("金額不足,沒有優惠喔");
}
else if (price < 5000)
{
Console.WriteLine("恭喜享有9折優惠");
}
else if (price < 10000)
{
Console.WriteLine("恭喜享有8折優惠");
}
else
{
Console.WriteLine("恭喜享有7折優惠");
}
阿哈哈哈哈哈哈哈哈哈哈我那時候一定是想睡覺QQ,我想表達的是另一個啦嗚嗚嗚嗚嗚~已修改~感謝大大XDD