黑马程序员技术交流社区

标题: 关于数组排序后多元素和遍历后范围多出元素的问题 [打印本页]

作者: 潘许超    时间: 2012-3-11 18:09
标题: 关于数组排序后多元素和遍历后范围多出元素的问题
下边一段代码一共传进去了九个元素,但是结果出现了是个元素,元素1被写了两次,而且有一个元素没有被排序放在了最后,还有就是在排列数组的外边还有一个元素就是那个没有被排序的元素,请问这是为什么?
/*
需求:对指定的数组进行操作实现从小到大的排序
思路:
1需要写一个for语句嵌套方法来实现数组的比较
2需要写一个遍历方法来实现数组的遍历打印
3最后使用主函数调用
步骤
1写for嵌套的循环
不需要返回值,有未知的内容参与运算
2写遍历的循环
不需要返回值,有未知的内容参与运算
3主函数给一个数组开始调用
*/
class  arraysort
{
        public static void compare(int[] arr)
        {
                for (int x=0;x<arr.length ;x++ )
                {
                        for(int y=x+1;y<arr.length-1;y++)
                        {
                                if(arr[x]>arr[y])
                                {
                                                int        temp=arr[x];
                                                        arr[x]=arr[y];
                                                        arr[y]=temp;
                                }
                        }
                }
        }
        public static void sort(int[] arr)
        {
                for(int b=0;b<arr.length;b++)
                {
                        if(b==0)
                                {
                        System.out.print("{"+arr[b]+",");
                        }
                        if(b==arr.length-1){
                        System.out.print(arr[b]+"}");
                        }
                        System.out.print(arr[b]+",");
                }
                System.out.println();
        }
        public static void main(String[] args)
        {
                int[] a={1,2,3,3,54,56,3,46,3};
                sort(a);
                compare(a);
                sort(a);
        }
}

作者: 杨波    时间: 2012-3-11 18:19
运行了下,是lzsort(int[] arr)方法打印顺序有问题,稍作修改如下:
public static void sort(int[] arr)
    {
            for(int b=0;b<arr.length;b++)
            {
                    if(b==0)
                            {
                    System.out.print("{");
                    }
                    
                    System.out.print(arr[b]+",");
                    if(b==arr.length-1){
                        System.out.print("}");
                        }
            }
            System.out.println();
    }
作者: 李明伟    时间: 2012-3-11 18:23
本帖最后由 李明伟 于 2012-3-11 18:25 编辑

遍历错误是  if  else语句使用不正确,比较时第二个for循环没有比较到最后一个,不能减1


正确代码:
public class test
{
        public static void compare(int[] arr)
        {
                for (int x = 0; x < arr.length; x++)
                {
                        for (int y = x + 1; y < arr.length; y++)
                        {
                                if (arr[x] > arr[y])
                                {
                                        int temp = arr[x];
                                        arr[x] = arr[y];
                                        arr[y] = temp;
                                }
                        }
                }
        }

        public static void sort(int[] arr)
        {
                for (int b = 0; b < arr.length; b++)
                {
                        if (b == 0)
                        {
                                System.out.print("{" + arr + ",");
                        } else if (b == arr.length - 1)
                        {
                                System.out.print(arr + "}");
                        } else
                                System.out.print(arr + ",");
                }
                System.out.println();
        }

        public static void main(String[] args)
        {
                int[] a =
                { 1, 2, 3, 3, 54, 56, 3, 46, 3 };
                sort(a);
                compare(a);
                sort(a);
        }
}

输出结果:
{1,2,3,3,54,56,3,46,3}
{1,2,3,3,3,3,46,54,56}
作者: 潘许超    时间: 2012-3-11 21:30
已解决谢谢各位




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