为什么我的数组(5个元素)动态改变大小?

时间:2017-01-02 00:48:10

标签: java arrays

我已声明String数组。

String[] csvColumns = new String[5];

但是,从CSV文件中读取时:

     String[] csvColumns = new String[5];  // Explicitly including this declaration again in case Stack Overflow users need to see the scope of the variable.
     String row;  // Will receive each column of 1 line at a time of the CSV file.
     while ((row = inFile.readLine()) != null)  // BufferedReader used to parse CSV File.
        {
        csvColumns = row.split(",");  // Each element of the array will recieve the value of each column.
        // Initialise class attributes with each column.
        }

如果CSV文件的一行中的列不包含任何值(在我的文件中,这只能是最后一列的情况,因为该列不是强制性的并且包含有关特定问题的注释)然后csvColumns将其大小减小1.如果我使用数组,我不知道这是如何实现的 - 但是我再说一遍新手程序员。

为什么会发生这种情况?

编辑*感谢这两个答案,非常有帮助。应该检查方法split的返回类型! (谢谢@chrylis)。

2 个答案:

答案 0 :(得分:4)

首先,csvColumns不是静态的(它似乎是局部变量),其次,它是变量,而不是数组。您将重新分配值(数组引用)作为split返回的新数组的引用。 (您创建并且从未使用的旧String[5]没有任何指向它并将被垃圾收集。)

答案 1 :(得分:3)

数组不会改变它的大小。您只需按此行创建一个新数组

Private rng As New Random

Private Sub PictureBoxes_Click(sender As Object, e As EventArgs) Handles PictureBox3.Click,
                                                                         PictureBox2.Click,
                                                                         PictureBox1.Click
    'Prcoess the PictureBox that was clicked.
    ProcessPictureBox(DirectCast(sender, PictureBox))
End Sub

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    'Process a random PictureBox.

    Dim pictureBoxes = {PictureBox1, PictureBox2, PictureBox3}
    Dim pictureBox = pictureBoxes(rng.Next(pictureBoxes.Length))

    ProcessPictureBox(pictureBox)
End Sub

Private Sub ProcessPictureBox(pictureBox As PictureBox)
    'Use pictureBox here.
End Sub

并将其分配给csvColumns = row.split(",") 变量。

旧的csvColumns数组将被垃圾收集,因为它不再被任何变量引用。

您可以更改

new String[5]

String[] csvColumns = new String[5];

您的代码仍然有效,因为您从不使用创建的数组。您只使用变量