单行输入数字,并将其存储到数组中

时间:2014-11-15 16:10:03

标签: java arrays java.util.scanner user-input

import java.util.Scanner;

class HistogramChart
{
   public static void main(String[] args)
   {
      Scanner scan = new Scanner(System.in);

      System.out.println("Please enter the population of data: ");
      int populationOfData = scan.nextInt();

      System.out.println("Please enter data separated by spaces: ");
      String data = scan.next();

      int indexWhiteSpace = data.indexOf(" ");

      int[] dataArray = new int[populationOfData];
      int tempInt = 0;

      for(int index = 0; index < populationOfData; index++)
      {
         String tempString = data.substring(0, indexWhiteSpace);
         data = data.substring(indexWhiteSpace+1, data.length());
         tempInt = Integer.parseInt(tempString);

         dataArray[index] = tempInt;
         indexWhiteSpace = data.indexOf(" ");
      }
      System.out.println(dataArray[0]);   
   }
}

我意识到还没有打印整个阵列,因为我只是想让它打印任何东西,但这会不断打印以下错误:

&#34;线程中的异常&#34; main&#34; java.lang.StringIndexOutOfBoundsException:字符串索引超出范围:-1     at java.lang.String.substring(String.java:1954)     在HistogramChart.main(HistogramChart.java:22) &#34; 我无法弄清楚为什么会这样说。 请帮忙!

2 个答案:

答案 0 :(得分:2)

为什么不使用拆分?

class HistogramChart {

   public static void main(String[] args) {
      Scanner scan = new Scanner(System.in);

      System.out.println("Please enter data separated by spaces: ");
      String data = scan.nextLine();

      String tmpDataArray[] = data.split(" ");

      int dataArray[] = new int[tmpDataArray.length];
      for (int i = 0; i < dataArray.length; ++i) {
          dataArray[i] = Integer.parseInt(tmpDataArray[i]);
      }
}

答案 1 :(得分:-1)

如果我没记错的话,请使用

 String data = scan.next();

就像你正在做的那样,你只需扫描一个元素。尝试使用scan.nextLine()以便它占用整行,然后按空格分割,以便获得数据数组。而它实际上给你的问题是因为你寻找indexOf(" ")但是因为你没有读完整行,所以你会得到一个-1。当您尝试查找索引为-1的子字符串时,您会收到该错误。