2

入力として、間にスペースを入れた数字のセットである文字列があります。次に例を示します。

"30 129 48 29 110 90"

私がやりたいのは、最初に数値を文字列として格納する2番目の配列を使用せずに、その文字列を取得して整数として配列に入力することです。これは私が行う方法を知っていることです:

String line = input.nextLine();
String[] arr = line.split(" ");
int[] array = new int[arr.length];


for (int i = 0; i < arr.length; i++){
    array[i] = Integer.parseInt(arr[i]);
}

仕事をするために2つの配列を作成したくないのですが、何らかの方法でforループで一度に実行したいのですが、それが私の目には良く、クリーンなコードを書くのが好きなので、そのようにしたいと思います。後で簡単に修正できます。

編集:jogabonitoの答えの後、これは私が何とかしたことです

Scanner input = new Scanner(System.in);

    System.out.printf("Input: ");

    StringTokenizer line = new StringTokenizer(input.nextLine());
    int[] numbers = new int[line.countTokens()];


    for (int i = 0; line.hasMoreTokens(); i++){
        numbers[i] = Integer.parseInt((String)line.nextElement());
    }
4

4 に答える 4

4

現在のアプローチは問題ありませんが、必要に応じてStringTokenizerを使用してこれを行うことができます。によって決定されるサイズの int[] を作成し、countElements()次に while ループでInteger.parseInt(tokenizer.nextElement())

テスト済みコード:

    String input = "30 129 48 29 110 90";
    StringTokenizer tokenizer = new StringTokenizer(input);
    int count = tokenizer.countTokens();
    int x[] = new int[count];
    int i=0;
    while (tokenizer.hasMoreElements()) {
        x[i++] = Integer.parseInt((String)tokenizer.nextElement());
    }
于 2012-05-17T11:36:54.170 に答える
1

Collectionの代わりに配列を使用してもよろしいですか?

私は次の行に沿って何かを考えます

String input = "30 129 48 29 110 90";
List<Integer> list = new ArrayList<Integer>();

for (String token: input.split(" ")) {
    list.add( Integer.valueOf( token ) );
}

もちろん、リストを配列に変換できます。

Integer[] array = list.toArray( new Integer[] {} );
于 2012-05-17T11:58:16.470 に答える
1

スキャナーを使用できます:

Scanner sc = new Scanner(System.in);
while sc.hasNextInt()
   int i = sc.nextInt();

ただし、読みやすいかどうか、またはパフォーマンスが優れているかどうかはわかりません。しかし、それは確かにそれを行う別の方法です。また、そこにある int の数を事前に知ることはできないため、リストを使用する必要があります。

于 2012-05-17T11:32:49.867 に答える
0

見た目が良くなり、後で簡単に修正できるクリーンなコードを書くのが好きなので、そのようにしたいだけです。

その場合、何も変更しないでください。あなたが持っているものは、おそらく可能な限り読みやすいものです。

于 2012-05-17T11:30:56.910 に答える