You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何结合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();
    }
}

代码说明

  1. 循环逻辑:使用while(true)构建无限循环,通过inputPos == -1的判断触发退出
  2. 节流阀位置更新:由于Throttle类没有直接设置position的方法,通过先调用shut_off()重置为0,再调用shift(inputPos)将位置调整到用户输入的有效值
  3. 输入校验:严格判断输入是否在0-6区间内,只有有效输入才会触发节流阀更新与流量展示
  4. 资源管理:在循环结束后才关闭Scanner,避免提前关闭导致的输入异常
  5. 用户提示:明确提示输入规则,无效输入时给出正确引导

内容的提问来源于stack exchange,提问作者darth.vater

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.01 21:13:18