如何修改printQueue方法:仅打印限额内O,不输出超限X
解决收银队列仅打印限额内O的问题
原代码在打印收银队列时,会对超出限额或队列长度的位置输出X,现在需要修改为仅显示各收银台限额内的有效O,超出部分不输出任何内容。
修改思路
- 缩小循环范围:只遍历到三个收银台「限额与实际队列长度的较小值」中的最大值,避免处理完全不需要打印的行。
- 替换占位符:当位置超出当前收银台的限额或队列范围时,输出空字符串而非X,这样对应位置不会显示任何内容。
修改后的代码
private void printQueue(String[] cashier1, String[] cashier2, String[] cashier3) { int maxLimit1 = 2; // Maximum limit for cashier1 int maxLimit2 = 3; // Maximum limit for cashier2 int maxLimit3 = 5; // Maximum limit for cashier3 // 计算每个收银台的有效打印长度(限额和实际长度取较小值) int validLength1 = Math.min(maxLimit1, cashier1.length); int validLength2 = Math.min(maxLimit2, cashier2.length); int validLength3 = Math.min(maxLimit3, cashier3.length); // 循环仅遍历到需要打印的最大行数 int maxQueueSize = Math.max(validLength1, Math.max(validLength2, validLength3)); for (int i = 0; i < maxQueueSize; i++) { String value1 = (i < validLength1 && cashier1[i] != null) ? "O " : ""; String value2 = (i < validLength2 && cashier2[i] != null) ? "O " : ""; String value3 = (i < validLength3 && cashier3[i] != null) ? "O " : ""; System.out.printf("%-10s %-10s %-10s%n", value1, value2, value3); } }
关键改动说明
- 有效长度计算:用
Math.min(限额, 队列长度)得到每个收银台实际需要打印的行数,避免处理超出限额的部分。 - 循环范围调整:基于三个有效长度的最大值设置循环终止条件,不会遍历完全没有内容的行。
- 占位符替换:不符合条件时返回空字符串,
printf的格式化会保留占位宽度但不显示X,实现仅展示有效O的需求。
内容的提问来源于stack exchange,提问作者Seniru Senarathne
相关产品推荐
相关产品推荐

