1

現在、2 つの配列への入力を同時に受け入れようとしています。その理由は、配列の各位置のデータが対応しているためです。名前とID番号。

String[] arr = new String[5];
    int[] arr1 = new int[5];

    Scanner kb = new Scanner(System.in);
    for(int i = 0; i<5; i++)
    {
        System.out.println("Enter a name:");
        arr[i] = kb.nextLine();
        System.out.println("Enter an ID:");
        arr1[i] = kb.nextInt();
    }

私はこれまでこのコードを持っていますが、実行するたびに名前と ID を要求し、次に両方を要求しますが、ID のみを受け入れます。

名前の入力が許可されない理由がわかりません。そのために互換性のないデータ型エラーが返されるだけです。

4

3 に答える 3

5

2 回目の繰り返しから、kb.nextLine()名前を読み取ると\n、ID 整数を入力するために入力された改行文字が飲み込まれます。

実際の問題は、数値トークンではないトークンをnextInt()残すことです。他のメソッドが読み取りを試みるたびに、そのメソッドはその入力を受け取ります。メソッドは の後に戻るため、問題が発生します。charstdinstdinnextLine\n

したがって、次のようにコードを変更します。

String[] arr = new String[5];
        int[] arr1 = new int[5];

        Scanner kb = new Scanner(System.in);
        for(int i = 0; i<5; i++)
        {
            System.out.println("Enter a name:");
            arr[i] = kb.nextLine();
            System.out.println("Enter an ID:");
            arr1[i] = kb.nextInt();
            kb.nextLine();  //now this swallows new line
        }

または、2 つのスキャナーを使用することもできます。必要に応じて、入力を与えるような関係がないようにする必要があります...競合はまったくありません...それが効率的でないかどうかはわかりません。

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.*;

public class Tester {

public static void main(String[] args) throws Exception {

String[] arr = new String[5];
        int[] arr1 = new int[5];

        Scanner kb = new Scanner(System.in);
        Scanner  bc=new Scanner(System.in);
        for(int i = 0; i<5; i++)
        {
            System.out.println("Enter a name:");
            arr[i] = kb.nextLine();
            System.out.println("Enter an ID:");
            arr1[i] = bc.nextInt();
        }}
}
于 2013-06-03T09:18:04.323 に答える