Kattis问题Hitastig提交报运行时错误(测试用例26/31失败)
Kattis Hitastig 运行时错误(测试用例26/31)问题排查
你的代码触发运行时错误的核心原因是输入的温度值超出了Java int类型的取值范围,导致Scanner.nextInt()抛出InputMismatchException异常。
Java中int的取值范围是-2147483648到2147483647,如果测试用例26中存在超出该范围的温度值,使用nextInt()读取就会直接触发运行时异常。
另外,你提到处理了n=0的边界情况,但当前代码在n=0时会输出Integer.MIN_VALUE和Integer.MAX_VALUE,这可能不符合题目对空输入的输出要求(不过这通常会导致答案错误而非运行时异常)。
解决方案
- 扩大数值类型范围:将温度相关变量改为
long类型,使用Scanner.nextLong()读取输入,支持更大范围的数值。 - 优化空输入逻辑:若题目允许
n=0,需根据要求调整输出(比如不输出内容);若题目规定n≥1则可忽略此判断。
修改后的代码:
import java.util.Scanner; public class hitastig { public static void main(String[] args) { Scanner myScanner = new Scanner(System.in); int n = myScanner.nextInt(); long maxTemp = Long.MIN_VALUE; long minTemp = Long.MAX_VALUE; for (int i = 0; i < n; i++) { long temp = myScanner.nextLong(); maxTemp = Math.max(maxTemp, temp); minTemp = Math.min(minTemp, temp); } // 仅当存在温度数据时输出结果 if (n > 0) { System.out.println(maxTemp + " " + minTemp); } myScanner.close(); } }
备选优化(针对大输入场景)
如果测试用例包含超大输入量,Scanner的读取效率可能不足,可改用BufferedReader提升稳定性:
import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.StringTokenizer; public class hitastig { public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); int n = Integer.parseInt(br.readLine()); long maxTemp = Long.MIN_VALUE; long minTemp = Long.MAX_VALUE; StringTokenizer st = new StringTokenizer(br.readLine()); for (int i = 0; i < n; i++) { long temp = Long.parseLong(st.nextToken()); maxTemp = Math.max(maxTemp, temp); minTemp = Math.min(minTemp, temp); } if (n > 0) { System.out.println(maxTemp + " " + minTemp); } br.close(); } }
内容的提问来源于stack exchange,提问作者Nikolas Kolic
相关产品推荐
相关产品推荐

