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

Java程序if语句内Scanner失效问题及开户存款功能实现咨询

解决Java中嵌套Scanner无法读取输入的问题

你的代码出现输入读取失败的核心原因是重复创建Scanner实例操作同一个System.in输入流。当第一个Scanner读取完用户输入后,输入流的指针状态会被改变,第二个Scanner尝试读取时会因为流状态异常而无法获取有效输入。

解决方案

只创建一个Scanner实例并在整个程序中复用,同时优化输入判定逻辑兼容大小写:

import java.util.Scanner;

public class main{

    public static void main(String[] args) {
        System.out.println(bank.Name);
        System.out.println(bank.location);
        System.out.println("bank id is: " + bank.bankId);

        customer open = factory.getInstance(1);
        customer close = factory.getInstance(2);
        customer deposit = factory.getInstance(3);

        // 全局复用一个Scanner实例
        Scanner scanner = new Scanner(System.in);
        
        System.out.print("你想要开户还是销户?");  
        String str = scanner.nextLine();                
        if(str.equalsIgnoreCase("open")){
            System.out.println(open.getOpen());
            System.out.print("是否要向账户内存款?");
            String x = scanner.nextLine();
            if(x.equalsIgnoreCase("yes")){
                System.out.println(deposit.getDeposit());
            }
        }
        else if(str.equalsIgnoreCase("close")){
            System.out.println(close.getClose());
        }
        else{
            System.out.println("输入无效");
        }
        
        // 关闭输入流释放资源
        scanner.close();
      }
    }

关键修改点

  • 避免重复创建Scanner:System.in是一个全局输入流,多个Scanner实例操作它会导致流状态混乱,复用单个实例即可解决读取问题。
  • 兼容大小写输入:使用equalsIgnoreCase()替代equals(),可以处理用户输入"Open""YES"这类大小写不匹配的情况,提升程序健壮性。
  • 关闭Scanner:程序结束后调用close()方法关闭输入流,遵循资源管理规范。

内容的提问来源于stack exchange,提问作者Kareem Alsayed Sleman

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 07:31:06