【问题标题】:The unknown size of array数组的未知大小
【发布时间】:2016-03-03 18:27:11
【问题描述】:

在 Java 中,我试图读取文件,然后我想将它们放入一个数组中。但是当我声明一个数组时,由于长度未知而发生错误。这是一个例子:

Object unsortedInt[];
        try {
            BufferedReader bR = new BufferedReader(new FileReader(x));
            String values = bR.readLine();
            int index=0;
            while (values != null){
                unsortedInt[index]=values;
                values= bR.readLine();
                index++;
            }
            bR.close();
        }
        catch (IOException e) {
            e.printStackTrace();
        }

我可以使用 arraylist 来解决这个问题,但是有没有一种方法可以使用数组?

【问题讨论】:

  • 你读取文件一次,然后计算行数。然后,在用行数声明大小后,再次运行它以将其保存到数组中。
  • 顺便说一句,将所有类型信息保存在一个位置更为传统,即Object[] unsortedInt 而不是Object unsortedInt[]

标签: java arrays variable-length-array


【解决方案1】:

为了使用数组,您必须将数组初始化为某个初始长度。如果当前数组对于您的输入来说太小,您可以稍后创建一个更大的数组(并将原始数组的内容复制到其中)。这就是ArrayList 的实现方式。

【讨论】:

    【解决方案2】:

    我可以使用 arraylist 来解决这个问题,但是有没有一种方法可以使用数组?

    基本上只复现ArrayList的逻辑。不,没有办法获得可变长度数组。 Java 中的数组不支持这一点。

    如果你以后需要一个数组,你可以创建一个ArrayList,然后调用toArray创建数组。

    可以读取文件一次以计算行数,然后再读取一次以实际读取数据...但使用@会好多更好987654324@ 一边阅读。

    【讨论】:

      【解决方案3】:

      您可以尝试以下方法:

      public class AddItemToArray {
      
          private int[] list = new int[0];//you should initialize your array first. 
      
          public int[] getList() {
              return list;
          }
      
          public void push(int i) {
              int fLen = list.length;//you can check the current length of your array and add your value to the next element of your array with the copy of previous array
              list = Arrays.copyOf(list, list.length + 1);
              list[fLen] = i;
      
          }
      
          public static void main(String[] args) {
      
              AddItemToArray myArray = new AddItemToArray();
              myArray.push(10);
              myArray.push(20);
              myArray.push(30);
              System.out.println(Arrays.toString(myArray.getList()));
      
          }
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-11-13
        • 2019-06-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-09-14
        相关资源
        最近更新 更多