Java错误“线程中的异常”main“java.util.InputMismatchException”在Array程序上

时间:2013-08-23 16:41:26

标签: java arrays

我最近输入了这个java程序来接受十个区域及其pin码,然后搜索找到一个特定区域并打印出它的pin码。 这是程序中的代码:

import java.util.Scanner;
public class Sal {

    public static void main (String args []){ 
        Scanner s=new Scanner(System.in);
        System.out.println("Enter 10 areas and their pincodes");
        String area[]=new String [10];
        int pincode[]=new int [10];
        String search;
        int chk=0;
        int p=0;

        for (int i=0;i<=9;i++){
            area[i]=s.nextLine();
            pincode[i]=s.nextInt();
        }

        System.out.println("Enter Search"); 
        search=s.nextLine();

        for (int j=0;j<=9;j++){
            if(search==area[j]){
                chk=1;
                j=p;
                break;
            }
        }

        if(chk==1){
            System.out.println("Search Found "+"Pincode : "+pincode[p] );
        } else {
            System.out.println("Search not Found");
        }
    }
}

进入两个区域后,我得到了这个错误:

Exception in thread "main" java.util.InputMismatchException
at java.util.Scanner.throwFor(Unknown Source)
at java.util.Scanner.next(Unknown Source)
at java.util.Scanner.nextInt(Unknown Source)
at java.util.Scanner.nextInt(Unknown Source)
at Sal.main(Sal.java:14)

有人可以告诉我我做错了什么! :/ 任何帮助表示赞赏。

6 个答案:

答案 0 :(得分:5)

首先,请记住缩小代码的可读性。

概念1。

for (int i=0;i<=9;i++){

area[i]=s.next();// Use this for String Input

pincode[i]=s.nextInt();

s.nextLine();//Use this for going to next line of input

}

概念2。

if(search.compareTo(area[j])==0){ 

//使用compareTo方法比较字符串(如果相等则返回0

您的其余代码和概念都是正确的:)

答案 1 :(得分:3)

来自Scanner#nextInt()的文档:

  

InputMismatchException - 如果下一个标记与整数正则表达式不匹配,或者超出范围

所以,听起来你的Scanner正试图在int中读取,但却得到一些不能变成int的内容(它所读取的内容不是数字或者数字太大了。)

您可以在此处调用相关功能:

for (int i=0;i<=9;i++){
    area[i]=s.nextLine();
    pincode[i]=s.nextInt(); // <-- the culprit
}

我的猜测是,在某些时候,您对.nextLine()的调用吞噬了整行,下一行以“区域”开头。如果不知道您希望如何格式化输入,我就无法做更多。

答案 2 :(得分:1)

来自InputMismatchException's JavaDoc

  

由扫描程序抛出,表示检索到的令牌与预期类型的​​模式不匹配,或者令牌超出预期类型的​​范围。

您似乎输入了一个字符串,而nextInt()需要一个整数。

答案 3 :(得分:1)

我假设错误发生在pincode[i]=s.nextInt();行(即第14行)。发生这种情况的原因是因为输入(来自System.in)无法解析为int。您确定要输入正确的值吗?

答案 4 :(得分:1)

无法将输入解析为整数。 也许你在行尾有一个逗号。

btw:

  

如果(搜索==面积[J])

检查字符串相等性是不好的做法。使用search.equals(area [j])和null-check。

答案 5 :(得分:0)

我是编程新手。但是,在为银行创建客户时,我遇到了类似的问题(这只是一个实践问题)。为了克服这个问题,我为每种输入类型创建了单独的扫描仪。在程序结束时关闭所有扫描仪。它奏效了。