例子问题
问题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
这个算法基本上实现了一种简单的数组删除。