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

编辑:第二种方法:

   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 回答