假设我有一个二维数组,例如String array[][] = {{"",""},{"",""}}
,此数组将在新行中打印出每一行。
现在,我的问题是,如果用户想通过Scanner
输入使用一组新的行将其添加到该数组中,我该怎么做?
例如,假设我有一个库存清单,而我刚发现有新货到达。如何将此新库存添加到现有库存中。
我当时想的是,如果我的数组不够大,那么我将不得不制作一个更大的新数组,然后将原始数据复制到那里。至此,我可以添加新数据了。所以我在想几个for循环就足够了。但是我不知道如何在这里应用它?
最佳答案
是的,您可以通过调用Arrays.copyOf
方法,然后将其重新分配给初始对象来增加数组的大小。但是无论如何,如果您不想一次又一次地复制ArrayList
是一个更好的选择,因为当您在内部调用add(E e)时,它内部使用Arrays.copyOf
来增加Array的大小,因为它是内部执行的:
public boolean add(E e) {
ensureCapacityInternal(size + 1); // Increments modCount!!
elementData[size++] = e;
return true;
}
ensureCapacityInternal(size + 1)
检查分配给size + 1的默认容量的最大值,即10,如下所示:private void ensureCapacityInternal(int minCapacity) {
if (elementData == DEFAULTCAPACITY_EMPTY_ELEMENTDATA) {
minCapacity = Math.max(DEFAULT_CAPACITY, minCapacity);
}
ensureExplicitCapacity(minCapacity);
}
如果容量超过
ensureExplicitCapacity(minCapacity);
,则调用它,通过调用内部执行transient Object[]
的grow()
来增加Arrays.copyOf
的容量。希望这种解释有所帮助。
对于您的问题,您可以执行以下操作:
String array[][] = { { "hello", "how" }, { "are", "you" } };
Scanner scan = null;
String str = null;
int len = array.length;
int i = 0;
while (i != 6) { // provide the loop as you require
scan = new Scanner(new InputStreamReader(System.in));
str = scan.next();
try {
array[len][1] = str; // will try to add to second position. If array is out of index an exception will be thrown
len++; // won't increase if exception is thrown
} catch (ArrayIndexOutOfBoundsException e) {
array = Arrays.copyOf(array, len + 1); // copying the array
array[len] = new String[2]; // creating and assigning string array to new row else it will be null
array[len][0] = str; // adding new string to new array position
}
i++;
}
scan.close();
for (String[] strings : array) {
for (String string : strings) {
System.out.println(string);
}
}