[Day8]C# 鸡础观念- 如果没有如果,只有太多的如果switch陈述式

你是否曾经内心充满各种如果呢?
如果....我就....,
一组if已经满足不了你时,
那该如何是好呢?

Switch陈述式/images/emoticon/emoticon34.gif

  • 单凭if..else..只能处理一个条件,但Switch是专门用来处理多分支的语句
    Switch语句中的测试量可以是一个变数,也可以是一个表达式。程序一一测试case分支中的值,测试匹配到哪个分支中的值,就执行哪个分支中的语句。 每个分支都已break语句结束,叙述句一旦遇到break,就会结束整个语句。

范例:来玩玩我们小时候的猴子绕口令吧

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace CsharpDemo
{
    class Program
    {
        static void Main(string[] args)
        {
            //礼拜几
            string week = Console.ReadLine();

            //使用switch
            switch (week)
            {
                case "星期一":
                    Console.WriteLine("猴子穿新衣");
                    break;
                case "星期二":
                    Console.WriteLine("猴子肚子饿");
                    break;
                case "星期三":
                    Console.WriteLine("猴子去爬山");
                    break;
                case "星期四":
                    Console.WriteLine("猴子去考试");
                    break;
                case "星期五":
                    Console.WriteLine("猴子去跳舞");
                    break;
                case "星期六":
                    Console.WriteLine("猴子去斗六");
                    break;
                case "星期日":
                    Console.WriteLine("猴子过生日");
                    break;
            }
            
            Console.ReadKey();
        }
    }
  }

输入:

星期一

结果:

星期一
猴子穿新衣

输入:

星期二

结果:

星期二
猴子肚子饿

###随堂小练习/images/emoticon/emoticon79.gif

  • 还记的基姆拉尔森计算公式吗?我们今天来用switch实现吧
  • 这过程程序可能会复杂点,属於比较进阶的公式,有兴趣的朋友在研究就可以了
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace CsharpDemo
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("请输入年月日");
            int y = Convert.ToInt32(Console.ReadLine());
            int m = Convert.ToInt32(Console.ReadLine());
            int d = Convert.ToInt32(Console.ReadLine());
            int total = 365; //平年
            if ((y % 4 == 0 && y % 100 != 0) || y % 400 == 0)
                total = 366;
            switch (m)
            {
               case 1:
                    total -= 31;
                    goto case 2;
                case 2:
                    if ((y % 4 == 0 && y % 100 != 0) || y % 400 == 0) //闰年
                    {
                        total -= 29;
                    }
                    else
                    {
                        total -= 28;
                    }
                    goto case 3;
                case 3:
                    total -= 31;
                    goto case 4;
                case 4:
                    total -= 30;
                    goto case 5;
                case 5:
                    total -= 31;
                    goto case 6;
                case 6:
                    total -= 30;
                    goto case 7;
                case 7:
                    total -= 31;
                    goto case 8;
                case 8:
                    total -= 31;
                    goto case 9;
                case 9:
                    total -= 30;
                    goto case 10;
                case 10:
                    total -= 31;
                    goto case 11;
                case 11:
                    total -= 30;
                    goto case 12;
                case 12:
                    total -= 31;
                    goto default;
                default: total += d; break;
            }
            Console.WriteLine(m+"月"+d+"日是"+y+"年的第"+ total + "天");

            Console.ReadKey();
        }
    }
  }

输入

2021
09
09

结果:

请输入年月日
2021
09
09
9月9日是2021年的第252天

go to 可以指定要去的条件,如果一个条件之下要跑好几个分支就可以拿来做使用
在switch中的else,写作default

一千个如果...就...,只要一个switch就能把程序码排的整整齐齐的了,好啦大家明天见喽!


<<:  Day 4:要玩KMM,你需要一台Mac....还有很大很大的容量.

>>:  [Day9] Flutter - 按钮元件 ( Button )

提高广告单价的方式

广告的季节性 去年日本第一次开始封城时,刚好遇到三四月之间。 日本公司的会计年度很多是四月开始,三月...

Day 12- --save-dev

今天要来说昨天 --save-dev的部分。 昨天文章指路-->https://ithelp....

GCP 自动开关机

最近将案子上了 GCP 因为是小成本案子,如果一直让机器开机在上面跑,累积下来的金额应该很可怕 所以...

Security 是什麽酷东西啊

本篇要介绍的是读者在大四上学期所修的一门课,也因为这门课的关系我才开始接触网路安全以及 AIS3,如...

事件查看练习(一)--可忽略的错误

前前後後说了这多,从登录档到资料夹意义,系统权限到事件纪录日志,今天要来实际测试怎麽解决问题,就以笔...