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

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);
    }
}

修复要点

  1. 移除进制参数:将scn.nextInt(n)改为scn.nextInt(),Scanner默认按十进制解析整数,解决进制解析错误。
  2. 修正输出逻辑:仅在循环结束后打印一次索引,确保输出符合要求。

内容的提问来源于stack exchange,提问作者shriya pandey

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 13:10:35