rime中州韵小狼毫 联想词组 滤镜

教程目录:rime中州韵小狼毫须鼠管安装配置教程 保姆级教程 100+增强功能配置教程

在 rime中州韵小狼毫 自定义词典 一文中,我们分享了如何在rime中州韵小狼毫须鼠管输入法中定义用户自定义词典;通过自定义词典,我们可以很方便的在输入法中加入个性化的词组。

根据 rime中州韵小狼毫 滤镜与字典的区别 一文所分析,通过自定义词典所定义和管理的个性化词组,会受到输入方案的耦合影响,这导致我们无法方便的直接的分享我们的自定义词典配置;并且对于一些动态词组(例如实时时间,实时日期,电脑信息等),也无法通过配置自定义词典来实现。

本文分享rime中州韵小狼毫须鼠管输入法的一个联想词组滤镜配置。该滤镜可以在候选列表中出现关键词组时,抛出附加的新的词组,例如下图👇中带有💡标记的词组,即为联想词组:
20240111152332

联想词组字典

联想词组字典的目的是提供有联想关系的词组,例如由词组“夫妻”,联想到词组“伉俪”,再如由词组“进步”,联想到词组“进步开始于起步”。

联想词组字典txt的文档,lua滤镜脚本支持多个txt文档分类管理不同的联想词组,且滤镜脚本会自动进行去重处理。

联想词组字典文档内支持以符号#开头的行作为注释行,以提升词组管理的便捷性。

联想词组文档内的文本分为2列,以tab制表符分隔。第1列为关键词组,关键词组可以有多个,以空格分隔。第2列为联想词组,联想词组可以有多个,以空格分隔。联想词组的联想是意向的,即只能由第1更的关键词组联想到第2列的联想词组,但是可以通过使第1列与第2列相等来实现相互联想,例如 “夫妻 伉俪 →夫妻 伉俪”,这样可以使“夫妻”和“伉俪”相互联想。

phraseExt commonPhrase.txt

phraseExt commonPhrase.txt文档用于管理一般性的公共性的联想词组,phraseExt commonPhrase.txt词组定义截取如下👇:

# 支持使用 &nbsp 来定义空格,而正常的空格被用于分词
# 常用链接
知乎	https://www.zhihu.com
百度 度娘	www.baidu.com
淘宝	www.taobao.com
谷歌 谷哥 谷姐	www.google.com
画图 几何 画板	https://webgeo-8gn07v0t78c4ca57-1308819187.tcloudbaseapp.com
# 常用称呼
运气 华盖	运气 华盖
南冠 囚犯	南冠 囚犯
伉俪 夫妻	伉俪 夫妻
丝竹 音乐	丝竹 音乐
烽烟 战争 狼烟	战争 烽烟 狼烟

phraseExt esAppEmoji.txt

phraseExt esAppEmoji.txt文档用于管理一些应用专属的emoji表情,例如我们可以在微信聊天中输入 [微笑],则微信会将其自动转换成 emoji 表情符号 🙂。我们在phraseExt esAppEmoji.txt文档中定义了一系列的此类emoji表情词组。phraseExt esAppEmoji.txt词组定义截取如下👇:

done 完成 搞定	esFs[完成] esDt[Done]
get 了解 知道	esFs[了解] esDt[Get]
no 不行	esFs[No] esFs[叉号] esDt[打叉]
错 错误	esFs[叉号] esDt[打叉]
ok 行 好的 好吧 可以	esFsWxDt[OK]
好 好的	esFs[Yes] esWx[好的]
行	esFs[我看行] esFs[好的]
okr 绩效	esFsDt[OKR]

👆如上,phraseExt esAppEmoji.txt 文档中的联想词组,以AppName作为前缀,不同的App应用,前缀符号映射👇如下:

应用前缀
微信Wx
飞书Fs
钉钉Dt
QQQq

💣注意:
特别的,AppEmoji的联想,需要配置应用开关才可以使用,关于应用开关的配置,请参考 rime中州韵小狼毫 weasel.custom.yaml 配置 之 输入环境识别 一文。

phraseExt esUnicode.txt

Unicode字符集中,存在着丰富的 emoji符号,如果不善于利用,则实在可惜。phraseExt esUnicode.txt文档专门用来管理与 Unicode 表情符号有关的联想词组,phraseExt esUnicode.txt联想词组定义截取如下👇:

垃圾 垃圾桶	🚮
开水	🚰
轮椅 残疾 无障碍	♿
厕所	🚻 🚾
厕所 男人 男厕	🚹
厕所 女人 女厕	🚺

善于使用 Unicode 表情符号,会使你成为一个高情商的人。

phraseExt personal.txt

顾名思义,phraseExt personal.txt文档是用来管理一些个人和,私有的联想词组的,例如你的电话号码,例如你的邮寄地址,再如你的爱情口头禅。phraseExt personal.txt联想词组定义示例如下👇:

# 支持使用 &nbsp 来定义空格,而正常的空间被用于分词
# 这个字典用于管理 个人/私人 信息,以便在共享/分享rime配置时,可以方便的将个人信息进行隔离
# 常用联系方式
电话 手机	123456789AB 123456789AC
快递 地址	湖南省长春市快乐区开心社区2栋305室
# 常用办公信息
工号	000000
邮箱	san.zhang@aibaba.com
快递 地址	浙江省杭州市阿里马马集团2号快递收发室
# 其它常用信息
博客	https://www.myblogs.com

如果你与它人分享你的rime输入法的配置方案,phraseExt personal.txt 的存在将使得你可以快速的将个人/私人信息与配置方案进行隔离。

phraseExt_Module.lua

phraseExt_Module.lua 是一个lua脚本文档,phraseExt_Module.lua脚本文档的使用是将以上👆所管理的联想词组加载到lua程序中,并提供合适的检索方法接口,以便rime引擎可以使用联想词功能。phraseExt_Module.lua脚本内容如下👇:

-- myPhrase.lua
-- Copyright (C) 2023 yaoyuan.dou <douyaoyuan@126.com>
local M={}
local dict={}
local dictPhraseList={}
local dbgFlg = false--引入系统变更处理模块
local ok, sysInfoRes = pcall(require, 'sysInfo')
local currentDir = sysInfoRes.currentDir--设置 dbg 开关
local function setDbg(flg)dbgFlg = flgsysInfoRes.setDbg(flg)print('myPhrase dbgFlg is '..tostring(dbgFlg))
end--将这附串拆散成 table
local function stringSplit(str,sp,sp1)sp=(type(sp)=="string") and sp or " "if 0==#sp thensp="([%z\1-\127\194-\244][\128-\191]*)"elseif 1==#sp thensp="[^"..(sp=="%" and "%%" or sp).."]*"elsesp1=sp1 or "^"str=str:gsub(sp,sp1)sp="[^"..sp1.."]*"endlocal tab={}for v in str:gmatch(sp) doif ''~=v thentable.insert(tab,v)endendreturn tab
end--将文档处理成行数组
local function files_to_lines(...)if dbgFlg thenprint("--->files_to_lines called here")endlocal tab=setmetatable({},{__index=table})local index=1for i,filename in next,{...} dolocal fn = io.open(filename)if fn thenfor line in fn:lines() doif not line or #line > 0 thentab:insert(line)endendfn:close()endendif dbgFlg thenprint("--->files_to_lines completed here")endreturn tab
endlocal function dictload(...) -- filename)if dbgFlg thenprint("-->dictload called here")endlocal lines=files_to_lines(...)local thisDict={}for i,line in next ,lines doif not line:match("^%s*#") then  -- 第一字 # 为注释行local keys,val = string.match(line,"(.+)\t(%C+)")if nil ~= keys then--尝试对关键字进行空格分割local keyList = stringSplit(keys,' ')local key=''for idx=1,#keyList dokey = keyList[idx]if nil ~= thisDict[key] then--如果该key已经存在,追加在后面,注意加一个空格thisDict[key] = thisDict[key]..' '..valelsethisDict[key] = valendendendendendif dbgFlg thenprint("-->dictload completed here")endreturn thisDict
end--===========================test========================
local function test(printPrefix)if nil == printPrefix thenprintPrefix = ' 'endif dbgFlg thenprint('myPhrase test starting...')endsysInfoRes.test(printPrefix..' ')for k,v in pairs(dict) doif dbgFlg thenprint(printPrefix..k..'\t'..v)endend
end--获取字典中的phraseList
local function getPhraseList(k)if nil == k thenreturn {}elseif '' == k thenreturn {}end--尝试获取 dictPhraseList 中 k 的列表local phraseList = dictPhraseList[k]if nil == phraseList then--phraseList 获取失败,尝试获取 dict 中 k 的字符串local thisPhrase = dict[k]if nil == thisPhrase then--这个 k 在dict中不存在phraseList={}elseif thisPhrase == '' then--这个 k 在dict中是空的phraseList={}else--将获取的 thisPhrase 序列化到 dictPhraseList 中dictPhraseList[k]=stringSplit(thisPhrase,' ')--再次从 dictPhraseList 中获取 k 的序列phraseList = dictPhraseList[k]endendreturn phraseList
endfunction M.init(...)local files={...}--文件名不支持中文,其中 # 开始的行为注释行table.insert(files,"phraseExt commonPhrase.txt")table.insert(files,"phraseExt esAppEmoji.txt")table.insert(files,"phraseExt esUnicode.txt")table.insert(files,"phraseExt personal.txt")for i,v in next, files dofiles[i] = currentDir().."/".. venddict= dictload(table.unpack(files))--抛出功能函数M.getPhraseList = getPhraseListM.setDbg = setDbgM.test = test
endM.init()return M

👆以上脚本中,我们在M.init() 方法中看到了联想词组字典的加载方法:table.insert(files,"phraseExt personal.txt"),你如果有其它的联想词组字典,你也可以很方便的加载它们。

phraseExt_Module.lua 脚本提供了一个名为getPhraseList方法,该方法可以根据指定的关键词组,从联想词组字典对象dict中检索并返回对应的联想词组。

phraseExt_Filter.lua

phraseExt_Filter.lua脚本实现了匹配rime引擎的Filter滤镜,phraseExt_Filter.lua脚本定义并返回了phraseExt_Filter滤镜方法,phraseExt_Filter.lua脚本内容如下👇:

-- myPhrase_Filter.lua
-- Copyright (C) 2023 yaoyuan.dou <douyaoyuan@126.com>
local dbgFlg = falselocal ok, res = pcall(require, 'phraseExt_Module')
local getPhraseList = res.getPhraseList--最长的comment长度限制
local maxLenOfComment = 250--设置 dbg 开关
local function setDbg(dbgFlg)res.setDbg(dbgFlg)
end--过滤器
local function phraseExt_Filter(input, env)--获取选项增强开关状态local on = env.engine.context:get_option("phraseExt")--获取应用程序标记状态[由于飞书暂不支持文本转表情的输入,帮使用 and false 将其关闭]local feishuFlg = env.engine.context:get_option("feishuFlg") and falselocal wechatFlg = env.engine.context:get_option("wechatFlg")local qqFlg = env.engine.context:get_option("qqFlg")local dingdingFlg = env.engine.context:get_option("dingdingFlg")local minttyFlg = env.engine.context:get_option("minttyFlg")local cmdFlg = env.engine.context:get_option("cmdFlg")local pycharmFlg = env.engine.context:get_option("pycharmFlg")local vscodeFlg = env.engine.context:get_option("vscodeFlg")local matchedTxt = ''local esType = ''local esTxt = ''local cands={}local thisTxtfor cand in input:iter() do--提交默认选项if nil == cands[cand.text] thenyield(cand)cands[cand.text]=trueendif on thenlocal candTxt = cand.text:gsub("%s","") or ""if candTxt ~= "" then--获取增强选项local phraseList = getPhraseList(candTxt)if #phraseList > 0 thenlocal idxfor idx=1,#phraseList dothisTxt=phraseList[idx]if nil == cands[thisTxt] thencands[thisTxt]=trueesType,esTxt = string.match(thisTxt,"^es(.+)(%[.+%])$")if nil ~= esType thenesType = string.lower(esType)--这是一个表情选项if feishuFlg and nil ~= string.find(esType,'fs') then--这是一个 feishu 表情,且当前在 feishu 中输入if nil ~= esTxt thenyield(Candidate("word", cand.start, cand._end, esTxt, '😃'))endelseif wechatFlg and nil ~= string.find(esType,'wx') then--这是一个 wechat 表情,且当前在 wechat 中输入if nil ~= esTxt thenyield(Candidate("word", cand.start, cand._end, esTxt, '😃'))endelseif qqFlg and nil ~= string.find(esType,'qq') then--这是一个 QQ 表情,且当前在 QQ 中输入if nil ~= esTxt thenyield(Candidate("word", cand.start, cand._end, esTxt, '😃'))endelseif dingdingFlg and nil ~= string.find(esType,'dt') then--这是一个 dingtalk 表情,且当前在 钉钉 中输入if nil ~= esTxt thenyield(Candidate("word", cand.start, cand._end, esTxt, '😃'))endendelse--这不是一个表情选项if string.lower(string.sub(thisTxt, 1, 4)) == 'git-' then-- 这是一个以 git 开头的选项,这被认为是一个 git 命令if minttyFlg or cmdFlg then-- 修剪选项thisTxt = string.sub(thisTxt, 5)-- git 命令选项只在 cmd 窗口或者是 mitty 窗口才允许输出,以避免造成干扰yield(Candidate("word", cand.start, cand._end, thisTxt:gsub("&nbsp"," "), '💡'))endelseif string.lower(string.sub(thisTxt, 1, 3)) == 'py-' then-- 这是一个以 py- 开头的选项,这被认为是一个 python 关键字if pycharmFlg or vscodeFlg then-- 修剪选项thisTxt = string.sub(thisTxt, 4)-- python 关键字选项只在 pycharm 或者 vscode 中才允许输出, 以避免造成干扰yield(Candidate("word", cand.start, cand._end, thisTxt:gsub("&nbsp"," "), '💡'))endelseyield(Candidate("word", cand.start, cand._end, thisTxt:gsub("&nbsp"," "), '💡'))endendendendendendendend
endreturn phraseExt_Filter

👆以下脚本代码中,我们可以看到一组开关状态获取代码,如下👇:
20240111162804
这些开关变量,使得一些特定的词组(例如App表情)只会在对应的应用程序环境下才会出现。例如只有在微信中进行录入时,才会出现微信专有的emoji词组,而在txt环境下录入时,则不会出现微信专属的emoji词组,这大大提升了输入法的录入体验。

💣注意:
以上👆所述文档 phraseExt commonPhrase.txtphraseExt esAppEmoji.txtphraseExt esUnicode.txtphraseExt personal.txtphraseExt_Filter.luaphraseExt_Module.lua6个文档,应该位于 用户文件夹下的 lua 文件夹内,如下👇:
20240111163444

rime.lua

rime.lua脚本的内容如下👇:

help_translator = require("help")
inputShow_translator = require("inputShow")
inputShow_Filter = require("inputShow_Filter")
Upper_Filter = require("Upper_Filter")
dic_4w_Filter = require("dic_4w_Filter")
phraseReplace_Filter = require("phraseReplace_Filter")
pinyinAdding_Filter = require("pinyinAdding_Filter")
dateTime_Filter = require("dateTime_filter")
dynamicPhrase_Filter = require("dynamicPhrase_Filter")
phraseExt_Filter = require("phraseExt_Filter")

👆述脚本,在最后一行中,我们加载了phraseExt_Filter滤镜。

wubi_pinyin.custom.yaml

以上, 我们完成了 phraseExt_Filter 滤镜的所有的功能定义,我们现在需要做的就是在我们的输入方案中配置使用该 phraseExt_Filter 滤镜。此处以五笔・拼音输入方案为例,展示如何配置使用 phraseExt_Filter 滤镜。

五笔・拼音 输入方案的方案文档 wubi_pinyin.schema.yaml 的补丁文档 wubi_pinyin.custom.yaml中,我们增加如下的Filters配置:

# encoding:utf-8
patch:switches/+: #增加以下开关- name: phraseExt				# 候选词扩展开关reset: 1states: [Off, phraseExt]engine/filters:									# 设置以下filter- simplifier- lua_filter@phraseExt_Filter					# 自定义短语滤镜,针对响应的关键字,添加新的选项进来

注意,以上👆配置并不是wubi_pinyin.custom.yaml的全部配置,此处仅展示了与phraseExt_Filter有关的部分。

文档获取

👆以上所述配置文档,你可以在 rime中州韵小狼毫须鼠管输入法 联想词组滤镜配置包.zip 下载取用。

如果你可以访问gitHub,你也可以在 dyyRime 中找到完全版本的配置包。

小结

文章分享了一种在rime中州韵小狼毫须鼠管输入法中配置联想词组滤镜的方法。通过分别在phraseExt commonPhrase.txtphraseExt esAppEmoji.txtphraseExt esUnicode.txtphraseExt personal.txt四个文档中分类整理定义了不同的联想词组,然后在phraseExt_Filter.luaphraseExt_Module.lua两个脚本文档中实现了phraseExt_Filter 滤镜功能。最后以五笔・拼音输入方案为例,展示了如何在 五笔・拼音 输入方案中配置使用 phraseExt_Filter 滤镜的方法,最实现了预期的功能效果。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

*(长期更新)软考网络工程师学习笔记——Section 22 无线局域网

目录 一、IEEE 802.11的定义二、IEEE 802.11系列标准三、IEEE 802.11的两种工作模式四、CDMA/CA协议&#xff08;一&#xff09;CDMA/CA协议的定义&#xff08;二&#xff09;CDMA/CA协议的过程 五、AC与AP&#xff08;一&#xff09;接入控制器AC&#xff08;二&#xff09;无…

MySQL解决海量数据和并发性的方案——分库分表

分库分表其实是两个事情&#xff0c;为了解决的东西实际上也是两个&#xff0c;但是一定要注意&#xff0c;不到最后万不得已&#xff0c;不要用分库分表&#xff0c;因为这会对数据查询有极大限制。 数据量太大查询慢的问题。 这里面我们讲的「查询」其实 主要是事务中的查询…

如何实现图片压缩

文章目录 1、canvas实现图片压缩2、其他 1、canvas实现图片压缩 canvas 实现图片压缩&#xff0c;主要是使用 canvas 的drawImage 方法 具体思路 拿到用户上传的文件转成base64创建一个 Image&#xff0c;主要是获取到这个图片的宽度和高度创建一个 2D 的画布&#xff0c;画布…

一文搞懂系列——Linux C线程池技术

背景 最近在走读诊断项目代码时&#xff0c;发现其用到了线程池技术&#xff0c;感觉耳目一新。以前基本只是听过线程池&#xff0c;但是并没有实际应用。对它有一丝的好奇&#xff0c;于是趁这个机会深入了解一下线程池的实现原理。 线程池的优点 线程池出现的背景&#xf…

RocketMQ源码阅读-Message拉取与消费-Broker篇

RocketMQ源码阅读-Message拉取与消费-Broker篇 1. ConsumeQueue是什么2. Message重放2.1 从MappedFile文件读取Message到ConsumeQueue2.2 ConsumeQueue持久化 3. Broker提供的拉取接口3.1 请求Header3.2 拉取消息接口3.3 拉取失败处理 4. Broker提供的更新消费进度接口5. Broke…

短视频IP运营流程架构SOP模板PPT

【干货资料持续更新&#xff0c;以防走丢】 短视频IP运营流程架构SOP模板PPT 部分资料预览 资料部分是网络整理&#xff0c;仅供学习参考。 抖音运营资料合集&#xff08;完整资料包含以下内容&#xff09; 目录 抖音15秒短视频剧本创作公式 在抖音这个短视频平台上&#…

SpringBoot集成RabbitMq,RabbitMq消费与生产,消费失败重发机制,发送签收确认机制

RabbitMq消费与生产&#xff0c;消费失败重发机制&#xff0c;发送确认机制&#xff0c;消息发送结果回执 1. RabbitMq集成spring bootRabbitMq集成依赖RabbitMq配置RabbitMq生产者&#xff0c;队列&#xff0c;交换通道配置&#xff0c;消费者示例 2. RabbitMq消息确认机制消息…

【例7.5】 取余运算(mod) 快速幂

1326&#xff1a;【例7.5】 取余运算&#xff08;mod&#xff09; 时间限制: 1000 ms 内存限制: 65536 KB 【题目描述】 输入b&#xff0c;p&#xff0c;k的值&#xff0c;求bpmodk 的值。其中b&#xff0c;p&#xff0c;kk为长整型数。 【输入】 输入b&#xff0c;p&#xf…

Scott用户数据表的分析

Oracle从入门到总裁:https://blog.csdn.net/weixin_67859959/article/details/135209645 如果想要知道某个用户所有的数据表: select * from tab; 此时结果中一共返回了四张数据表&#xff0c;分别为部门表&#xff08;dept&#xff09; &#xff0c;员工表&#xff08;emp&a…

【LV12 DAY20 RTC实验】

编程实现通过LED状态显示当前电压范围&#xff0c;并打印产生低压警报时的时间 注&#xff1a; 电压在1501mv~1800mv时&#xff0c;LED2、LED3、LED4、LED5点亮 电压在1001mv~1500mv时&#xff0c;LED2、LED3、LED4点亮 电压在501mv~1000mv时&#xff0c;LED2、LED3点亮 电压在…

HTML--CSS--浮动布局及定位布局

正常文档布局 块元素独占一行 行内元素在有多个的时候&#xff0c;就是从左到右排在一行 块元素包括&#xff1a;div,p,hr 行内元素&#xff1a;span,i,img 浮动布局 float 属性&#xff1a; left 向左 right 向右 作用我目前看起来就是浮动元素的宽度是由内容决定的&#x…

HDFS和MapReduce综合实训

文章目录 第1关&#xff1a;WordCount词频统计第2关&#xff1a;HDFS文件读写第3关&#xff1a;倒排索引第4关&#xff1a; 网页排序——PageRank算法 第1关&#xff1a;WordCount词频统计 测试说明 以下是测试样例&#xff1a; 测试输入样例数据集&#xff1a;文本文档test1…

Java实战之每日海报

前言 使用java生成每日海报。 项目起因是巧合下遇到了一篇很棒的文档&#xff0c;说的是用程序来实现每日生成一个海报。如果之后加上自动发布的功能&#xff0c;简直就是太棒了啊&#xff01; 样例图如下&#xff1a; 每日海报 思路 访问某词站的API获取网络图片&#…

Java持久层框架之争:选择最佳方案来提升你的开发效率!

1、前言 在现代软件开发领域&#xff0c;选择适合的持久层框架是至关重要的一步。持久层框架可以帮助我们管理数据访问、数据库连接、事务处理等复杂的数据库操作&#xff0c;从而提升开发效率和代码质量。 然而&#xff0c;在众多的Java持久层框架中&#xff0c;选择最佳方案并…

算法通关村番外篇-LeetCode编程从0到1系列五

大家好我是苏麟 , 今天带来算法通关村番外篇-LeetCode编程从0到1系列五 . 数学 1523. 在区间范围内统计奇数数目 描述 : 给你两个非负整数 low 和 high 。请你返回 low 和 high 之间&#xff08;包括二者&#xff09;奇数的数目。 题目 : LeetCode 1523. 在区间范围内统计奇…

Spring Data JPA 踩过的坑实录

前言 游戏中台一直在使用spring 全家桶&#xff0c; 本文会左右使用Spring Data JPA的坑点记录总结 主要给大家总结介绍了关于使用Spring JPA注意事项及踩过的坑。 案例1&#xff1a; 为什么只调用了 org.springframework.data.repository.CrudRepository#findById(ID id) 却…

孤儿进程与僵尸进程以及僵尸进程的解决

孤儿进程&#xff1a; 定义&#xff1a; 父进程运行结束&#xff0c;但子进程还在运行&#xff08;未运行结束&#xff09;&#xff0c;这样的子进程就称为孤儿进程&#xff08; Orphan Process &#xff09;。 过程&#xff1a; 每当出现一个孤儿进程的时候&#xff0c;内核就…

rtklib读取原始数据是一次读取了一个文件的全部数据

一般来说&#xff0c;rtklib读取观测值文件&#xff08;o文件&#xff09;和导航文件&#xff08;n文件&#xff09;进行解算。 读取文件的时候&#xff0c;并非一次读取一个历元&#xff0c;而是将一个文件所有历元的数据都读取完毕以后&#xff0c;再进行解算。 这看起来是…

《C++大学教程》4.34阶乘

题目&#xff1a; 对一个非负整数n来说&#xff0c;它的阶乘可以写成 n! (读作“n的阶乘”)&#xff0c;其计算公式定义如下&#xff1a; n! n x (n-1) x (n-2)x......x1&#xff08;对于大于1的 n &#xff09; 和 n! 1 ( 对于等于0或者等于1的n ) 例如&#xff0c;5&…

重学Java 6 流程控制语句

我与我&#xff0c;至死不渝 ——24.1.15 模块重点&#xff1a; ①会使用Scanner和Random ②会使用switch以及知道case的穿透性 ③会使用if ④会使用for循环&#xff0c;while循环&#xff0c;嵌套循环 一、键盘录入_Scanner 1.概述&#xff1a;是Java定义好的一个类 2.作用&am…