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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 王龙 中级黑马   /  2012-10-20 10:26  /  2786 人查看  /  9 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

public class Test2 {
        public static void main(String[] orgs){
                int[] arr={1,3,5,2,6,9,0};
                printArray(arr);
                bubberSort(arr);
                printArray(arr);
        }
        public static void bubberSort(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.println(arr[x]+"]");
                }
               
        }
}
}

评分

参与人数 1技术分 +1 收起 理由
杨志 + 1

查看全部评分

9 个回复

倒序浏览
temp 需要被初始化才能被使用
回复 使用道具 举报
因为temp为局部变量

评分

参与人数 1技术分 +1 收起 理由
滔哥 + 1

查看全部评分

回复 使用道具 举报
这里有点小错误:  
  if(arr[y]>arr[y+1])
  {
      int temp=arr[y];
      arr[y]=arr[y+1];
      arr[y+1]=temp;      
  }      
if语句里面没有用大括号给括起来,这就导致if只判断了它下面的第一行,然后就结束了。
所以后面的temp就报错了,因为没有定义temp,而定义temp的if语句已经结束了。
回复 使用道具 举报
    if(arr[y]>arr[y+1])
   int temp=arr[y];
   arr[y]=arr[y+1];
  arr[y+1]=temp;  
这段代码没有用 {} 括起来,导致在执行if语句时,它只判断离它最近的第一条语句。  又因为你temp定义的是局部变量。所以你后面使用到的temp  变量,未定义过,所以报错。

评分

参与人数 1技术分 +1 收起 理由
滔哥 + 1

查看全部评分

回复 使用道具 举报
局部变量中注意两点:
1,局部形式参数不需要初始化。
2,局部实际参数必须初始化。
你的问题刚好是局部实际参数的问题,对应解决一哈 就没问题了。。。。努力中

评分

参与人数 1技术分 +1 收起 理由
滔哥 + 1

查看全部评分

回复 使用道具 举报
if(arr[y]>arr[y+1])
     int temp=arr[y];
arr[y]=arr[y+1];
arr[y+1]=temp;            
因为if后面如果有多条语句时,这些语句要用一对大括号括起来,

如果不扩起来的话会将离if最近的一条语句作为条件成立后需要执行的语句.

你上面的代码没有加大括号,所以int temp=arr[y];这条语句会作为if语句成立后需要执行的语句.

但是上面的情况会造成arr[y+1]=temp;最后一条语句中的temp没有定义和初始化.所以会报异常.解决方法就是:

if(arr[y]>arr[y+1]){
     int temp=arr[y];
     arr[y]=arr[y+1];
     arr[y+1]=temp;
}      

评分

参与人数 1技术分 +1 收起 理由
邓艳秋 + 1

查看全部评分

回复 使用道具 举报
王龙 中级黑马 2012-10-22 15:19:43
8#
非常感谢大家
回复 使用道具 举报
森仔 中级黑马 2012-11-14 10:22:23
9#
if语句判段后执行语句,一般都以";"结束,你的目的是想运行下面三段互换值语句,可它只执行第一局后就以分号结束了,代表判断语句结束,下面两句无论if判断是否成立都将执行,而你int temp 在if语块内 定义其类型的,最下面那个temp就是没定义类型的变量了,所以系统报错!!
回复 使用道具 举报
欲困 中级黑马 2013-10-12 12:16:08
10#
使用一个变量时首先就是要初始化这个变量后才可以使用,同时也要考虑变量作用的范围
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马