3

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

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)

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

4

6 回答 6

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

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

于 2013-08-23T16:57:48.350 回答
3

从文档中Scanner#nextInt()

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

所以,听起来你Scanner正试图读入一个int但得到的东西它不能变成一个int(它读到的不是数字或数字太大)。

您在这里调用相关函数:

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

我的猜测是,在某些时候,您的调用会.nextLine()占用一整行,而下一行则以“区域”开头。如果不知道您期望输入的格式如何,我将无法做更多。

于 2013-08-23T16:45:56.847 回答
1

来自InputMismatchException 的 JavaDoc

由 Scanner 抛出以指示检索到的令牌与预期类型的​​模式不匹配,或者令牌超出预期类型的​​范围。

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

于 2013-08-23T16:44:22.837 回答
1

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

于 2013-08-23T16:44:23.413 回答
1

输入不能被解析为整数。也许你在行尾有一个逗号。

顺便提一句:

如果(搜索==区域[j])

检查字符串相等性是不好的做法。将 search.equals(area[j]) 与空检查一起使用。

于 2013-08-23T16:47:55.603 回答
0

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

于 2017-12-05T15:15:21.133 回答