0

コンソールから複数の行を読み取り、それを配列リストに格納する方法として、誰かがコードを手伝ってくれませんか?たとえば、コンソールからの入力は次のとおりです。

12     abc      place1
13     xyz      place2

このデータはArrayListに必要です。

これまでのところ、私はこのコードを試しました:

Scanner scanner = new Scanner(System.in);
ArrayList informationList = new ArrayList<ArrayList>();
String information = "";
int blockSize = 0, count = 1;
System.out.println("Enter block size");
blockSize = scanner.nextInt();
System.out.println("Enter the Information ");
while (scanner.hasNext() && blockSize >= count) {
    scanner.useDelimiter("\t");
    information = scanner.nextLine();
    informationList.add(information);
    count++;
}

どんな助けでも大歓迎です。

コンソールからの入力行は文字列と整数の混合です

4

1 に答える 1

2

いくつか問題があります。

まず第一に、ArrayListの初期化行が間違っています。Object整数と文字列の両方を保持できるようにオブジェクトのリストが必要な場合は、中括弧の中に入れる必要があります。また、オブジェクトのインスタンス化だけでなく、ジェネリック型の引数を変数定義に追加することをお勧めします。

次に、カウントを0ではなく1に初期化しているため、カウントが混乱しています。「ブロックサイズ」は、実際にはここでの行数を意味すると思います。それが間違っている場合はコメントを残してください。

次に、スキャナーが使用している区切り文字をリセットしたくないし、ループ内でリセットしたくないことは確かです。デフォルトでは、スキャナーは、データがタブと改行の両方で区切られているため、必要な空白に基づいてトークンを分割します。

また、while条件でhasNext()をチェックする必要はありません。next *()メソッドはすべて入力の待機をブロックするため、hasNext()の呼び出しは不要です。

最後に、スキャナーを実際に活用して、トークンを任意のタイプに解析するという、スキャナーが最も得意とすることを実行しているわけではありません。ここでは、すべてのデータ行が1つの整数で始まり、その後に2つの文字列が続くと想定しています。その場合は、ループ内でnextInt()を呼び出してからnext()を2回呼び出すだけで、すべてのデータが解析され、必要なデータ型に自動的に変換されます。

要約すると、これが私の提案すべてとそれを実行するための他のいくつかのビットで更新されたコードです:

import java.util.ArrayList;
import java.util.Scanner;

public class Example {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        ArrayList<Object> list = new ArrayList<>();
        System.out.println("Enter block size");
        int blockSize = scanner.nextInt();
        System.out.println("Enter data rows:");
        int count = 0;
        while (count < blockSize) {
            list.add(scanner.nextInt());
            list.add(scanner.next());
            list.add(scanner.next());
            count++;
        }
        System.out.println("\nThe data you entered is:");
        System.out.println(list);
    }
}
于 2012-07-23T22:58:31.290 に答える