当前位置: 首页 > news >正文

Flutter 组件抽取:日期(DatePicker)、时间(TimePicker)弹窗选择器【仿照】

简介

仿照《Flutter 仿ios自定义一个DatePicker》实行的日期弹窗选择器(DatePicker)、时间弹窗选择器(TimePicker)

效果

在这里插入图片描述

范例

class _TestPageState extends State<TestPage> {void initState() {super.initState();}Widget build(BuildContext context) {return Scaffold(appBar: AppBar(title: const Text('Picker')),body: SingleChildScrollView(child: Column(children: [GestureDetector(child: Container(alignment: Alignment.center,width: 160,height: 60,child: const Text('日期选择(年月日)'),),onTap: () {DatePicker.show(context,startDate: DateTime(2022, 2, 2),selectedDate: DateTime(2023, 3, 3),endDate: DateTime(2025, 5, 5),onSelected: (date) {MsgUtil.toast(date.toString());},);},),GestureDetector(child: Container(alignment: Alignment.center,width: 160,height: 60,child: const Text('日期选择(年月)'),),onTap: () {DatePicker.show(context,hideDay: true,startDate: DateTime(2022, 2),selectedDate: DateTime(2023, 3),endDate: DateTime(2025, 5),onSelected: (date) {MsgUtil.toast(date.toString());},);},),GestureDetector(child: Container(alignment: Alignment.center,width: 160,height: 60,child: const Text('时间选择(时分秒)'),),onTap: () {TimePicker.show(context,startTime: TimeData(11, 11, 11),selectedTime: TimeData(15, 15, 15),endTime: TimeData(22, 22, 22),onSelected: (time) {MsgUtil.toast(time.toString());},);},),GestureDetector(child: Container(alignment: Alignment.center,width: 160,height: 60,child: const Text('时间选择(时分)'),),onTap: () {TimePicker.show(context,hideSecond: true,startTime: TimeData(11, 11),selectedTime: TimeData(15, 15),endTime: TimeData(22, 22),onSelected: (time) {MsgUtil.toast(time.toString());},);},),],),),);}
}

说明(DatePicker)

1、支持选中日期(selectedDate)、开始日期(startDate)、结束日期(endDate)的配置
2、支持“年月日”的选择,也支持“年月”的选择

代码(DatePicker)

import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';typedef OnSelected = Function(DateTime date);class DatePicker extends StatefulWidget {static void show(BuildContext context, {DateTime? startDate,DateTime? endDate,DateTime? selectedDate,bool hideDay = false,Function()? onCancel,required OnSelected onSelected,}) async {showModalBottomSheet(context: context,backgroundColor: Colors.transparent,builder: (BuildContext context) {return ClipRRect(borderRadius: const BorderRadius.only(topLeft: Radius.circular(8),topRight: Radius.circular(8),),child: DatePicker._(selectedDate: selectedDate,startDate: startDate,endDate: endDate,onSelected: onSelected,hideDay: hideDay,),);},).then((value) => onCancel?.call());}const DatePicker._({this.selectedDate,this.startDate,this.endDate,this.hideDay = false,required this.onSelected,});final DateTime? selectedDate;final DateTime? startDate;final DateTime? endDate;final bool hideDay;final OnSelected onSelected;State createState() => _DatePickerState();
}class _DatePickerState extends State<DatePicker> {late FixedExtentScrollController yearScrollController;late FixedExtentScrollController monthScrollController;late FixedExtentScrollController dayScrollController;List<String> yearList = []; // 年数组List<String> monthList = []; // 月数组List<String> dayList = []; // 天数组int yearIndex = 0; // 年的索引int monthIndex = 0; // 月的索引int dayIndex = 0; //天的索引late DateTime startDate;late DateTime endDate;late DateTime selectedDate;final double itemExtent = 44;/// 初始化数据void initData() {// 初始化年份数for (int i = startDate.year; i <= endDate.year; i++) {yearList.add(i.toString());}int selectYear = selectedDate.year;int selectMonth = selectedDate.month;// 初始化月份数monthList = getMonthList(selectYear);// 初始化天数dayList = getDayList(selectYear, selectMonth);// 初始化时间索引final List uniqueYearList = Set.from(yearList).toList();final List uniqueMonthList = Set.from(monthList).toList();final List uniqueDayList = Set.from(dayList).toList();// 获取索引setState(() {yearIndex = uniqueYearList.indexOf("${selectedDate.year}");monthIndex = uniqueMonthList.indexOf("${selectedDate.month}");dayIndex = uniqueDayList.indexOf("${selectedDate.day}");});// 设置Picker初始值yearScrollController = FixedExtentScrollController(initialItem: yearIndex);monthScrollController = FixedExtentScrollController(initialItem: monthIndex);dayScrollController = FixedExtentScrollController(initialItem: dayIndex);}List<String> getMonthList(int selectYear) {List<String> monthList = [];if (selectYear == startDate.year) {for (int i = startDate.month; i <= 12; i++) {monthList.add(i.toString());}} else if (selectYear == endDate.year) {for (int i = 1; i <= endDate.month; i++) {monthList.add(i.toString());}} else {for (int i = 1; i <= 12; i++) {monthList.add(i.toString());}}return monthList;}List<String> getDayList(int selectYear, int selectMonth) {List<String> dayList = [];int days = getDayCount(selectYear, selectMonth);if (selectYear == startDate.year && selectMonth == startDate.month) {for (int i = startDate.day; i <= days; i++) {dayList.add(i.toString());}} else if (selectYear == endDate.year && selectMonth == endDate.month) {for (int i = 1; i <= endDate.day; i++) {dayList.add(i.toString());}} else {for (int i = 1; i <= days; i++) {dayList.add(i.toString());}}return dayList;}int getDayCount(int year, int month) {int dayCount = DateTime(year, month + 1, 0).day;return dayCount;}/// 选中年月后更新天void updateDayList() {int year = int.parse(yearList[yearIndex]);int month = int.parse(monthList[monthIndex]);setState(() {dayIndex = 0;dayList = getDayList(year, month);if (dayScrollController.positions.isNotEmpty) {dayScrollController.jumpTo(0);}});}/// 选中年后更新月void updateMonthList() {int selectYear = int.parse(yearList[yearIndex]);setState(() {monthIndex = 0;monthList = getMonthList(selectYear);if (monthScrollController.positions.isNotEmpty) {monthScrollController.jumpTo(0);}});}void initState() {super.initState();startDate = widget.startDate ?? DateTime(1970, 1, 1);endDate = widget.endDate ?? DateTime(2099, 1, 1);selectedDate = widget.selectedDate ?? DateTime.now();if (endDate.difference(startDate).inSeconds < 0) {endDate = startDate;}if (selectedDate.difference(startDate).inSeconds < 0) {selectedDate = startDate;}if (selectedDate.difference(endDate).inSeconds > 0) {selectedDate = endDate;}initData();}void dispose() {yearScrollController.dispose();monthScrollController.dispose();dayScrollController.dispose();super.dispose();}Widget build(BuildContext context) {return Container(color: Colors.white,child: Column(crossAxisAlignment: CrossAxisAlignment.start,mainAxisSize: MainAxisSize.min,children: <Widget>[Container(color: Colors.white,width: double.maxFinite,height: 200,child: Stack(alignment: AlignmentDirectional.center,children: [Container(width: MediaQuery.of(context).size.width - 32,height: itemExtent - 8,decoration: BoxDecoration(color: const Color(0xFFF1F1F1),borderRadius: BorderRadius.circular(12),),),Positioned(left: 20,right: 20,top: 0,bottom: 0,child: Row(mainAxisSize: MainAxisSize.min,children: <Widget>[Expanded(child: yearPickerView()),Expanded(child: monthPickerView()),widget.hideDay? const SizedBox(): Expanded(child: dayPickerView()),],),),],),),Container(color: Colors.white,height: 68,padding: const EdgeInsets.only(left: 16, right: 16),child: Row(mainAxisAlignment: MainAxisAlignment.spaceBetween,children: <Widget>[Expanded(child: TextButton(child: const Text('取 消'),onPressed: () {Navigator.pop(context, false);},),),const SizedBox(width: 12),Expanded(child: TextButton(child: const Text('确 定'),onPressed: () {Navigator.pop(context, true);widget.onSelected.call(DateTime(int.parse(yearList[yearIndex]),int.parse(monthList[monthIndex]),int.parse(dayList[dayIndex]),));},),),],),),SizedBox(height: MediaQuery.of(context).padding.bottom),],),);}/// 年PickerWidget yearPickerView() {return buildPickerBorder(child: CupertinoPicker(scrollController: yearScrollController,looping: false,selectionOverlay: const Center(),onSelectedItemChanged: (index) {setState(() {yearIndex = index;});updateMonthList();updateDayList();},itemExtent: itemExtent,children: buildYearWidget(),),);}/// 月PickerWidget monthPickerView() {return buildPickerBorder(child: CupertinoPicker(scrollController: monthScrollController,looping: false,selectionOverlay: const Center(),onSelectedItemChanged: (index) {setState(() {monthIndex = index;});updateDayList();},itemExtent: itemExtent,children: buildMonthWidget(),),);}/// 日PickerWidget dayPickerView() {return buildPickerBorder(child: CupertinoPicker(scrollController: dayScrollController,looping: false,selectionOverlay: const Center(),onSelectedItemChanged: (index) {setState(() {dayIndex = index;});},itemExtent: itemExtent,children: buildDayWidget(),),);}/// 年WidgetList<Widget> buildYearWidget() {List<Widget> widgets = [];for (var i = 0; i < yearList.length; i++) {widgets.add(Center(child: Text('${yearList[i]}年',style: getTextStyle(i == yearIndex),maxLines: 1,),),);}return widgets;}/// 月WidgetList<Widget> buildMonthWidget() {List<Widget> widgets = [];for (var i = 0; i < monthList.length; i++) {widgets.add(Center(child: Text(// monthList[i].padLeft(2, '0')'${monthList[i]}月',style: getTextStyle(i == monthIndex),maxLines: 1,),),);}return widgets;}/// 日WidgetList<Widget> buildDayWidget() {List<Widget> widgets = [];for (var i = 0; i < dayList.length; i++) {widgets.add(Center(child: Text(// dayList[i].padLeft(2, '0')'${dayList[i]}日',style: getTextStyle(i == dayIndex),maxLines: 1,),),);}return widgets;}TextStyle getTextStyle(bool bold) {return TextStyle(color: Colors.black,fontSize: 20,height: 1,fontWeight: bold ? FontWeight.w600 : FontWeight.w400,);}Widget buildPickerBorder({required Widget child}) {return Stack(alignment: AlignmentDirectional.center,children: [/*Container(width: 90,height: itemExtent - 8,decoration: BoxDecoration(color: const Color(0xffEFEFF0),borderRadius: BorderRadius.circular(10),),),*/child,],);}
}

说明(TimePicker)

1、支持选中时间(selectedtTime)、开始时间(starttTime)、结束时间(endtTime)的配置
2、支持“时分秒”的选择,也支持“时分”的选择
3、自定义时间数据类(TimeData)

代码(TimePicker)

import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';typedef OnSelected = Function(TimeData time);
typedef PickerBuilder = Widget Function(BuildContext context);class TimeData {final int hour;final int minute;final int second;TimeData(this.hour, [this.minute = 0, this.second = 0]): assert(hour >= 0 && hour <= 23),assert(minute >= 0 && minute <= 59),assert(second >= 0 && second <= 59);factory TimeData.now() {var now = DateTime.now();return TimeData(now.hour, now.minute, now.second);}bool precede(TimeData other) {return (hour < other.hour) ||(hour == other.hour && minute < other.minute) ||(hour == other.hour && minute == other.minute && second < other.second);}String toString() {return '$hour:$minute:$second';}
}class TimePicker extends StatefulWidget {static void show(BuildContext context, {TimeData? startTime,TimeData? endTime,TimeData? selectedTime,bool hideSecond = false,Function()? onCancel,required OnSelected onSelected,}) async {showModalBottomSheet(context: context,backgroundColor: Colors.transparent,builder: (BuildContext context) {return ClipRRect(borderRadius: const BorderRadius.only(topLeft: Radius.circular(8),topRight: Radius.circular(8),),child: TimePicker._(selectedTime: selectedTime,startTime: startTime,endTime: endTime,hideSecond: hideSecond,onSelected: onSelected,),);},).then((value) => onCancel?.call());}const TimePicker._({this.selectedTime,this.startTime,this.endTime,this.hideSecond = false,required this.onSelected,});final TimeData? selectedTime;final TimeData? startTime;final TimeData? endTime;final bool hideSecond;final OnSelected onSelected;State createState() => _TimePickerState();
}class _TimePickerState extends State<TimePicker> {late FixedExtentScrollController hourScrollController;late FixedExtentScrollController minuteScrollController;late FixedExtentScrollController secondScrollController;List<String> hourList = [];List<String> minuteList = [];List<String> secondList = [];int hourIndex = 0;int minuteIndex = 0;int secondIndex = 0;late TimeData startTime;late TimeData endTime;late TimeData selectedTime;final double itemExtent = 44;/// 初始化数据void initData() {// 初始化时for (int i = startTime.hour; i <= endTime.hour; i++) {hourList.add(i.toString());}int selectHour = selectedTime.hour;int selectMinute = selectedTime.minute;// 初始化分minuteList = getMinuteList(selectHour);// 初始化秒secondList = getSecondList(selectHour, selectMinute);// 初始化时间索引final List uniqueHourList = Set.from(hourList).toList();final List uniqueMinuteList = Set.from(minuteList).toList();final List uniqueSecondList = Set.from(secondList).toList();// 获取索引setState(() {hourIndex = uniqueHourList.indexOf("${selectedTime.hour}");minuteIndex = uniqueMinuteList.indexOf("${selectedTime.minute}");secondIndex = uniqueSecondList.indexOf("${selectedTime.second}");});// 设置Picker初始值hourScrollController = FixedExtentScrollController(initialItem: hourIndex);minuteScrollController = FixedExtentScrollController(initialItem: minuteIndex);secondScrollController = FixedExtentScrollController(initialItem: secondIndex);}List<String> getMinuteList(int selectHour) {List<String> list = [];if (selectHour == startTime.hour) {for (int i = startTime.minute; i <= 59; i++) {list.add(i.toString());}} else if (selectHour == endTime.hour) {for (int i = 0; i <= endTime.minute; i++) {list.add(i.toString());}} else {for (int i = 0; i <= 59; i++) {list.add(i.toString());}}return list;}List<String> getSecondList(int selectHour, int selectMinute) {List<String> list = [];if (selectHour == startTime.hour && selectMinute == startTime.minute) {for (int i = startTime.second; i <= 59; i++) {list.add(i.toString());}} else if (selectHour == endTime.hour && selectMinute == endTime.minute) {for (int i = 0; i <= endTime.second; i++) {list.add(i.toString());}} else {for (int i = 0; i <= 59; i++) {list.add(i.toString());}}return list;}/// 选中时分后更新秒void updateSecondList() {int hour = int.parse(hourList[hourIndex]);int minute = int.parse(minuteList[minuteIndex]);setState(() {secondIndex = 0;secondList = getSecondList(hour, minute);if (secondScrollController.positions.isNotEmpty) {secondScrollController.jumpTo(0);}});}/// 选中时后更新分void updateMinuteList() {int selectHour = int.parse(hourList[hourIndex]);setState(() {minuteIndex = 0;minuteList = getMinuteList(selectHour);if (minuteScrollController.positions.isNotEmpty) {minuteScrollController.jumpTo(0);}});}void initState() {super.initState();DateTime now = DateTime.now();startTime = widget.startTime ?? TimeData(0, 0, 0);endTime = widget.endTime ?? TimeData(23, 59, 59);selectedTime = widget.selectedTime ?? TimeData(now.hour, now.minute, now.second);if (endTime.precede(startTime)) {endTime = startTime;}if (selectedTime.precede(startTime)) {selectedTime = startTime;}if (endTime.precede(selectedTime)) {selectedTime = endTime;}initData();}void dispose() {hourScrollController.dispose();minuteScrollController.dispose();secondScrollController.dispose();super.dispose();}Widget build(BuildContext context) {return Container(color: Colors.white,child: Column(crossAxisAlignment: CrossAxisAlignment.start,mainAxisSize: MainAxisSize.min,children: <Widget>[Container(color: Colors.white,width: double.maxFinite,height: 200,child: Stack(alignment: AlignmentDirectional.center,children: [Container(width: MediaQuery.of(context).size.width - 32,height: itemExtent - 8,decoration: BoxDecoration(color: const Color(0xFFF1F1F1),borderRadius: BorderRadius.circular(12),),),Positioned(left: 20,right: 20,top: 0,bottom: 0,child: Row(mainAxisSize: MainAxisSize.min,children: <Widget>[Expanded(child: hourPickerView()),Expanded(child: minutePickerView()),widget.hideSecond? const SizedBox(): Expanded(child: secondPickerView()),],),),],),),Container(color: Colors.white,height: 68,padding: const EdgeInsets.only(left: 16, right: 16),child: Row(mainAxisAlignment: MainAxisAlignment.spaceBetween,children: <Widget>[Expanded(child: TextButton(child: const Text('取 消'),onPressed: () {Navigator.pop(context, false);},),),const SizedBox(width: 12),Expanded(child: TextButton(child: const Text('确 定'),onPressed: () {Navigator.pop(context, true);widget.onSelected.call(TimeData(int.parse(hourList[hourIndex]),int.parse(minuteList[minuteIndex]),int.parse(secondList[secondIndex]),));},),),],),),SizedBox(height: MediaQuery.of(context).padding.bottom),],),);}/// 时PickerWidget hourPickerView() {return buildPickerBorder(child: CupertinoPicker(scrollController: hourScrollController,looping: false,selectionOverlay: const Center(),onSelectedItemChanged: (index) {setState(() {hourIndex = index;});updateMinuteList();updateSecondList();},itemExtent: itemExtent,children: buildHourWidget(),),);}/// 分PickerWidget minutePickerView() {return buildPickerBorder(child: CupertinoPicker(scrollController: minuteScrollController,looping: false,selectionOverlay: const Center(),onSelectedItemChanged: (index) {setState(() {minuteIndex = index;});updateSecondList();},itemExtent: itemExtent,children: buildMinuteWidget(),),);}/// 秒PickerWidget secondPickerView() {return buildPickerBorder(child: CupertinoPicker(scrollController: secondScrollController,looping: false,selectionOverlay: const Center(),onSelectedItemChanged: (index) {setState(() {secondIndex = index;});},itemExtent: itemExtent,children: buildSecondWidget(),),);}/// 时WidgetList<Widget> buildHourWidget() {List<Widget> widgets = [];for (var i = 0; i < hourList.length; i++) {widgets.add(Center(child: Text(// hourList[i].padLeft(2, '0')'${hourList[i]}时',style: getTextStyle(i == hourIndex),maxLines: 1,),),);}return widgets;}/// 分WidgetList<Widget> buildMinuteWidget() {List<Widget> widgets = [];for (var i = 0; i < minuteList.length; i++) {widgets.add(Center(child: Text(// minuteList[i].padLeft(2, '0')'${minuteList[i]}分',style: getTextStyle(i == minuteIndex),maxLines: 1,),),);}return widgets;}/// 秒WidgetList<Widget> buildSecondWidget() {List<Widget> widgets = [];for (var i = 0; i < secondList.length; i++) {widgets.add(Center(child: Text(// secondList[i].padLeft(2, '0')'${secondList[i]}秒',style: getTextStyle(i == secondIndex),maxLines: 1,),),);}return widgets;}TextStyle getTextStyle(bool bold) {return TextStyle(color: Colors.black,fontSize: 20,height: 1,fontWeight: bold ? FontWeight.w600 : FontWeight.w400,);}Widget buildPickerBorder({required Widget child}) {return Stack(alignment: AlignmentDirectional.center,children: [/*Container(width: 90,height: itemExtent - 8,decoration: BoxDecoration(color: const Color(0xffEFEFF0),borderRadius: BorderRadius.circular(10),),),*/child,],);}
}

相关文章:

Flutter 组件抽取:日期(DatePicker)、时间(TimePicker)弹窗选择器【仿照】

简介 仿照《Flutter 仿ios自定义一个DatePicker》实行的日期弹窗选择器&#xff08;DatePicker&#xff09;、时间弹窗选择器&#xff08;TimePicker&#xff09; 效果 范例 class _TestPageState extends State<TestPage> {overridevoid initState() {super.initStat…...

基于opencv的YOLOV3对图片的目标检测

目录 1. 准备工作 2. utils 函数 2.1 plot_show 函数 2.2 get_prediction 函数 2.3 draw_bounding_box 绘制边界框函数...

Mermaid流程图

所有流程图都由节点&#xff0c;几何形状和边缘&#xff0c;箭头或线条组成。mermaid代码定义了这些节点和边缘的制作和交互方式。 它还可以容纳不同的箭头类型、多方向箭头以及与子图之间的链接。 1、流程图的方向 TB - 从上到下TD - 自上而下/与上到下相同BT - 从下到上RL -…...

国产!全志科技T507-H工业核心板( 4核ARM Cortex-A5)规格书

1核心板简介 创龙科技 SOM-TLT507 是一款基于全志科技 T507-H 处理器设计的 4 核 ARM Cortex-A 53 全国产工业核心板,主频高达 1.416GHz 。核心板 CPU 、ROM 、RAM、电源、晶振等所有元器件均采用国产工业级方案,国产化率 100%。 核心板通过邮票孔连接方式引出 MIPI CSI 、…...

java小记 2023-05-05

public class Test {/*** 谓类的方法就是指类中用static 修饰的方法&#xff08;非static 为实例方法&#xff09;&#xff0c;比如main 方法&#xff0c;那么可以以main* 方法为例&#xff0c;可直接调用其他类方法&#xff0c;必须通过实例调用实例方法&#xff0c;this 关键…...

CentOS安装Nginx

准备工作 在安装Nginx之前&#xff0c;我们需要进行一些准备工作&#xff1a; 确认系统是否已经安装了Nginx。如果已经安装了&#xff0c;需要卸载掉旧版本。安装EPEL源&#xff0c;以获取Nginx的软件包。安装必要的依赖软件包。 卸载旧版Nginx 如果已经安装了旧版本的Ngin…...

CSS布局基础(CSS书写顺序 导航栏写法 常见问题)

CSS布局基础&#xff08;CSS书写顺序 & 导航栏写法&#xff09; CSS布局基础&#xff08;CSS书写顺序&#xff09;导航栏写法PC端网页开发一般步骤容易出问题的点 CSS布局基础&#xff08;CSS书写顺序&#xff09; 布局定位属性自身属性&#xff08;宽高&#xff0c;边框&…...

打造卓越 QML 层级设计:从入门到精通

目录标题 引言&#xff1a;QML 层级设计的重要性1.1 什么是 QML1.2 层级设计的核心理念1.3 实际应用案例 QML 基础知识2.1 语言概述2.2 基本元素2.3 属性和信号 设计原则与规范3.1 命名规范3.1.1 标识符命名3.1.2 文件命名3.1.3 文件夹命名 3.2 代码风格3.2.1 缩进与空格3.2.2 …...

shell流程控制之条件判断练习

1、判断当前磁盘剩余空间是否有20G&#xff0c;如果小于20G&#xff0c;则将报警邮件发送给管理员&#xff0c;每天检查一次磁盘剩余空间。​ 因为如果磁盘剩余空间小于20G需要报警发送邮件给管理员&#xff0c;所以需要对管理员的邮箱进行设置 &#xff08;1&#xff09;首先…...

linux中TF启动卡制作:磁盘分区文件同步

文章目录 前言&#xff1a;1. 连接TF卡2. 磁盘卸载载与分区2.1 磁盘卸载2.2 创建第一个分区2.3 创建第二个分区 3. 磁盘格式化4. 文件同步5. 检查与BOOT分区启动文件拷贝总结&#xff1a; 前言&#xff1a; TF卡在linux环境下配置好相关软件后&#xff0c;把配置好的系统以及软…...

【操作系统OS】学习笔记:第一章 操作系统基础【哈工大李治军老师】

基于本人观看学习 哈工大李治军老师主讲的操作系统课程 所做的笔记&#xff0c;仅进行交流分享。 特此鸣谢李治军老师&#xff0c;操作系统的神作&#xff01; 如果本篇笔记帮助到了你&#xff0c;还请点赞 关注 支持一下 ♡>&#x16966;<)!! 主页专栏有更多&#xff0…...

Linux C/C++ 网络编程中地址格式转换(inet_pton和inet_ntop函数)

网络编程中地址格式转换&#xff08;inet_pton和inet_ntop函数&#xff09; 地址格式转换 #include <sys/types.h> #include <sys/socket.h> #include <arpa/inet.h>int inet_pton(int af , const char * src ,void * dst);&#xff08;1&#xf…...

庖丁解牛函数知识---C语言《2》

目录 前言&#xff1a; 1.嵌套调用函数 2.链式访问 3.函数的声明与定义 4.*递归 5.递归与非递归 ❤博主CSDN:啊苏要学习 ▶专栏分类&#xff1a;C语言◀ C语言的学习&#xff0c;是为我们今后学习其它语言打好基础&#xff0c;C生万物&#xff01; 开始我们的C语言之旅吧…...

Git 使用教程:最详细、最正宗手把手教学(万字长文)

目录 一&#xff1a;Git二&#xff1a;SVN与Git的的区别三、安装Git四&#xff1a;常规操作五&#xff1a;远程仓库六&#xff1a;创建与合并分支七&#xff1a;bug分支八&#xff1a;多人协作九&#xff1a;git可视化工具 Git Git 是一种分布式版本控制系统&#xff0c;用于…...

【华为OD机试 2023最新 】最优资源分配/芯片资源占用(C语言题解 100%)

文章目录 题目描述输入描述输出描述备注用例题目解析代码思路C语言题目描述 某块业务芯片最小容量单位为1.25G,总容量为M*1.25G,对该芯片资源编号为1,2,…,M。该芯片支持3种不同的配置,分别为A、B、C。 配置A:占用容量为 1.25 * 1 = 1.25G配置B:占用容量为 1.25 * 2 =…...

markdown二元运算符

符号markdown名称 \pm \pm正负/加减 ∓ \mp ∓\mp负正/减加 \times \times乘号 ⋅ \cdot ⋅\cdot点乘号 \div \div除号 ∣ \mid ∣\mid整除 ∤ \nmid ∤\nmid不整除 ⊕ \oplus ⊕\oplus异或...

【华为/华三】PPP

NCP network阶段 用于协商网络层参数&#xff0c;IPCP静态协商IP地址&#xff08;即互推地址&#xff09;动态协商叫做获得地址 Q&#xff1a;为什么PPP两端&#xff0c;可以不在一个网段内&#xff0c;也能够通信&#xff1f; A&#xff1a;因为PPP中的NCP会通过IPCP协商IP…...

【Java笔试强训 9】

&#x1f389;&#x1f389;&#x1f389;点进来你就是我的人了博主主页&#xff1a;&#x1f648;&#x1f648;&#x1f648;戳一戳,欢迎大佬指点! 欢迎志同道合的朋友一起加油喔&#x1f93a;&#x1f93a;&#x1f93a; 目录 一、选择题 二、编程题 &#x1f525;另类加法…...

【C++】STL标准库之list

STL标准库之list list类的简介常用的list类的接口构造迭代器容量访问修改 list和vector的区别 list类的简介 list是一种序列式容器&#xff0c;可以在任意位置插入和删除元素&#xff0c;并且其时间复杂度为O(1)&#xff0c;在底层&#xff0c;list是双向链表结构&#xff0c;…...

Nomogram | 盘点一下绘制列线图的几个R包!~(二)

1写在前面 不知道各位小伙伴的五一假期过的在怎么样&#xff0c;可怜的我感冒了。&#x1f637; 今天继续之前没有写完的列线图教程吧&#xff0c;再介绍几个制作列线图的R包。&#x1f920; 2用到的包 rm(list ls())library(tidyverse)library(survival)library(rms)library(…...

Django之定时任务django-crontab

Django之定时任务django-crontab crontab安装django-crontab注册应用定时时间格式定时时间示例设置定时任务符号方法解决crontab中文问题管理定时任务注意 crontab Django可以使用第三方库如django-crontab来实现定时任务的调度。该库允许使用类似于crontab文件格式的语法指定任…...

linux常见命令

ls&#xff1a;列出当前目录下的所有文件和子目录 cd&#xff1a;切换当前工作目录&#xff0c;例如 cd /home/user 进入 /home/user 目录 pwd&#xff1a;显示当前工作目录的路径 mkdir&#xff1a;创建一个新目录&#xff0c;例如 mkdir newdir 创建一个名为 newdir 的目录…...

【14.HTML-移动端适配】

移动端适配 1 布局视口和视觉视口1.1 设置移动端布局视口宽度 2 移动端适配方案2.1 rem单位动态html的font-size&#xff1b;2.2 vw单位2.3 rem和vw对比2.4 flex的弹性布局 1 布局视口和视觉视口 1.1 设置移动端布局视口宽度 避免布局视口宽度默认980px带了的缩放问题,并且禁止…...

平衡二叉树旋转机制

概念 平衡二叉树的旋转机制是一种通过对树进行旋转操作来保持其平衡的方法。 分类 平衡二叉树的旋转机制包括两种基本类型的旋转&#xff1a;左旋和右旋&#xff0c;以及它们的组合。 左旋 左旋是将一个节点的右子节点旋转到它的位置上&#xff0c;同时将该节点移到其左侧&…...

深入浅出C++ ——C++11

文章目录 一、C11简介二、列表初始化二、声明四、范围for循环五、STL中的变化六、右值引用和移动语义1. 什么是左值&#xff1f;什么是左值引用&#xff1f;2. 左值引用与右值引用比较3. 右值引用使用场景和意义4. 完美转发 新的类功能默认成员函数类成员变量初始化defaultdele…...

智能座舱3.0阶段,看全球巨头如何打造更具“价值”的第三空间

面向中国这一全球最大的汽车电动化与智能化单一市场&#xff0c;作为全球第七大汽车技术供应商的FORVIA佛瑞亚集团开始全面发力。 在2023年上海国际车展上&#xff0c;FORVIA佛瑞亚携旗下佛吉亚与海拉一系列突破性技术和互动体验亮相&#xff0c;展示了对电气化与能源管理、安…...

【Linux】入门介绍

&#x1f331;博客主页&#xff1a;大寄一场. &#x1f331;系列专栏&#xff1a;Linux &#x1f618;博客制作不易欢迎各位&#x1f44d;点赞⭐收藏➕关注​ 目录 前言 Linux背景介绍 1.发展史 UNIX发展的历史 Linux发展历史 2. 开源 3. 官网 4. 企业应用现状 5. 发行版…...

【Python】序列类型②-元组

文章目录 1.元组简介2.元组的定义2.1定义只有一个元素的元组 3.元组的下标访问4.元组的常用方法5.使用in判断是否存在元素6.多元赋值操作 1.元组简介 元组和列表一样可以存放多个,不同数据类型的元素 与列表最大的不同就是:列表是可变的,而元组不可变 2.元组的定义 元组的定义:…...

循环的数字

循环的数字 题目描述 你曾经因为看见一样的东西一遍又一遍地重复、循环而对电视节目感到厌烦么&#xff1f;好吧&#xff0c;虽然我并不关心电视节目的好坏&#xff0c;不过有时却也很像那样不断循环的数字。 让我们假定两个不同的正整数 ( n , m ) (n, m) (n,m) 是循环的&…...

MySQL查询之聚合函数查询

0. 数据源 student.sql文件。 /*Navicat Premium Data TransferSource Server : localhost_3306Source Server Type : MySQLSource Server Version : 80016Source Host : localhost:3306Source Schema : testdbTarget Server Type : MySQLTa…...

嘉兴网站制作套餐/互联网营销课程体系

基于CloudSim Plus的计算卸载仿真设计 1. 前提介绍 仿真框架的实现&#xff0c;主要依托于仿真实体、以及仿真事件&#xff0c;简单介绍如下 1.1 仿真实体 继承CloudSimEntity类(推荐)或者实现SimEntity接口(不建议) public class ExampleEntity extends CloudSimEntity {pu…...

wap开头的网站/市场调研报告范文

【出版商】贝哲斯咨询 【免费目录下载】网上团购是一种以最低的价格给消费者提供产品和服务&#xff0c;但前提是必须有最少数量的购买者进行购买的一种购物方式。 网上团购市场的企业竞争态势 该报告涉及的主要国际市场参与者有Amazon、Alibaba、Groupon、Plum District、Cr…...

网站管理工作是具体应该怎么做/微信推广引流方法

2019独角兽企业重金招聘Python工程师标准>>> NDoc 可以将 C#.NET 编译生成的程序集和对应的 /doc XML 文档&#xff0c;自动转换成如 .NET Framework SDK 类库文档或者 MSDN Library 在线 .NET 类库文档形式的代码文档&#xff0c;让您快速拥有专业级的类库API 文档…...

广西网站建设运营费用/万网官网首页

前言 从小就写字很挫&#xff0c;所以受够了被人鄙视的感觉&#xff0c;今天有个coder突然跟我说&#xff0c;你的代码怎么像小孩写的一样&#xff0c;顿时心情沮丧的极点。越来越发现一致的编程风格的重要性&#xff0c;于是把Google的C编程风格指南看了一遍&#xff0c; 这里…...

宁波网站建设营销推广/广州引流推广公司

1. 如果在已经处于 ESTABLISHED状态下的socket(一般由端口号和标志符区分&#xff09;调用closesocket&#xff08;一般不会立即关闭而经历TIME_WAIT的过程&#xff09;后想继续重用该socket&#xff1a; BOOL bReuseaddrTRUE; setsockopt(s,SOL_SOCKET ,SO_REUSEADDR,(const c…...

网站的交互体验/搜索引擎优化的目的是对用户友好

上海工程技术大学C语言考试试卷一、选择题(本题共15小题&#xff0c;每小题2分&#xff0c;共30分)1.下列字符串能作为变量名的是()A)3int B)float C)_2xy D)break2.以下选项中可作为C语言合法整数的是(A)1010B B)0287 C)0x02h3 D)0x0ffa3.下列正确的C语句是(A)x2 B)scanf(“%d…...