代码问题:获取B类型球速最大值却输出全部B类数值
问题排查与修复
代码核心问题
你的代码逻辑完全错误,导致每次遇到B类型就输出当前球速,而非最大值:
max变量被放在if(pitchType[index] == pitchToFind)代码块内,每次碰到B类型都会重新初始化max为0.00,根本无法累计比较所有B类型的速度。- 内部的
for(int g = 0; g < index; g++)循环完全无效:你每次都拿当前的pitchSpeed[index]和max对比,不管循环多少次,最终max都会被赋值为当前球速,随后直接打印,等同于把每个B类型的球速挨个输出。
修复后的代码
正确逻辑是先遍历所有数据,找出所有B类型球速的最大值,最后一次性输出:
void getMax(int numOfPitches, char pitchType[], double pitchSpeed[], char pitchToFind) { // 初始化max为极小值,确保第一个B类型的速度能覆盖它 double max = -1.0; for(int index = 0; index < numOfPitches; index++){ if(pitchType[index] == pitchToFind){ // 第一次遇到B类型直接赋值,后续每次比较更新最大值 if(max < 0 || pitchSpeed[index] > max){ max = pitchSpeed[index]; } } } // 遍历完成后输出结果 if(max != -1.0){ printf("%.1lf\n", max); } else { printf("未找到指定类型的球速数据\n"); } }
针对你的数据的输出结果
用你提供的测试数据,修复后的代码会输出95.1,这是所有B类型球速(89.7、95.1、92.3、94.7、88.9、91.5)中的最大值。
内容的提问来源于stack exchange,提问作者user21600183
相关产品推荐
相关产品推荐

