3

最近、この Java プログラムを入力して、10 の領域とそのピンコードを受け入れ、検索して特定の領域を見つけ、そのピンコードを出力しました。プログラムのコードは次のとおりです。

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

そして、2つのエリアに入った後、このエラーが発生します:

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

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

入力を整数として解析できません。たぶん、行末にコンマがあります。

ところで:

if(検索==エリア[j])

文字列の等価性をチェックするのは悪い習慣です。null チェックで search. equals(area[j]) を使用します。

于 2013-08-23T16:47:55.603 に答える