黑马程序员技术交流社区

标题: int temp为啥报错 [打印本页]

作者: 王龙    时间: 2012-10-20 10:26
标题: int temp为啥报错
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]+"]");
                }
               
        }
}
}
作者: 邹海洋    时间: 2012-10-20 10:51
temp 需要被初始化才能被使用
作者: 邹海洋    时间: 2012-10-20 10:54
因为temp为局部变量
作者: 宫明星    时间: 2012-10-20 20:56
这里有点小错误:  
  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语句已经结束了。
作者: 给生活加点料    时间: 2012-10-20 22:07
    if(arr[y]>arr[y+1])
   int temp=arr[y];
   arr[y]=arr[y+1];
  arr[y+1]=temp;  
这段代码没有用 {} 括起来,导致在执行if语句时,它只判断离它最近的第一条语句。  又因为你temp定义的是局部变量。所以你后面使用到的temp  变量,未定义过,所以报错。
作者: 杨华东    时间: 2012-10-22 12:31
局部变量中注意两点:
1,局部形式参数不需要初始化。
2,局部实际参数必须初始化。
你的问题刚好是局部实际参数的问题,对应解决一哈 就没问题了。。。。努力中
作者: 黄邦荣    时间: 2012-10-22 14:35
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;
}      

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




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