Java数组元素查找代码抛出InputMismatchException,如何解决?
Java数组查找代码抛出InputMismatchException异常解决
问题概述
编写的Java数组元素查找代码运行时抛出InputMismatchException,错误信息为:Exception in thread "main" java.util.InputMismatchException: For input string: "9" under radix 6。需求是根据给定的数组大小n、n个元素及目标数d,判断d是否在数组中,存在则输出其0-based索引,否则输出-1。
问题代码
import java.io.*; import java.util.*; public class Main{ public static void main(String[] args) throws Exception { Scanner scn = new Scanner (System.in); int n = scn.nextInt(); int[] arr= new int[n]; for(int i=0; i<arr.length; i++){ arr[i]= scn.nextInt(n); } int j = scn.nextInt(); int idx = -1; for(int i=0; i<arr.length ; i++){ if(j==arr[i]){ idx =i; System.out.print(idx); break; } } System.out.print(idx); } }
异常信息
Exception in thread "main" java.util.InputMismatchException: For input string: "9" under radix 6 at java.base/java.util.Scanner.nextInt(Scanner.java:2264) at Main.main(Main.java:13)
需求说明
- 给定数组大小n
- 给定n个不同的数组元素
- 给定目标数d
- 判断d是否在数组中,存在则输出其0-based索引,否则输出-1
输入输出格式
输入格式
一个整数n
n1
n2
...共n个元素
一个整数d
输出格式
输出d在数组中的索引,不存在则输出-1
示例
示例输入
6 15 30 40 4 11 9 40
示例输出
2
问题分析与修复
错误原因
代码中scn.nextInt(n)的参数n被Scanner当作**数字基数(进制)**使用,而非读取整数的数量。当输入的n=6时,Scanner会尝试将后续输入的数字解析为6进制数,但输入中的9在6进制中是非法字符(6进制仅包含0-5),因此抛出InputMismatchException。
此外,原代码的输出逻辑存在问题:找到目标元素时会先打印一次索引,循环结束后又打印一次,导致重复输出(例如示例中会输出22而非正确的2)。
修复后的代码
import java.io.*; import java.util.*; public class Main{ public static void main(String[] args) throws Exception { Scanner scn = new Scanner(System.in); int n = scn.nextInt(); int[] arr = new int[n]; // 移除nextInt的基数参数,按十进制解析输入 for(int i = 0; i < arr.length; i++){ arr[i] = scn.nextInt(); } int target = scn.nextInt(); int idx = -1; for(int i = 0; i < arr.length; i++){ if(target == arr[i]){ idx = i; break; // 找到后仅记录索引,不立即打印 } } // 统一输出结果,避免重复打印 System.out.println(idx); } }
修复要点
- 移除进制参数:将
scn.nextInt(n)改为scn.nextInt(),Scanner默认按十进制解析整数,解决进制解析错误。 - 修正输出逻辑:仅在循环结束后打印一次索引,确保输出符合要求。
内容的提问来源于stack exchange,提问作者shriya pandey
相关产品推荐
相关产品推荐

