当前位置: 代码迷 >> J2SE >> 为何插入后原来的数组不会发生改变!
  详细解决方案

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

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

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方法里面。
  相关解决方案