C#(CSharp)入门教程

目录

C#的第一个程序

变量 

折叠代码 

变量类型和声明变量 

获取变量类型所占内存空间(sizeof) 

常量 

转义字符 

隐式转换 

显示转换 

异常捕获 

运算符 

算术运算符 

布尔逻辑运算符

关系运算符 

位运算符 

其他运算符 

字符串拼接 

条件分支语句 

if...else 语句

switch语句 

循环语句 

while语句 

do while语句 (使用较少)

for循环 (最常用)

补充内容 

随机数 


C#的第一个程序

 因为笔者学习过Java,所以个人感觉C#上手起来很快,很多都是java中学习过的,所以不再赘述。该系列文章主要是分享给有一定编程经验的小伙伴,但是又想要学习C#的来使用,零基础的可能会比较吃力,所以酌情使用。

using System;namespace CSharp入门_第一个程序
{class Program{static void Main(string[] args){//使用Console调用方法Console.WriteLine("Hello World");//WriteLine方法会自动空一行(换行)//使用Write则不会换行Console.WriteLine("我爱敲代码");//输出Console.Write("你好!");Console.Write("世界");//Console.ReadKey();//需要使用该语句,不然控制台会一闪而过,或者只执行不调试也可以Console.WriteLine("请玩家输入名字:");//C#的输入Console.ReadLine();//玩家输入完毕Console.Write("玩家输入完毕!请开始游戏吧!");//这里注意!不使用ReadKey是会直接闪过控制台的,所以我们还是可以使用Ctrl+F5}}
}

需要特别注意的是向控制台输入内容:

//向控制台输入信息
Console.ReadLine();
//判断是否按键,只有玩家按键了才会结束(可以用来防止跳过控制台显示)
Console.ReadKey();

变量 

折叠代码 

using System;namespace CSharp入门_变量
{class Program{static void Main(string[] args){Console.WriteLine("变量");//1、折叠代码(防止代码过于凌乱)输入#region按下tab自动补全#region  声明变量#endregion}}
}

点击-号后我们可以看到中间部分进行了折叠:

变量类型和声明变量 

using System;namespace CSharp入门_变量
{class Program{static void Main(string[] args){Console.WriteLine("变量");//1、折叠代码(防止代码过于凌乱)输入#region按下tab自动补全#region  声明变量//有符号整型//sbytesbyte i = 1;Console.WriteLine("i的值为" + i);//shortshort x = 2;Console.WriteLine("x的值为" + x);//intint y = 3;Console.WriteLine("y的值为" + y);//longlong z = 4;Console.WriteLine("z的值为" + z);//无符号整型//bytebyte a = 5;Console.WriteLine("a的值为" + a);//ushortushort b = 6;Console.WriteLine("b的值为" + b);//uintuint c = 7;Console.WriteLine("c的值为" + c);//ulongulong d = 8;Console.WriteLine("d的值为" + d);//浮点数(小数)//floatfloat f = 0.12f;Console.WriteLine("f的值为" + f);//doubledouble db = 0.223;Console.WriteLine("db的值为" + db);//decimldecimal dm = 0.123456789m;Console.WriteLine("dm的值为" + dm);//特殊类型//boolbool b1 = true;bool b2 = false;Console.WriteLine(b1 + "_" + b2);//char(字符)char ch = 'A';Console.WriteLine("ch的值为"+ch);//string(字符串)string str = "我要认认真真学CSharp";Console.WriteLine(str);#endregion}}
}

获取变量类型所占内存空间(sizeof) 

using System;namespace CSharp入门_变量
{class Program{static void Main(string[] args){Console.WriteLine("变量");//1、折叠代码(防止代码过于凌乱)输入#region按下tab自动补全#region  声明变量//有符号整型//sbytesbyte i = 1;Console.WriteLine("i的值为" + i);//shortshort x = 2;Console.WriteLine("x的值为" + x);//intint y = 3;Console.WriteLine("y的值为" + y);//longlong z = 4;Console.WriteLine("z的值为" + z);//无符号整型//bytebyte a = 5;Console.WriteLine("a的值为" + a);//ushortushort b = 6;Console.WriteLine("b的值为" + b);//uintuint c = 7;Console.WriteLine("c的值为" + c);//ulongulong d = 8;Console.WriteLine("d的值为" + d);//浮点数(小数)//floatfloat f = 0.12f;Console.WriteLine("f的值为" + f);//doubledouble db = 0.223;Console.WriteLine("db的值为" + db);//decimldecimal dm = 0.123456789m;Console.WriteLine("dm的值为" + dm);//特殊类型//boolbool b1 = true;bool b2 = false;Console.WriteLine(b1 + "_" + b2);//char(字符)char ch = 'A';Console.WriteLine("ch的值为"+ch);//string(字符串)string str = "我要认认真真学CSharp";Console.WriteLine(str);#endregionint sbyteSize = sizeof(sbyte);Console.WriteLine("sbyte所占的字节数为:" + sbyteSize);int shortSize = sizeof(short);Console.WriteLine("short所占的字节数为:" + shortSize);int intSize = sizeof(int);Console.WriteLine("int所占的字节数为:" + intSize);int longSize = sizeof(long);Console.WriteLine("long所占的字节数为:" + longSize);Console.WriteLine("*********************************************");int byteSize = sizeof(byte);Console.WriteLine("byte所占的字节数为:" + byteSize);int uintSize = sizeof(uint);Console.WriteLine("uint所占的字节数为:" + uintSize);int ushortSize = sizeof(ushort);Console.WriteLine("ushort所占的字节数为:" + ushortSize);int ulongSize = sizeof(ulong);Console.WriteLine("ulong所占的字节数为:" + ulongSize);Console.WriteLine("*********************************************");int floatSize = sizeof(float);Console.WriteLine("float所占的字节数为:" + floatSize);int doubleSize = sizeof(double);Console.WriteLine("double所占的字节数为:" + doubleSize);int decimalSize = sizeof(decimal);Console.WriteLine("decimal所占的字节数为:" + decimalSize);Console.WriteLine("*********************************************");int boolSize = sizeof(bool);Console.WriteLine("bool所占的字节数为:" + boolSize);int charSize = sizeof(char);Console.WriteLine("char所占的字节数为:" + charSize);}}
}

常量 

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;namespace CSharp入门_常量
{class Program{static void Main(string[] args){Console.WriteLine("常量");//常量使用关键字constconst int c = 1;Console.WriteLine("c的值为"+c);//常量特点:必须初始化,不可以更改//使用常量的场景:声明一些常用的不变的量,如π}}
}

转义字符 

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;namespace CSharp入门_转义字符
{class Program{static void Main(string[] args){Console.WriteLine("转义字符");/** 转义字符的使用*///单引号   \'string str1 = "\'哈哈哈\'";Console.WriteLine("str1 = "+str1);//双引号 \"string str2 = "\"CSharp太好学啦!\"";Console.WriteLine("str2 = " + str2);//换行  \nstring str3 = "\"CSharp\n太好学啦!\"";Console.WriteLine("str3 = " + str3);//斜杠 \\string str4 = "\"CSharp\\太好学啦!\"";Console.WriteLine("str4 = " + str4);/** 下面的是不太常用的转义字符* *///制表符 \t (空一个tab键)string str5 = "我要好好学\t编程";Console.WriteLine("str5 = " + str5);//光标退格  \b  (光标退一格进行覆盖)string str6 = "我要好好学\b编程";Console.WriteLine("str6 = " + str6);//警报音  \a   这里会有个警报音响起string str7 = "\a";Console.WriteLine(str7);/*取消转义字符  使用@*/string str8 = @"\n\\";Console.WriteLine("str8 = "+str8);}}
}

隐式转换 

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;namespace CSharp入门_隐式转换
{class Program{static void Main(string[] args){Console.WriteLine("隐式转换");//大范围装小范围,记住这个就可以long L = 5;int i = 1;L = i;Console.WriteLine("L = "+L);//一般都是这个规律,但是浮点型中decimal不能隐式转换为float和double//特殊类型如bool,char,string之间不存在隐式转换,但是char可以隐式转换为整数//(因为char取值范围是0-65535,其对应的数字 其实是一个ascll码,一个数字就是一个对应关系)//无符号的不能装有符号的,但是有符号的可以装无符号的,因为无符号数没有负数,而有符号数则有负数//即有符号数不能隐式转换为无符号数,无符号数可以隐式转换为有符号数(要注意范围是涵盖的,大装小)uint ui = 4;L = ui;Console.WriteLine("L = " +L );//浮点数可以装任何类型的 整型float f = L;Console.WriteLine("f = " + f);//总结://double一>f1oat一>所有整形(无符号、有符号)//decimal一>所有整形(无符号、有符号)//整数不能去装浮点数:浮点数不能隐式转换为整数//总结隐式转换规则//高精度(大范围)装低精度(小范围)//double一 > f1oat一 > 整数(无符号、有符号)一 > char//decimal一 > 整数(无符号、有符号)一 > char//string和boo1不参与隐式转换规则的}}
}

显示转换 

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;namespace CSharp入门_显示转换
{class Program{static void Main(string[] args){Console.WriteLine("显示转换");//1、强制类型转换  将高精度类型强制转换为低精度类型//语法:变量类型 变量名 = (强转的类型)变量;//需要注意:精度和范围short st = 1;int i = 5;st = (short)i;Console.WriteLine("st的值为:" + st);//如果我们范围超过就会出问题short so = 2;int x = 40000;so = (short)x;Console.WriteLine("so的值为:" + so);//注意:在强制类型转换的时候一定要注意范围,在强制转换浮点型的时候会出现精度变低的情况,要注意//浮点数强转成整形时会直接抛弃掉小数点后面的小数double b = 1.5999999;i = (int)b;Console.WriteLine("i的值为:" + i);//2、Parse转换 (将字符串类型转换为对应的类型)字符串必须能够转换为对应类型,不然会报错,还有范围//语法:变量类型.Parse("字符串");int i2 = int.Parse("123");Console.WriteLine("i2的值为:" + i2);//3、Convert转换//作用://更准确的将各个类型之间进行相互转换//语法:Convert.To目标类型(变量或常量)//注意:填写的变量或常量必须正确否则出错int i3 = Convert.ToInt32("1234");Console.WriteLine("i3的值为:" + i3);//Convert转换时会四舍五入,精度比强制类型转换高i3 = Convert.ToInt32(1.688f);Console.WriteLine("i3的值为:" + i3);//对于bool也可以转化为inti3 = Convert.ToInt32(true);Console.WriteLine("i3的值为:" + i3);i3 = Convert.ToInt32(false);Console.WriteLine("i3的值为:" + i3);float f1 = Convert.ToSingle(12.5);bool b1 = Convert.ToBoolean("true");//4、其他类型转string//变量.ToString();String str3 = 1.ToString();Console.WriteLine("str3的值为:" + str3);String str4 = 1.5f.ToString();Console.WriteLine("str4的值为:" + str4);Console.WriteLine("666"+1 +true);//相对于每个都调用了tostring}}
}

异常捕获 

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;namespace CSharp入门_异常捕获
{class Program{static void Main(string[] args){Console.WriteLine("异常捕获");#region 作用//异常捕获作用:避免代码错误造成程序卡死//string str = Console.ReadLine();// int i = int.Parse(str);//比如这里的str如果输入的范围大于int就会卡死#endregion#region 语法try{//希望进行异常捕获的代码块//如果try中的代码块出现异常就进入catch}catch(Exception e)//可以通过e得到具体的报错信息(可以不写){//如果异常进行的动作}finally//可选{//不管有没有出错,都会执行其中的代码}#endregion#region 测试try{string str2 = Console.ReadLine();int i2= int.Parse(str2);Console.WriteLine(i2);}catch {Console.WriteLine("请输入合法的数字!");}finally{Console.WriteLine("执行完毕!");}#endregion}}
}

如果输入不合法:

运算符 

算术运算符 

一元运算符描述实例
++增量运算符++a 输出 11
--减量运算符--a 输出 9
+一元加运算符+a 输出 10
-一元减运算符-a 输出 -10
二元运算符描述实例
*乘法运算符a * b 输出 200
/除法运算符b / a 输出 2
%余数运算符b % a 输出 0
+加法运算符b + a 输出 30
-减法运算符b - a 输出 10

布尔逻辑运算符

布尔运算符描述实例
!逻辑非运算符!a 为 False
&逻辑与运算符a & b 为 False
|逻辑或运算符a | b 为 True
^逻辑异或运算符a ^ b 为 True
&&条件逻辑与运算符a && b 为 False
||条件逻辑或运算符a || b 为 True

关系运算符 

位运算符 

位运算符描述实例
~按位求补运算符~a 等于 -2
<<左移位运算符a << 2 等于 4
>>右移位运算符a >> 2 等于 0
>>>无符号右移运算符a >>> 2 等于 0
&逻辑与运算符a & b 等于 0
^逻辑异或运算符a ^ b 等于 3
|逻辑或运算符a | b 等于 3

其他运算符 

字符串拼接 

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;namespace CSharp入门_字符串拼接
{class Program{static void Main(string[] args){Console.WriteLine("字符串拼接");//1、用+号进行字符串拼接string str = "123";Console.WriteLine(str+"456");str = str + 1;Console.WriteLine(str);str = "123";str += "1" + 4 + true;Console.WriteLine(str);str += 1 + 2 + 3 + 4;Console.WriteLine(str);str += "" + 1 + 2 + 3;Console.WriteLine(str);//2、使用string.Format();//string.Format("待拼接的内容",内容1,内容2,.....)//拼接内容中的固定规则//想要被拼接的内容用占位符替代{数字}数字:n依次往后string str3;str3 = string.Format("我爱{0}, 我今年{1}岁, 我想好好学习{2}", "学习",18, "C#");Console.WriteLine(str3);str3 = string.Format("{0}{1}{2}", 1, true, false);Console.WriteLine(str3);//3、控制台打印Console.WriteLine("A{0}B{1}C{2}", 1, true, false);//注意:后面的内容可以比前面多,但是不能比前面少,否则会报错,还有占位符数字要从0开始}}
}

条件分支语句 

if...else 语句

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;namespace CSharp入门_条件分支语句
{class Program{static void Main(string[] args){Console.WriteLine("条件分支语句");//if语句int i = 0;int flag = 0;if (flag == 0){i = 100;flag = 1;}Console.WriteLine(i);//if...elseif (flag == 1){i = 200;}else{i = 1;}Console.WriteLine(i);//再举一个Console.WriteLine("请输入性别:"+"输入男或者女");string sex = Console.ReadLine();if (sex == "男"){Console.WriteLine("我是男生");}else{Console.WriteLine("我是女生");}}}
}

switch语句 

            //switch语句int a = 3;switch (a){case 1: //条件只能是常量Console.WriteLine("a = 1");break;case 2:Console.WriteLine("a = 2");break;case 3:Console.WriteLine("a = 3");break;default:Console.WriteLine("什么条件都不满足,执行default语句");break;}//switch也支持自定义常量int b = 2;const int x = 2;switch (b){case 1: //条件只能是常量Console.WriteLine("b = 1");break;case x:Console.WriteLine("b = 2");break;case 3:Console.WriteLine("b = 3");break;default:Console.WriteLine("什么条件都不满足,执行default语句");break;}//同时需要注意的是switch会进行贯穿int c = 1;switch (c){case 1: //条件只能是常量case 2:case 3:Console.WriteLine("c = 3");  //C#的贯穿和java不一样,java的在case后面还可以进行执行语句,而C#后面只能像上述所写//贯穿到第一个break,所以结果是c = 3break;default:Console.WriteLine("什么条件都不满足,执行default语句");break;}

循环语句 

while语句 

写循环语句的时候一般要避免写死循环(条件一直为真) 还会造成程序卡死

但是有时候也会用到死循环

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;namespace CSharp入门_循环语句
{class Program{static void Main(string[] args){Console.WriteLine("循环语句");//while语句//while (true)//{//    Console.WriteLine("这是一个死循环");//}//巧用死循环string password = "123456";while (true){Console.WriteLine("请用户输入密码:");string str = Console.ReadLine();if (str == password){Console.WriteLine("登录成功!");break;}}}}
}

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;namespace CSharp入门_循环语句
{class Program{static void Main(string[] args){Console.WriteLine("循环语句");//while语句//while (true)//{//    Console.WriteLine("这是一个死循环");//}//巧用死循环string password = "123456";while (true){Console.WriteLine("请用户输入密码:");string str = Console.ReadLine();if (str == password){Console.WriteLine("登录成功!");break;//跳出循环}}int i = 0;while (i < 10){i++;}Console.WriteLine("i = "+i);}}
}

         //打印1到20之间的奇数int index = 0;while (index < 20){++index;//什么样的数是奇数//不能被2整除的数一>%if (index % 2 == 0)continue;  //回到循环开始,继续执行Console.WriteLine(index);}

do while语句 (使用较少)

do while语句和while的不同在于do while是先执行一次再进行判断,其他基本一致。

          int a = 0;do{a++;} while (a<5);Console.WriteLine(a);//如果使用while的话这里的a就变成4了

需要注意一点的是:continue在该语句中使用的时候是跳转到while进行判断,而不是从上到下 

for循环 (最常用)

for循环特别适合在某个范围内进行取值的操作,一般while能做的,for循环都可以做

            for (int p = 0; p < 10; p++){Console.WriteLine(p);}//for (; ; )//{//    Console.WriteLine("for循环的死循环");//}int i ;for (i = 0; i < 10; i++){for(int j = 0; j < 10; j++){Console.WriteLine(i+"_"+j);}}

补充内容 

//输入一个键并赋值
char c = Console.ReadKey().KeyChar;
//输入一个键并赋值 且不在控制台显示
char c = Console.ReadKey(true).KeyChar;
//清除控制台
Console.Clear();
//设置光标位置 控制台左上角为0,0 右侧是x正方向 下方是y正方向
Console.SetCursorPosition(10,5);
//设置文字颜色
Console.ForegroundColor = ConsoleColor.Red;
//设置背景色 配合Clear使用 填充窗口颜色
Console.BackgroundColor = ConsoleColor.White;
Console.Clear();
//光标显隐
Console.CursorVisible = false;
//关闭控制台
Environment.Exit(0);

随机数 

 

好了,C#(CSharp)入门教程到这里就基本结束了,全程都由本人在线学习进行敲的代码,可以直接拿来实验,多敲代码,才能掌握的更好哈!加油,接着学!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/145693.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

Spring实例化源码解析之ComponentScanAnnotationParser(四)

上一章我们分析了ConfigurationClassParser&#xff0c;配置类的解析源码分析。在ComponentScans和ComponentScan注解修饰的候选配置类的解析过程中&#xff0c;我们需要深入的了解一下ComponentScanAnnotationParser的parse执行流程&#xff0c;SpringBoot启动类为什么这么写&…

MySQL体系结构和四层架构介绍

MySQL体系结构图如下&#xff1a; 四层介绍 1. 连接层&#xff1a; 它的主要功能是处理客户端与MySQL服务器之间的连接(比如Java应用程序通过JDBC连接MySQL)。当客户端应用程序连接到MySQL服务器时&#xff0c;连接层对用户进行身份验证、建立安全连接并管理会话状态。它还处理…

企业级磁盘阵列存储系统由硬到软全析

企业级磁盘阵列是由一组设备构成的存储系统,主要包括两种类型的设备,分别是控制器和扩展柜,其中控制器只有一台,扩展柜可以没有,也可以有多台。在EMC的Unity中分别称为DPE(Disk Processor Enclosure)和DAE(Disk Array Enclosure),在华为的OceanStor里面称为控制框和硬…

k8s搭建EFK日志系统

搭建 EFK 日志系统 前面大家介绍了 Kubernetes 集群中的几种日志收集方案&#xff0c;Kubernetes 中比较流行的日志收集解决方案是 Elasticsearch、Fluentd 和 Kibana&#xff08;EFK&#xff09;技术栈&#xff0c;也是官方现在比较推荐的一种方案。 Elasticsearch 是一个实…

chrome插件-入门

chrome插件的作用 1、屏蔽网页上的广告&#xff0c;提高浏览速度和减少视觉干扰 2、捕捉和编辑网页截图 3、改善在社交媒体平台上的体验&#xff0c;例如提供额外的功能&#xff0c;或自定义外观和布局 4、网页翻译 5、保存和组织网页书签和笔记 6、管理日程安排&#xff0c;设…

Python 笔记06(Mysql数据库)

一 基础 1.1 安装 MySQL下载参考&#xff1a;MySQL8.0安装配置教程【超级详细图解】-CSDN博客 测试是否安装并正确配置环境变量&#xff1a; 1.2 查看服务器是否正常运行 1.3 显示数据库 show databases; 1.4 退出 exit 1.5 python 连接 1.6 查主机IP ipconfig

【RabbitMQ实战】07 3分钟部署一个RabbitMQ集群

一、集群的安装部署 我们还是利用docker来安装RabbitMQ集群。3分钟安装一个集群&#xff0c;开始。 前提条件&#xff0c;docker安装了docker-compose。如果没安装的话&#xff0c;参考这里 docker-compose文件参考bitnami官网&#xff1a;https://github.com/bitnami/contai…

一道签到题目 签到.zip

一道签到题目 https://www.xuenixiang.com/ctfexercise-competition-589.html 下载附件&#xff1a;签到.zip双击打开zip包。 进行base64转换 在线 Unicode 编码转换 | 菜鸟工具 (runoob.com) 获得压缩包密码&#xff1a;haishi 文字倒序工具,在线文字倒序 (qqxiuzi.cn)

vue下载在前端存放的pdf文件

vue下载在前端存放的pdf文件 注意&#xff0c;这里要在public文件夹中新建文件夹存放静态资源&#xff0c;不能在src文件夹中新建文件夹存放静态资源&#xff0c;因为public文件夹中的文件资源不会被npm run build打包编译。大家打包一下&#xff0c;就会发现 模板.pdf文件 是存…

C语言进阶---动态内存管理

动态内存管理 前言&#xff1a;一、为什么存在动态内存分配&#xff1f;二、动态内存函数的介绍1.数据在不同区域的储存&#xff1a;2、malloc和free3、calloc4、realloc 三、常见的动态内存错误1、对NULL指针的解引用操作2、对动态开辟空间的越界访问3、对非动态内存开辟的空间…

ASUS华硕ZenBook 13灵耀U 2代U3300F笔记本UX333FN/FA原装出厂Win10系统工厂安装模式

系统自带所有驱动、出厂主题壁纸、系统属性华硕专属LOGO标志、Office办公软件、MyASUS华硕电脑管家等预装程序 下载链接&#xff1a;https://pan.baidu.com/s/1dK0vMZMECPlT63Rb6-jeFg?pwdbym5 所需要工具&#xff1a;16G或以上的U盘(非必需) 文件格式&#xff1a;HDI,SWP,O…

CDH 6.3.2升级Flink到1.17.1版本

CDH&#xff1a;6.3.2 原来的Flink&#xff1a;1.12 要升级的Flink&#xff1a;1.17.1 操作系统&#xff1a;CentOS Linux 7 一、Flink1.17编译 build.sh文件&#xff1a; #!/bin/bash set -x set -e set -vFLINK_URLsed /^FLINK_URL/!d;s/.*// flink-parcel.properties FLI…

R | R及Rstudio安装、运行环境变量及RStudio配置

R | R及Rstudio安装、运行环境变量及RStudio配置 一、介绍1.1 R介绍1.2 RStudio介绍 二、R安装2.1 演示电脑系统2.2 R下载2.3 R安装2.4 R语言运行环境设置&#xff08;环境变量&#xff09;2.4.1 目的2.4.2 R-CMD测试2.4.3 设置环境变量 2.5 R安装测试 三、RStudio安装3.1 RStu…

vue 实现弹出菜单,解决鼠标点击其他区域的检测问题

弹出菜单应该具有的功能&#xff0c;当鼠标点击其他区域时&#xff0c;则关闭该菜单。 问题来了&#xff0c;怎么检测鼠标点击了其他区域而不是当前菜单&#xff1f; 百度“JS检测区域外的点击事件”&#xff0c;会发现有很多方法&#xff0c;有递归检测父元素&#xff0c;有遍…

【JavaEE初阶】 计算机是如何工作的

文章目录 &#x1f332;计算机发展史&#x1f38b;冯诺依曼体系&#xff08;Von Neumann Architecture&#xff09;&#x1f38d;CPU 基本工作流程&#x1f4cc;逻辑门&#x1f388;电子开关 —— 机械继电器(Mechanical Relay)&#x1f388;门电路(Gate Circuit)NOT GATE&…

【强化学习】基础概念

1. Agent (智能体) 智能体是进行决策和学习的实体&#xff0c;它能感知环境的状态&#xff0c;并基于策略采取动作以影响环境。智能体的目标是通过与环境的交互获得最大化的累积奖励。 2. Environment (环境) 环境是智能体所处的外部系统&#xff0c;它与智能体交互。环境的…

【数据结构-图】图介绍

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kuan 的首页,持续学…

高数:第二章:一元函数微分学

文章目录 一、导数与微分1.导数的概念(1)导数的定义(2)左右导数(3)定理&#xff1a;可导与左右导数的关系(4)可导三要素(5)用导数定义判断可导性 2.微分的概念(1)微分的定义(2)微分与可导的关系 3.导数与微分的几何意义(1)导数 f ′ ( x 0 ) f(x_0) f′(x0​)的几何意义&#x…

1.6.C++项目:仿mudou库实现并发服务器之channel模块的设计

项目完整版在&#xff1a; 文章目录 一、channel模块&#xff1a;事件管理Channel类实现二、提供的功能三、实现思想&#xff08;一&#xff09;功能&#xff08;二&#xff09;意义&#xff08;三&#xff09;功能设计 四、代码&#xff08;一&#xff09;框架&#xff08;二…

python监控ES索引数量变化

文章目录 1, datafram根据相同的key聚合2, 数据合并&#xff1a;获取采集10,20,30分钟es索引数据脚本测试验证 1, datafram根据相同的key聚合 # 创建df1 > json {key:A, value:1 } {key:B, value:2 } data1 {key: [A, B], value: [1, 2]} df1 pd.DataFrame(data1)# 创建d…