如何结合Scanner与Throttle类实现节流阀位置输入功能?
解决Scanner与Throttle类结合实现输入控制节流阀的问题
你的错误代码存在以下几个关键问题:
- 循环条件错误:
while(j > 6)仅处理输入大于6的情况,完全没覆盖输入小于0(除-1)的无效场景,也没实现输入-1退出的核心逻辑 - 提前关闭Scanner:在输入有效后立即调用
input.close(),会导致后续无法继续读取输入,直接抛出异常 - Throttle类使用不当:仅在初始化时传入一次输入值,后续输入无法更新节流阀的位置,也没有触发流量计算与展示
- 提示信息错误:无效输入提示要求输入1-6,但需求允许输入0
修正后的MainClass代码
package Pck1; import java.util.Scanner; public class MainClass { public static void main(String[] args) { Scanner input = new Scanner(System.in); // 初始化节流阀为0位 Throttle throttle = new Throttle(0); int inputPos; while (true) { System.out.println("请输入节流阀位置(0-6,输入-1退出):"); inputPos = input.nextInt(); // 输入-1时退出循环 if (inputPos == -1) { System.out.println("程序已退出"); break; } // 校验输入是否在0-6范围内 if (inputPos >= 0 && inputPos <= 6) { // 更新节流阀到指定位置:先关闭,再shift到目标值 throttle.shut_off(); throttle.shift(inputPos); // 展示节流阀状态与流量 if (throttle.is_on()) { System.out.printf("节流阀已开启,当前流量 = %.2f%n", throttle.flow()); } else { System.out.println("节流阀已关闭"); } } else { System.out.println("无效输入,请输入0-6之间的数字,或输入-1退出"); } } // 循环结束后关闭Scanner input.close(); } }
代码说明
- 循环逻辑:使用
while(true)构建无限循环,通过inputPos == -1的判断触发退出 - 节流阀位置更新:由于Throttle类没有直接设置position的方法,通过先调用
shut_off()重置为0,再调用shift(inputPos)将位置调整到用户输入的有效值 - 输入校验:严格判断输入是否在0-6区间内,只有有效输入才会触发节流阀更新与流量展示
- 资源管理:在循环结束后才关闭Scanner,避免提前关闭导致的输入异常
- 用户提示:明确提示输入规则,无效输入时给出正确引导
内容的提问来源于stack exchange,提问作者darth.vater
相关产品推荐
相关产品推荐

