AP计算机科学A:删除

学习AP计算机科学A的概念,示例问题和解释

大学导师应用商店 大学导师安卓商店

例子问题

问题21:标准操作与算法

下列哪个选项定义了一个方法,该方法成功地从整数数组中删除了一个项?

可能的答案:

public static int[] del(int[] a,int delIndex) {

if(a == null || delIndex < 0 || delIndex >= a.length) {

返回null;

}

Int [] ret = new Int [a];长度- 1];

For (int i1=0,i2 =0;I1 < a.length;i1 + +) {

if(i1 == delIndex) {

删除(i1);

}

}

返回受潮湿腐烂;

}

这些都不能正常工作

public static int[] del(int[] a,int delIndex) {

if(a == null || delIndex < 0 || delIndex >= a.length) {

返回null;

}

Int [] ret = new Int [a];长度- 1];

For (int i1=0,i2 =0;I1 < a.length;i1 + +) {

if(i1 != delIndex) {

Ret [2] = a[1];

i2 + +;

}

}

返回受潮湿腐烂;

}

public static int[] del(int[] a,int delIndex) {

if(a == null || delIndex < 0 || delIndex >= a.length) {

返回null;

}

Int [] ret = new Int [a];长度- 1];

For (int I = 0;i <= delIndex;我+ +){

Ret [i] = a[i];

}

返回受潮湿腐烂;

}

public static int[] del(int[] a,int delIndex) {

if(a == null || delIndex < 0 || delIndex >= a.length) {

返回null;

}

For (int I = 0;i <= delIndex;我+ +){

if(i == delIndex) {

删除一个[我];

打破;

}

}

返回一个;

}

正确答案:

public static int[] del(int[] a,int delIndex) {

if(a == null || delIndex < 0 || delIndex >= a.length) {

返回null;

}

Int [] ret = new Int [a];长度- 1];

For (int i1=0,i2 =0;I1 < a.length;i1 + +) {

if(i1 != delIndex) {

Ret [2] = a[1];

i2 + +;

}

}

返回受潮湿腐烂;

}

解释

当然,这是一种低效的删除方式,但是数组是相当“锁定”的数据结构,因为它们的大小不能在不重新赋值的情况下改变。(当然,您可以跟踪最后一个“使用”的索引。然而,这是一个不同的实现,没有反映在这里。)正确的答案是仔细遍历原始数组,将这些内容复制到新数组中,跳过一个不需要的值。

问题1:删除

公共静态布尔移除(int[] arr, int val) {

布尔值found = false;

int我;

For (i = 0;I < r。长度&& !找到;我+ +){

如果(arr[i] == val) {

Found = true;

}

}

如果(发现){

For (int j = i;J < arr.length;j++) {

[j - 1] = [j];

}

arr (arr)。长度- 1]= 0;

}

返回发现;

}

对于上面的代码,变量的内容是什么加勒比海盗在执行结束时,如果方法被调用,其参数值如下:

Arr = {3,4,4,5,17,4,3,1}

Val = 4

可能的答案:

{3,5,17,3,1}

{3,4,5,17,4,3,1,0}

{3,4,5,17,4,3,1}

没有其他答案

{3,5,17,3,1,0,0,0}

正确答案:

{3,4,5,17,4,3,1,0}

解释

这段代码通过移动数组后面的所有元素来模拟从数组中删除一个值,以便数组不再包含该值的第一个实例。例如,这段代码取原始数组{17, 3、4、4、5、4、3、1}注意到4的第一个实例{3,44、4、5、17日,3日,1}。接下来,它开始把东西移到左边。因此,一些步骤看起来像这样:

{17, 3、4、4、5、4、3、1}

{17, 3、4、5、5、4、3、1}

{3、4、5,17日,17日,4、3、1}

{17, 3、4、5、5、4、1、1}

然后,在最后,它将最后一个元素设置为0:

{3、4、5,17岁,4、3、1,0}

问题21:计算机科学

Int [] arr = new Int [20];

Int x = 6,i=2;

For (int j = 0;J < x;j + +) {

Arr [j] = j * 40 + 20;

}

For (int j = x;J > i;j () {

[j] = [j - 1];

}

Arr [i] = 20;

For (int j = 0;J < x;j + +) {

system . out。Print (arr[j] + " ");

}

上面代码的输出是什么?

可能的答案:

20 60 20 100 140 180

20 60 20 100 140 180 220

20 60 20 140 180 220

其他的都没有

20 60 20 100 100 100

正确答案:

20 60 20 100 140 180

解释

通过一些代码解析来理解这一点是最容易的:

首先是循环:for(int j = 0;J < x;j++){//…

这将用20 + 0,20 + 40,20 + 80,…因此,它将是:

20、60、100、140、180、220

接下来是数组:for(int j = x;J > i;J——){//…

这基本上移动了index之后的所有内容向后1。因此,你有:

20、60、100、100、140、180、220

接下来,将arr[2]设置为20:

20、60、20、100、140、180、220

最后输出第一个6元素。这里要小心。注意它来自J = 0到x - 1!

因此,答案是:

20 60 20 100 140 180

这个算法基本上实现了一种简单的数组删除。

大学导师提供的学习工具