A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© lucy198921 中级黑马   /  2013-4-4 23:01  /  1191 人查看  /  7 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 lucy198921 于 2013-4-6 18:52 编辑

数组的排序,如下所示,望指正.  

package cn.itcast;


class ArrayDemo3{
        private static Object end;
        private static Object start;
        public static void main(String[] args){
                int[] arr={3,4,5,6,7,8};
                revers(arr);
                printArr(arr);
        }
        public static void revers(int[] arr){
                for(int start=0;end==arr.length-1;start<end;start++,end--){
                        int temp=arr[(int) end];
                        arr[(int) end]=arr[(int)start];
                        arr[(int)start]= temp;
                }
        }
        public static void printArr(int[] arr){
                System.out.println("[ ");
                for(int x=0;x<arr.length;x++){
                        if(x==arr.length-1)
                                System.out.println(arr[x]);
                        else
                                System.out.println(arr[x]+",");
                }
                System.out.println("] ");
        }
}

7 个回复

倒序浏览
楼主,首先有点不太明白你说的排序是什么,但看你的代码猜出是想把数组进行返转
代码更改如下,你试试,看是不是你预想的结果:
  1. class ArrayDemo3 {
  2.         private static Object end;// 此句不知道楼主有何用?
  3.         private static Object start;// 此句不知道楼主有何用?

  4.         public static void main(String[] args) {
  5.                 int[] arr = { 3, 4, 5, 6, 7, 8 };
  6.                 revers(arr);
  7.                 printArr(arr);
  8.         }

  9.         public static void revers(int[] arr) {
  10.                 for (int start = 0, end = arr.length - 1; start < end; start++, end--) {//此处原代码给end赋值写成了比较运算符"=="了
  11.                         int temp = arr[(int) end];
  12.                         arr[(int) end] = arr[(int) start];
  13.                         arr[(int) start] = temp;
  14.                 }
  15.         }

  16.         public static void printArr(int[] arr) {
  17.                 System.out.println("[ ");
  18.                 for (int x = 0; x < arr.length; x++) {
  19.                         if (x == arr.length - 1)
  20.                                 System.out.println(arr[x]);
  21.                         else
  22.                                 System.out.println(arr[x] + ",");
  23.                 }
  24.                 System.out.println("] ");
  25.         }
  26. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
冯海霞 + 1

查看全部评分

回复 使用道具 举报
  1.       public static void revers(int[] arr){
  2.                 for(int start=0;end==arr.length-1;start<end;start++,end--){//此处括号中已经出现3个分号了,赋值符号写成了==号,而且你的代码写得冗余
  3.                         int temp=arr[(int) end];
  4.                         arr[(int) end]=arr[(int)start];
  5.                         arr[(int)start]= temp;
  6.                 }
  7.         }
复制代码

评分

参与人数 1技术分 +1 收起 理由
冯海霞 + 1

查看全部评分

回复 使用道具 举报
我对楼主的(int)感到疑惑????
回复 使用道具 举报
start和end作为Object对象,不能进行一元和二元运算。
for循环中可以定义局部变量int start,end,并且循环结束后就自动释放不占用内存,之前的定义在这个类的功能来看完全没有意义end的赋值语句是=,==是比较运算符,判断两边值是否相等返回的是boolean值。
  1. class ArrayDemo3{        
  2.         public static void main(String[] args){
  3.                 int[] arr={3,4,5,6,7,8};
  4.                 revers(arr);
  5.                 printArr(arr);
  6.         }
  7.         public static void revers(int[] arr){
  8.                 for(int start=0,end=arr.length-1;start<end;start++,end--){
  9.                         int temp=arr[end];
  10.                         arr[end]=arr[start];
  11.                         arr[start]= temp;
  12.                 }
  13.         }
  14.         public static void printArr(int[] arr){
  15.                 System.out.print("[ ");
  16.                 for(int x=0;x<arr.length;x++){
  17.                         if(x==arr.length-1)
  18.                                 System.out.print(arr[x]);
  19.                         else
  20.                                 System.out.print(arr[x]+",");
  21.                 }
  22.                 System.out.println("] ");
  23.         }
  24. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
冯海霞 + 1

查看全部评分

回复 使用道具 举报
楼主这个代码写的让我试非常的迷惑啊!object 的变量怎么能做基本运算呢!还有==这是比较 返回的是boolean;而不是赋值;你可以再for循环中定义int start和int  end
并把arr.length-1的值赋值给end,还有出现了语法错误 intstart=0后面要换成,号;你把for循环的代码换成下面试试就可以了
  public static void revers(int[] arr) {
                for (int start = 0, end = arr.length - 1; start < end; start++, end--) {
                        int temp = arr[(int) end];
                        arr[(int) end] = arr[(int) start];
                        arr[(int) start] = temp;
                }
        }

评分

参与人数 1技术分 +1 收起 理由
冯海霞 + 1

查看全部评分

回复 使用道具 举报
本帖最后由 王梦南 于 2013-4-6 13:44 编辑

按照我的推测,楼主是想要将数组逆序打出来吧?
我先来说说我的思路:
        要逆序输出数组,需要写两个方法,即楼主所写的revers和printArr
        而revers方法也只是将数组循环,循环内部在更改顺序就好了。
即:
  1. public static void revers(int[] arr){
  2.             int count = arr.length/2;
  3.             for(int i = 0;i<=count;i++){
  4.                     if(i<count){
  5.                             int temp = arr[i];
  6.                             arr[i]= arr[arr.length-i-1];
  7.                             arr[arr.length-i-1] = temp;
  8.                     }
  9.             }
  10.     }
复制代码
感觉楼主有些滥用static了,而for循环的条件也是让人眼晕,for循环的条件主要是控制循环次数的。楼主应该先考虑清楚怎么换数组位置。先不考虑数组的变化,把传进来的数组写死,再来写方法就容易了。

评分

参与人数 1技术分 +1 收起 理由
陈丽莉 + 1 加油~

查看全部评分

回复 使用道具 举报
60的技术分~  我不说,你也知道我要回复什么了吧~  ^_^
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马