【发布时间】:2021-11-27 13:52:04
【问题描述】:
我是计算机科学的新手。我被告知在以下 Java 类型伪代码中只有 1 个错误,但我无法弄清楚。不是有1个以上吗?首先 if 语句意味着它不会循环,因为大小不等于最大大小,但我认为循环也不正确,因为 i
private int size = 0;
private int maxsize = 16;
private int[] arr = new int[maxsize];
public void append(val, list)
{
if (size == maxsize)
{
int[] newArr = new int[maxsize * 2];
for (i = 0; i <= size ; i++)
newArr[i] = arr[i];
arr = newArr;
maxsize = maxsize*2;
}
arr[size++] = val;
}
在这些选项中,哪一个是正确的?
- 第 1 行应为:
private int size = 16; - 第 7 行应为:
if (size > maxsize) - 第 10 行应为:
for (i = 0 ; i <= maxsize ; i++) - 第 13 行应该在第 10 行之前
- 第 15 行应为:
arr[++size] = val;
【问题讨论】:
-
看循环后的代码。还要想想
size和maxSize代表什么。在循环条件不正确但出于错误原因的情况下,您处于正确的轨道上。想想当size == maxSize并且您想要访问原始数组时,i == size会发生什么。 -
我实际上看到了 1 个错误和 1 个潜力,但在代码中,但没有一个解决方案可以解决任何这些问题......
-
size在这里作为数组的索引,所以它从0开始,每次递增。因此,当它变为 16 时,表示数组中有 16 个元素,最后一个索引为 15,即 arr[15]。正如@Thomas 所指出的,当i==size表示arr[16] 时,这将导致ArrayIndexOutOfBoundsException。而不是for(i=0; i <= size ;i++),它应该是for(i=0; i < size ;i++),但它不在选项中。 -
根据您获得选项的方式以及您的反应方式,他们可能会试图让您失望(即您不应该依赖多项选择)并期望您回答“无这些选项中的一个修复了错误”——这就是我对实习生和学生所做的;)
-
投反对票,因为这与来自同一 OP 的 stackoverflow.com/questions/69472849/… 相同
标签: java arrays loops for-loop pseudocode