【发布时间】:2019-03-14 23:11:59
【问题描述】:
今天早些时候,我的教授在课堂上布置了一项在不返回新数组的情况下反转数组的作业,他希望(但没有告诉)我们在不添加和附加元素的情况下这样做。我想出的解决方案如下:
ArrayList<Double> al = new ArrayList<Double>();
al.add(5.00);
al.add(1.00);
al.add(4.00);
al.add(2.00);
al.add(3.00);
for (int i = al.size()-1; i >=0; i--)
{
double temp = al.get(i);
int zeroUp = ((al.size()-1)-i);
al.set(zeroUp, temp);
}
System.out.println(al.toString());
哪个prints: [3.0, 2.0, 4.0, 2.0, 3.0].我注意到它每次都会中途停止,但我不明白为什么。 Set() 不会删除其值将被发送到传递的索引的元素,是吗?我在一些随机网站上发现正确答案是:
for (int i = al.size() / 2; i >=0; i--)
{
double temp = al.get(i);
int zeroUp = ((al.size()-1)-i);
al.set(i, al.get(zeroUp));
al.set(zeroUp, temp);
}
System.out.println(al.toString());
输出:[5.0, 1.0, 4.0, 2.0, 3.0]
再次,为什么我们必须将size()除以2并为我标记的元素定义一个值?
【问题讨论】: