黑马程序员技术交流社区

标题: 定义变量有问题 [打印本页]

作者: 高慧觉    时间: 2014-12-3 20:07
标题: 定义变量有问题
  1. public static void ss(int[]arr)
  2.         {
  3.                
  4.                 for(int i=0;i<arr.length-1;i++)
  5.                 {
  6.                         for(int j=i+1;j<arr.length;j++)
  7.                         {
  8.                                 if (arr[i]>arr[j])
  9.                                
  10.                                 {
  11.                                         int t=arr[j];
  12.                                         arr[j]=arr[i];
  13.                                         arr[i]=t;
  14.                                 }
  15.                                
  16.                         }
  17.                 }
  18.        
  19.                
  20.         }
复制代码

以上代码能编译通过。但是如果把如下部分代码:
  1. if (arr[i]>arr[j])
  2.                                
  3.                                 {
  4.                                         int t=arr[j];
  5.                                         arr[j]=arr[i];
  6.                                         arr[i]=t;
  7.                                 }
复制代码

的括号去掉,如下:
  1. public static void ss(int[]arr)
  2.         {
  3.                
  4.                 for(int i=0;i<arr.length-1;i++)
  5.                 {
  6.                         for(int j=i+1;j<arr.length;j++)
  7.                         {
  8.                                 if (arr[i]>arr[j])
  9.                                
  10.                                
  11.                                         int t=arr[j];
  12.                                         arr[j]=arr[i];
  13.                                         arr[i]=t;
  14.                                
  15.                                
  16.                         }
  17.                 }
  18.        
  19.                
  20.         }
复制代码

就会编译出错。具体错误如下。
"此处不允许使用变量声明 int t=arr【j】"(t下有…“^”)。
这是为什么,谁能解释一下。
作者: 高慧觉    时间: 2014-12-3 20:10
突然明白了。。。。。。:shutup:
作者: taany    时间: 2014-12-3 20:21
如果是一组语句,需要采用复合语句形式,用{ }将这组语句括起来。
作者: 大大的心    时间: 2014-12-3 20:25
if(条件表达式)

                 {

                         执行语句;

                 }


而当if(条件表达式)  语句下面只有一行代码,或者return的时候,才可以把括号去掉。一般没事,就不要把括号去掉了,免得错误。
understand??
作者: 张凯zk47    时间: 2014-12-3 20:27
即使只有一条语句,一般建议不要省略……
作者: lwh316658735    时间: 2014-12-4 18:11
条件控制语句和循环都是语句块,下面只要超出一句语句就必须用{}括上,建议一句也写上{}
作者: ben_vs_cong    时间: 2014-12-4 19:24
因为if在没有大括号的情况下,只是管离他最近的一条语句,就可以理解为:
if (arr[i]>arr[j])
{
        int t=arr[j];
}
arr[j]=arr[i];
arr[i]=t;
而t是一个局部变量,所以会报语法错误。
作者: zmhlnrs    时间: 2014-12-4 22:57
if下没有{}只执行第一句语句
作者: 二月的雨    时间: 2014-12-5 05:17
if语句中,如果是单条语句可以不加{}; 但是,如果是多条语句必须加{}。
作者: 牛牛宝    时间: 2014-12-5 16:32
同感,在if(){}语句中,如果省略{},只对if后面的第一句起作用
作者: hello_csu    时间: 2014-12-5 20:14
       if (arr[i]>arr[j])            
              int t=arr[j];
              arr[j]=arr[i];
               arr[i]=t;
t的作用域只是针对if语句,后面所以就会判定t没有定义了。最好写if 根括号。
                                




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