如何解决求偶数最大与和程序的TIMEOUT(无限循环)错误
解决Java程序输出正确但触发超时错误的问题
你的程序逻辑没问题,循环是正常终止的——超时错误不是因为循环没结束,而是Scanner资源没关闭导致的。
有些在线评判平台会在程序执行完后检查输入流状态,如果发现Scanner还持有未释放的输入资源,会误以为程序还在等待输入,从而抛出"TIMEOUT (Infinite loop?)"的错误提示;而其他编译器/平台对资源释放的检查没这么严格,所以没出现这个问题。
修复方法
可以通过两种方式解决,核心都是确保Scanner资源被正确释放:
方法1:手动关闭Scanner
在程序末尾添加关闭语句:
static void evenSumMax() { Scanner sc = new Scanner(System.in); System.out.print("how many integers? "); int size = sc.nextInt(); int integer[] = new int[size]; int sum = 0; int max = 0; for (int i = 0; i < size; i++) { System.out.print("next integer? "); integer[i] = sc.nextInt(); if (integer[i] > 0 && integer[i] % 2 == 0) { sum += integer[i]; if (integer[i] > max) { max = integer[i]; } } } System.out.println("even sum = " + sum); System.out.println("even max = " + max); // 关闭Scanner释放输入资源 sc.close(); }
方法2:使用try-with-resources(推荐)
利用Java 7+的AutoCloseable特性,让系统自动关闭资源,避免手动遗漏:
static void evenSumMax() { // try块结束后,系统自动关闭sc try (Scanner sc = new Scanner(System.in)) { System.out.print("how many integers? "); int size = sc.nextInt(); int integer[] = new int[size]; int sum = 0; int max = 0; for (int i = 0; i < size; i++) { System.out.print("next integer? "); integer[i] = sc.nextInt(); if (integer[i] > 0 && integer[i] % 2 == 0) { sum += integer[i]; if (integer[i] > max) { max = integer[i]; } } } System.out.println("even sum = " + sum); System.out.println("even max = " + max); } }
两种方法都能解决超时问题,推荐用try-with-resources,它更安全,能避免因忘记关闭资源导致的类似问题。
内容的提问来源于stack exchange,提问作者Anthony
相关产品推荐
相关产品推荐

