黑马程序员技术交流社区

标题: 关于数组的问题 [打印本页]

作者: Mr.Ji    时间: 2014-5-5 18:26
标题: 关于数组的问题
我自己考自己的一道题,考到最后我都不知道怎么回事了..结果跟我想的不一样,是不是数组赋值那出问题了?求大神帮看下,我刚学,是不是俩数组不能这样赋值?


运行结果是这个..
[5,6,7,7,23,46,54,56,68,98,323,435]
[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]



//定义一个数组{23,435,56,5,54,46,6,7,68,7,9,8,323}
//把它排序并且找到元素46的位置,用折半查找法
public class Test10
{

        public static void main(String[] args)
        {
                // TODO Auto-generated method stub
                int[] arr = {23,435,56,5,54,46,6,7,68,7,98,323};
                bubbleSort(arr);//冒泡法排序
                printArray(arr);//打印排序后的数组
                System.out.println();
                int[] arr2 = new int[30];//定义一个新数组
                arrayToArray(arr, arr2);//把arr中的元素赋值给arr2
                halfSearch(arr2, 46);//折半查找
        }
        public static void bubbleSort(int[] arr)//冒泡排序
        {
                for(int x = 0; x < arr.length-1; x++)
                {
                        for(int y = 0; y <arr.length-x-1;y++)
                        {
                                if(arr[y] > arr[y+1])
                                {
                                        int temp = arr[y];
                                        arr[y] = arr[y+1];
                                        arr[y+1] = temp;
                                }
                        }
                }
        }
        public static void printArray(int[] arr)//打印数组
        {
                System.out.print("[");
                for(int x=0; x < arr.length; x++)
                {
                        if(x!=arr.length-1)
                                System.out.print(arr[x] + ",");
                        else
                                System.out.print(arr[x] + "]");
                }
        }
        public static int halfSearch(int[] arr,int key)//折半查找
        {
                int min = 0, max = arr.length-1, mid = (min + max)/2;
                while(arr[mid]!=key)
                {
                if(key > arr[mid])
                        min = mid+1;
                else if(key < arr[mid])
                        max = mid-1;
               
                if(min > max)
                        return -1;               
                mid = (min+max)/2;
                }
                System.out.print("-----------");
                return mid;
        }
        public static void arrayToArray(int[] arr1, int[] arr2)//互换数组元素
        {
                for(int x = 0; x < arr1.length; x++)
                {
                        arr1[x] = arr2[x];
                }
                printArray(arr2);
        }
       

}

作者: 想飞的鱼    时间: 2014-5-5 21:54
本帖最后由 想飞的鱼 于 2014-5-5 21:56 编辑

首先复制了你的代码并运行了,结果和你说的一样,发现你在arrayToArray()方法中的赋值写反了,遂改成arr2[x] = arr1[x],输出结果如下:
[5,6,7,7,23,46,54,56,68,98,323,435]
[5,6,7,7,23,46,54,56,68,98,323,435,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0] //因为你定义的arr2数组长度为30
不知道结果和你想象的一样不一样。
作者: Mr.Ji    时间: 2014-5-5 22:05
想飞的鱼 发表于 2014-5-5 21:54
首先复制了你的代码并运行了,结果和你说的一样,发现你在arrayToArray()方法中的赋值写反了,遂改成arr2[x ...

原来是这样 谢谢。那样的话就对了,还有就是为啥我调用了halfSearch  它不返回mid 呢....没有结果....
作者: 想飞的鱼    时间: 2014-5-5 23:02
本帖最后由 想飞的鱼 于 2014-5-5 23:06 编辑
Mr.Ji 发表于 2014-5-5 22:05
原来是这样 谢谢。那样的话就对了,还有就是为啥我调用了halfSearch  它不返回mid 呢....没有结果.... ...

你定义的这种折半查找要注意必须保证是有序的数组,你调用halfSearch()方法时传进去的是arr2,而这是arr2数组输出的结果是[5,6,7,7,23,46,54,56,68,98,323,435,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]这不是一个有序数组,后面全是0,我试着创建arr2的时候数着你定义的arr数组的个数改成了int [] arr2 = new int[12]; 输出结果[5,6,7,7,23,46,54,56,68,98,323,435]
[5,6,7,7,23,46,54,56,68,98,323,435]-----------5   即角标为5的那个元素。
当然你要有一个变量接受这个mid的返回值输出一下看看,你没写所以即使有结果返回你也看不到了
作者: Mr.Ji    时间: 2014-5-5 23:26
想飞的鱼 发表于 2014-5-5 23:02
你定义的这种折半查找要注意必须保证是有序的数组,你调用halfSearch()方法时传进去的是arr2,而这是arr ...

确实没接收,谢谢了哥们,搞定了,我说怎么不返回,原来没定义一个接收的,只调用了方法  谢谢你
作者: 张然龙    时间: 2014-5-7 22:14
如果问题已解决,请把帖子结了哈!




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2