可扩展多比例布尔输入输出绑定动态算法实现需求
可扩展动态实现方案
核心思路
你的需求本质是适配输入数N : 相邻绑定标志数N-1 : 输出数N的通用场景,不需要写死枚举所有绑定状态,只需要先按绑定规则对输出分组,再对每组的输入做OR运算赋值即可。
前置改造
首先把原来硬编码的独立变量/方法替换为数组存储,方便动态扩展:
- 定义
boolean[] inputs存储所有布尔输入,下标从0到N-1对应Input1到InputN - 定义
boolean[] joinFlags存储相邻绑定标志,下标从0到N-2对应Output1Output2Joined到OutputN-1OutputNJoined - 定义
boolean[] outputs存储所有布尔输出,下标从0到N-1对应Output1到OutputN
如果受限于现有架构不能直接用数组存储,可以加索引映射的get/set适配方法,规模扩展时仅需新增对应case即可,核心逻辑无需改动。
通用算法代码
public void changed(int N) { // N为当前输入/输出的数量,绑定标志数自动为N-1 int currentGroupStart = 0; // 遍历所有绑定标志,拆分分组 for (int i = 0; i < N-1; i++) { // 遇到未绑定的标志,说明当前组到i为止 if (!joinFlags[i]) { // 计算当前组的OR结果 boolean groupResult = evaluateInput(inputs, currentGroupStart, i); // 给组内所有输出赋值 for (int j = currentGroupStart; j <= i; j++) { outputs[j] = groupResult; } // 下一组的起始位置为i+1 currentGroupStart = i + 1; } } // 处理最后一组 boolean lastGroupResult = evaluateInput(inputs, currentGroupStart, N-1); for (int j = currentGroupStart; j < N; j++) { outputs[j] = lastGroupResult; } } /** * 计算指定区间内输入的OR结果 * @param inputs 输入数组 * @param start 区间起始下标(包含) * @param end 区间结束下标(包含) * @return 区间内所有输入的OR结果 */ private boolean evaluateInput(boolean[] inputs, int start, int end) { for (int i = start; i <= end; i++) { if (inputs[i]) { return true; } } return false; }
适配说明
- 当你需要调整规模时,只需要修改N的数值,同时调整inputs、joinFlags、outputs三个数组的长度即可,不需要修改核心逻辑
- 完全兼容你给出的4输入4输出3绑定标志的场景,所有示例用例的运行结果和你原有硬编码逻辑完全一致
- 支持任意N≥2的场景,自动适配2:1:2、3:2:3直到任意N:N-1:N的比例要求
内容的提问来源于stack exchange,提问作者P.Ellis
相关产品推荐
相关产品推荐

