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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

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]+" ");
    }
}

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

11 个回复

倒序浏览
晕 用 断点 设置 看变量啊

评分

参与人数 1技术分 +1 收起 理由
宁超 + 1 好方法。

查看全部评分

回复 使用道具 举报
第一个for不应该是j++吧

评分

参与人数 1技术分 +1 收起 理由
宁超 + 1

查看全部评分

回复 使用道具 举报
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]+" ");
            }
        }

        }

评分

参与人数 1技术分 +1 收起 理由
宁超 + 1

查看全部评分

回复 使用道具 举报
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]+" ");
    }
   
}

}
你看看这个代码 你是在第一个循环的时候搞错了

评分

参与人数 1技术分 +1 收起 理由
宁超 + 1

查看全部评分

回复 使用道具 举报
陈超 黑马帝 2011-11-13 22:30:53
地板
j++改为j--;

评分

参与人数 1技术分 +1 收起 理由
宁超 + 1

查看全部评分

回复 使用道具 举报
刘博 黑马帝 2011-11-13 22:36:22
7#
咱能写代码的时候有点层次感吗?让我们这初学者情何以堪······
回复 使用道具 举报
清秋 黑马帝 2011-11-14 12:55:54
8#
往论坛上贴代码的时候放“[code][/code]”里。不然。看起来太费力了
回复 使用道具 举报
王新春 黑马帝 2011-11-14 13:37:51
9#
是因为你这个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 19:00:54
11#
出现溢出问题,很有可能是使用了角标不存在的数组元素,这时候就应该去检查循环临界值,for(int j=arr.length-1;j>1;j++),很容易会发现应该是j--,对于j>1处,如果不知道在什么时候结束,就把你写的临界值 j=2 带入试试,最后一次比较肯定是只比较一次,而你写的比较了两次
回复 使用道具 举报
应该是j--啊?建议以后别这样写了,容易搞错的
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马