首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > J2SE开发 >

为啥插入后原来的数组不会发生改变!

2013-12-30 
为什么插入后原来的数组不会发生改变!?/*面试题:给定一个有序的数组,如果往该数组中存储一个元素,并保证这

为什么插入后原来的数组不会发生改变!?
/*
面试题:
给定一个有序的数组,如果往该数组中存储一个元素,并保证这个数组还是有序的,
那么这个元素的存储的角标该如何获取。
*/

import java.util.Arrays;

class ArrayDemo4
{
public static void main(String[] args)
{
int[] arr = {13, 15, 19, 28, 33, 45, 78, 106};

int index = halfSearch(arr, 50);

System.out.println(Arrays.toString(arr));

insert(arr, index, 50);

System.out.println(Arrays.toString(arr));

}

public static int halfSearch(int[] arr, int key)
{
int max, min, mid;
min = 0;
max = arr.length-1;

mid = 0;

while(min <= max)
{
mid = (max+min) >> 1;//相当于除2

if(key < arr[mid])
max = mid-1;
else if(key > arr[mid])
min = mid+1;
else
return mid;
}

return min;
}

public static void insert(int[] arr, int index, int num)
{
arr = Arrays.copyOf(arr, arr.length+1);//对数组进行扩充

for(int i  = arr.length-1; i > index; i--)
{
arr[i] = arr[i-1];
}

arr[index] = num;

System.out.println(Arrays.toString(arr));
}
}
[解决办法]
import java.util.Arrays;

class ArrayDemo4 {

static int[] arr = { 13, 15, 19, 28, 33, 45, 78, 106 };

public static void main(String[] args) {


int index = halfSearch(50);

System.out.println(Arrays.toString(arr));

insert(index, 50);

System.out.println(Arrays.toString(arr));

}

public static int halfSearch(int key) {
int max, min, mid;
min = 0;
max = arr.length - 1;

mid = 0;

while (min <= max) {
mid = (max + min) >> 1;// 相当于除2

if (key < arr[mid])
max = mid - 1;
else if (key > arr[mid])
min = mid + 1;
else
return mid;
}

return min;
}

public static void insert(int index, int num) {

arr = Arrays.copyOf(arr, arr.length + 1);// 对数组进行扩充

for (int i = arr.length - 1; i > index; i--) {

arr[i] = arr[i - 1];

}

arr[index] = num;

System.out.println(Arrays.toString(arr));
}
}

[解决办法]
亲  有你那么麻烦吗?




public class Test {

public static void main(String[] args) {

int[] arr = {13, 15, 19, 28, 33, 45, 78, 106};
int index=search(arr,14);
System.out.println(index);
}

public static int search(int[] arr,int a)
{
for(int i=0;i<arr.length;i++)
{
int index=0;
if(arr[i]>a)
{
index=i;
return index;
}


}

return arr.length;
}

}

[解决办法]
引用:
亲  有你那么麻烦吗?



public class Test {

public static void main(String[] args) {

int[] arr = {13, 15, 19, 28, 33, 45, 78, 106};
int index=search(arr,14);
System.out.println(index);
}

public static int search(int[] arr,int a)
{
for(int i=0;i<arr.length;i++)
{
int index=0;
if(arr[i]>a)
{
index=i;
return index;
}


}

return arr.length;
}

}
抱歉  改动了你的数字  把查找的数字改成50就欧克了  欢迎批评


[解决办法]
public static void insert(int[] arr, int index, int num)
{
arr = Arrays.copyOf(arr, arr.length+1);//对数组进行扩充

Java传值参数。你可以改变arr里的内容,不能改变arr本身。
[解决办法]
你们真是都没搞清楚别人问的什么,人家是问用这个方法之后为什么原来的数组没有改变,就是9楼说的,
你对你那个方法里面的arr就行赋值只是把它的引用指向了那个值,但这个arr只是这个方法里面的变量
和你主方法里面的变量一毛钱关系没得。所以你改了之后没得用。
你可以把对数组扩充着句写到main里面然后把改变之后的数组传到insert方法里面。

热点排行