黑马程序员技术交流社区

标题: 一个冒泡排序的头痛问题!!!!!!!!!!!!!!!!!!!!!! [打印本页]

作者: 梁健    时间: 2011-11-13 21:07
标题: 一个冒泡排序的头痛问题!!!!!!!!!!!!!!!!!!!!!!
public class MaoPao{

   public static void main(String[] args){
    int arr[]={28,79,54,33,65,31,21};
    for(int j=arr.length-1;j>1;j++){
        for(int i=0;i<j;i++){
      if(arr[i]>arr[i+1]){
       int temp=arr[i];
       arr[i]=arr[i+1];
       arr[i+1]=temp;
      
         }
   
   
            }
    }
   
    for(int i=0;i<arr.length;i++){
    System.out.print(arr[i]+" ");
    }
}

}
编译的时候没问题,每次运行就会出现溢出现象,哪里出错了,希望能有达人帮忙指正下。

作者: 沙铁健    时间: 2011-11-13 21:24
晕 用 断点 设置 看变量啊
作者: wangqing    时间: 2011-11-13 21:27
第一个for不应该是j++吧
作者: 贺洪京    时间: 2011-11-13 21:36
package heima.cmo;
//这是我给你改好的代码,你对照一下
public class MaoPao{

           public static void main(String[] args){
            int arr[]={28,79,54,33,65,31,21};
            for(int j=arr.length-1;j>=0;j--){//这里的循环错了你以前是J++,这样会造出死循环,还有你不能让J>1因为这样你数组第一个和第二个元素就无法比较了。
                for(int i=0;i<j;i++){
              if(arr[i]>arr[i+1]){
               int temp=arr[i];
               arr[i]=arr[i+1];
               arr[i+1]=temp;
               
                 }
            
            
                    }
            }
            
            for(int i=0;i<arr.length;i++){
            System.out.print(arr[i]+" ");
            }
        }

        }

作者: 杨玉揆    时间: 2011-11-13 21:43
public class MaoPao{

   public static void main(String[] args){
    int arr[]={28,79,54,33,65,31,21};
     for(int j=arr.length-1;j>=0;j--)
    {
       for(int i=0;i<j;i++){
               if(arr[i]>arr[i+1]){
                int temp=arr[i];
                arr[i]=arr[i+1];
                       arr[i+1]=temp;
      
         }
             }
        System.out.print(arr[j]+" ");
    }
   
}

}
你看看这个代码 你是在第一个循环的时候搞错了
作者: 陈超    时间: 2011-11-13 22:30
j++改为j--;
作者: 刘博    时间: 2011-11-13 22:36
咱能写代码的时候有点层次感吗?让我们这初学者情何以堪······
作者: 清秋    时间: 2011-11-14 12:55
往论坛上贴代码的时候放“[code][/code]”里。不然。看起来太费力了
作者: 王新春    时间: 2011-11-14 13:37
是因为你这个for(int j=arr.length-1;j>1;j++)循环有问题,j的值就会从6开始一直增加,这样就会出现死循环,而里面的循环
for(int i=0;i<j;i++){
      if(arr>arr[i+1]){
       int temp=arr;
       arr=arr[i+1];
       arr[i+1]=temp;
中i 的值是小于j 的值得,所以i 的值随着j 的值不断增加而增加,所以就会出现下标越界的问题。

所以正确的是for(int j=arr.length-1;j>1;j--)
作者: 骚灵小情歌    时间: 2011-11-14 13:38
清秋同学的建议不错
作者: 赵燕燕    时间: 2011-11-14 19:00
出现溢出问题,很有可能是使用了角标不存在的数组元素,这时候就应该去检查循环临界值,for(int j=arr.length-1;j>1;j++),很容易会发现应该是j--,对于j>1处,如果不知道在什么时候结束,就把你写的临界值 j=2 带入试试,最后一次比较肯定是只比较一次,而你写的比较了两次
作者: xiwangliujiao    时间: 2011-11-14 19:21
应该是j--啊?建议以后别这样写了,容易搞错的




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