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
相关产品推荐
相关产品推荐

