如何将文件中的数字列表放入数组并返回数组

时间:2013-12-06 21:06:04

标签: java arrays file while-loop scope

在这个方法中,我试图从我传入方法的文件中创建一个数组(该文件有一个数字列表),然后我想返回数组。但是当我尝试运行我的代码时,弹出错误,它找不到符号“nums”。

我很肯定我有一个范围问题,但我不知道如何解决这个问题。

如何修复此代码以便正确返回数组?

这是我的代码:

   //reads the numbers in the file and returns as an array
   public static int [] listNumbers(Scanner input) { 
      while (input.hasNext()) {
         int[] nums = new int[input.nextInt()];   
      }
      return nums;
   }

2 个答案:

答案 0 :(得分:1)

这里至少有两个问题。

首先,numswhile循环中定义,当你退出循环时它会超出范围。这是编译错误的原因。如果要在循环结束后返回它,则需要将定义移出循环外。

然而,还有另外一个问题,就是在你读完整个文件之前,你不知道你的数组需要多大。创建ArrayList<Integer>并向其添加元素,然后在读完整个文件后将其转换为数组(如果需要)会容易得多。或者只返回列表,而不是数组。

  public static List<Integer> listNumbers(Scanner input) {
    List<Integer> nums = new ArrayList<Integer>();
    while (input.hasNext()) {
       nums.add(input.nextInt());   
    }
    return nums;
  }

答案 1 :(得分:0)

    List<Integer> list = new ArrayList<Integer>();
    while(input.hasNext())
    {
        list.add(input.nextInt());
    }

    int size = list.size();
    int[] nums = new int[size];

    int counter = 0;
    for(Integer myInt : list)
    {
        nums[counter++] = myInt;
    }    

    return nums;

此解决方案未经过测试,但可以为您提供一些方向。这也与西蒙所指的一致。