例子问题
问题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) {
ret (i2) = (i1);
i2 + +;
}
}
返回受潮湿腐烂;
}
public static int[] del(int[] a,int delIndex) {
if(a == null || delIndex < 0 || delIndex >= a.length) {
返回null;
}
For (int I = 0;我< = 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 I = 0;我< = delIndex;我+ +){
ret[我]=[我];
}
返回受潮湿腐烂;
}
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 (i2) = (i1);
i2 + +;
}
}
返回受潮湿腐烂;
}
当然,这是一种低效的删除方式,但是数组是相当“锁定”的数据结构,在没有重新分配的情况下,它们的大小不能改变。(当然,您可以跟踪最后一个“使用”的索引。然而,这是一个不同的实现,这里没有反映。)正确的答案是仔细地遍历原始数组,将这些内容复制到新数组中,跳过不需要的值。
例子问题1:删除
公共静态布尔值删除(int[] arr, int val) {
布尔值发现= false;
int我;
(我= 0;我<加勒比海盗。长度& & !发现;我+ +){
If (arr[i] == val) {
发现= true;
}
}
如果(发现){
For (int j = i;J < arr.length;j++) {
Arr [j - 1] = Arr [j];
}
arr (arr)。长度- 1]= 0;
}
返回发现;
}
对于上面的代码,变量的内容是什么加勒比海盗
在执行结束时,如果使用以下参数值调用该方法:
arr ={17, 3、4、4、5、4、3、1}
val = 4
{3, 5, 17, 3, 1, 0, 0}
{3,4,5,17,4,3,1}
{3, 4, 5, 17, 4, 3, 1,0}
其他答案都没有
{3, 5, 17, 3, 1}
{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 () {
Arr [j] = Arr [j - 1];
}
加勒比海盗[我]= 20;
For (int j = 0;j < x;j + +) {
system . out。Print (arr[j] + " ");
}
上面代码的输出是什么?
20 60 20 140 180 220
20 60 20 100 140 180 220
20 60 20 100 140 180
其他人都没有
20 60 20 100 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——){//…
这基本上转移了index后面的所有东西我落后1。因此你有:
20, 60, 100,100, 140, 180, 220
接下来,你设置arr[2]等于20:
20, 60, 20,100, 140, 180, 220
最后输出每一个第一个6元素。这里要小心。注意它是fromj = 0到x - 1!
因此,答案是:
20 60 20 100 140 180
这个算法基本上实现了一种简单的数组删除。