5

Javaで問題が発生しています。数字をスキャンして(例:) 1 3 4 2 5 6 7、配列に入れる必要があります。問題は、それがどれくらいの期間になるかわからないことです。スキャナーに入力された数字の長さを判別するために使用できるコマンドはありますか?

4

4 に答える 4

3

回避策としてArrayListを使用したくない場合は、行全体を読んでから分割して、長さと個々の値を取得することをお勧めします。

   String line = scanner.nextLine();
   String[] values = line.split(" ");
   int[] intValues = new int[values.length];
   int indx = 0;
   for(String value:values){
     intValues[indx++] = Integer.parseInt(value);
   }

編集:2番目のアプローチ:

   List<Integer> numList = new ArrayList<Integer>();
   int number = 0;
   while (number != -1) {
      System.out.println("Enter a positive integer value (or -1 to stop): ");
      number = Integer.parseInt(in.nextLine());
      if (number != -1){
        numList.add(number);
      }
   }
   in.close();

   Integer[] numArray = numList.toArray(new Integer[numList.size()]);

EDIT2: 同じ行の複数の番号を処理し、空の行で終了します

List<Integer> numList = new ArrayList<Integer>();
while(true) {
   System.out.println("Enter a positive integer value (or -1 to stop): ");
   String line = in.nextLine();
   if(line.length() <1){
      break;
   }
   String [] numbers = line.split(" ");
   for(String num: numbers){
          numList.add(Integer.parseInt(num));
   }
 }
 in.close();

 Integer[] numArray = numList.toArray(new Integer[numList.size()]);
于 2012-11-01T13:49:09.583 に答える
1

可変サイズのコレクションが必要な場合は、 ArrayListを使用します。

ArrayList<Integer> lst = new ArrayList<Integer>();
lst.add(scanner.getInt());
于 2012-11-01T13:45:05.647 に答える
1

を使用できますArrayList。それを埋めて、最後に整数配列に変換するだけです。またはさらに良いことに、リストを保持してそれを処理します。

Scanner in = new Scanner(System.in);

ArrayList<Integer> intList = new ArrayList<Integer>();
while (true) {
  System.out.println("Enter a positive integer value (or -1 to stop): ");
  int number = in.nextInt();
  if (number < 0) break;
  intList.add(number);
}
// just use this last line if you really want an array. Work with the list instead if possible.
Integer[] yourFinalArray = intList.toArray(new Integer[0]);
于 2012-11-01T13:49:59.467 に答える
0

google Guavaライブラリ( https://code.google.com/p/guava-libraries/)を使用する場合は、次のように言うことができます。

String numbers="1 3 4 2 5 6 7";
Splitter.on(" ").split( numbers );

これにより、反復可能になります。文字列の配列を取得することを主張する場合は、次のように言うことができます。

Iterables.toArray(Splitter.on(" ").split( numbers ), String.class)
于 2012-11-01T14:10:18.157 に答える