黑马程序员技术交流社区
标题:
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