将自定义范围整数中的奇数找出,并且用","间隔,一次性打印。

博客围绕给定整数范围找出奇数并按“1,3,5”格式打印的题目展开。起初认为判断奇偶简单,但重点在于字符间隔。引入String join()方法解决,还提到用列表存奇数、数据类型转换等实现要点。

\quad\quad将自定义范围整数中的奇数找出,并且用","间隔,一次性打印。

\quad\quad今天碰到一个题目,是给定一个整数范围,例如(1-5),要求按“1,3,5”的顺序打印出其中所有的奇数。在这里插入图片描述
\quad\quad首先,刚看到题目的时候觉得还是挺简单的,不就是判断奇偶数嘛,用位运算即可。但实现以下后才发现重点在于,每个字符之间的间隔问题,如果单纯的判断是奇数,然后打印出来的话,就没办法实现上面的效果。所以这时候就需要引入一个String join()方法,用某一特定字符将数组或者列表中的元素连接起来。
\quad \quad代码如下:

\quad\quad说明:
\quad\quad 1.由于还不知道怎么用数组去实现方法,所以用列表(list)去存储范围内的奇数。
\quad\quad 2.start至end之间的数据为整数,但是String join方法适用于String类型的数据,所以需要将Int类型转换成String类型,这里就要使用到String.valueOf(),进行数据类型转换。
\quad\quad 3.网上有许多关于StringUtils into()与String into()区别的文章,这里就不做过多介绍。我想说的就是,StringUtils into需要引用模块:

\quad\quad

\quad$\quad记住,com.sun和sun模块最好不要使用,不被官方支持,可能随着版本的更新就没有了。而且也不一定是跨平台的,在你的系统上能运行,换个系统则不一定了。

function main(defaultPath) % weldingDataAnalysis - 焊接过程多源数据综合分析主函数 % 输入: % defaultPath: (可选) 默认搜索路径,如未提供则使用 uigetdir 交互选择 % % 功能: % 1. 搜索指定关键词的4类文件(WD, WDP, WDS, WDSQ) % 2. 安全读取 CSV/TXT/DAT 格式表格数据 % 3. 对前两个文件进行随机间隔降采样 % 4. 可视化四通道子图 & 拟合 vs 实测对比图 % 5. 提供交互式百分位滤波并显示滤波前后结果 %% 参数初始化 %nargin表示传入的参数个数,isempty是用于判断是否为空数组/字符串 if nargin < 1 || isempty(defaultPath) defaultPath = 'D:\OCT\20250919data'; % 默认路径 end %{}定义了元胞数组,*则表示是任意字符序列,就是名字不重要,只看后缀是否满足 extensions = {'*.csv', '*.txt', '*.dat'}; % ✅ 加星号表示通配 fileKeywords = {'WD', 'WDP', 'WDS', 'WDSQ'}; titles = { '1. 勒斯姆勒拟合熔深曲线'; '2. SD-OCT 实测熔深点记录'; '3. 加工过程的表面拟合曲线'; '4. 加工过程质量评估曲线' }; ylabels = { '熔深 (mm)'; '实测熔深值'; '表面高度'; '质量评分' }; %% 步骤1:选择目录并查找目标文件 %自定义函数中传入的变量就是之前定义过的默认路径 folderPath = selectFolder(defaultPath); targetFiles = findTargetFiles(folderPath, extensions, fileKeywords); %% 步骤2:安全读取所有匹配文件 allData = cell(4, 1); for i = 1:4 %ischar就是判断内容是否为字符串数组 if ischar(targetFiles{i}) %try和catch一起用,和if无关 try allData{i} = readDataSafely(targetFiles{i}); if ~isempty(allData{i}) fprintf('📁 已加载第%d个文件:%s,大小 [%d × %d]\n', ... i, targetFiles{i}, size(allData{i},1), size(allData{i},2)); end %try失败,就直接到ctach me catch ME %warning黄色警告显示,提示问题,ME.messeage是错误的具体原因 warning('读取文件 %d (%s) 失败: %s', i, targetFiles{i}, ME.message); allData{i} = []; end else allData{i} = []; end end % 检查必要文件是否存在 if isempty(allData{1}) || isempty(allData{2}) error('❌ 必须找到前两个文件才能继续!'); end %% 步骤3:对前两个文件进行随机降采样 %randi从指定的范围内生成均匀分布随机整数 span1 = randi([50, 100]); span2 = randi([50, 100]); downsampled1 = subsampleData(allData{1}, span1); downsampled2 = subsampleData(allData{2}, span2); fprintf('📉 文件1 使用降采样间隔 %d → 新长度 %d\n', span1, size(downsampled1,1)); fprintf('📉 文件2 使用降采样间隔 %d → 新长度 %d\n', span2, size(downsampled2,1)); %% 步骤4:生成四子图可视化 %cellfun是对alldata中的每一个cell元素应用isempty函数 %cellfun是一个逻辑数组,输出返回判断结果,就相当于依次判断某数组的情况,并输出结果 %not就等价于~逻辑,是依次对数组内部进行依次取反 %find则是找出最终数组逻辑运算的结果,将真的按照数组内位置记录下来,记录为一个二维数组[1,2,3,4] validIndex = find(not(cellfun(@isempty, allData))); % 获取非空数据索引 visualizeMultiChannel(allData, titles, ylabels, validIndex); %% 步骤5:绘制降采样后对比图 visualizeComparison(downsampled1, downsampled2, span1, span2); %% 步骤6:对 WDP 数据执行百分位滤波 + 可视化 performPercentileFiltering(allData{2}); %% 步骤7:对 WDP 数据执行 LOF 异常检测 performLOFOnWDP_Optimized(allData{2}); %% 步骤8:对比两种滤波方式 comparePercentileFilteringWithLOF(allData{2}); % 结束提示 disp('🎉 所有处理完成!'); end 请首先了解该代码,各个子函数已经编写完毕,运行后没有问题;请你先理解主函数,理解后,我将进行下一步工作的提问
最新发布
10-18
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值