黑马程序员技术交流社区

标题: 新手提问,,关于if语句.. [打印本页]

作者: Holy丶谢特     时间: 2014-8-19 16:54
标题: 新手提问,,关于if语句..
本帖最后由 Holy丶谢特  于 2014-8-19 17:25 编辑

本人新手,在书上看到这么一个题目:
int x=2,y=3;
if(x>2)              if(y>2)
     {
        int z=x+y;
        System.out.println("z is"+z);
     }
    else
      System.out.println("x is"+x);

打印结果是什么都没有输出.
以上代码是等价于
int x=2,y=2;
if(x>2)
{}  //注意加了大括号
    if(y>2)
     {
        int z=x+y;
        System.out.println("z is"+z);
     }
    else
      System.out.println("x is"+x);
还是等价于
int x=2,y=3;
if(x>2){          //注意加了大括号
    if(y>2)
     {
        int z=x+y;
        System.out.println("z is"+z);
     }
    else
      System.out.println("x is"+x);
}








作者: IT@民工    时间: 2014-8-19 17:21
代码有问题吧?你贴上来的对么?上个图看看
感觉可能是这个意思
class  tes1
{
        public static void main(String[] args)
        {               
                int x =5;
                int y =3;
                if (x>2&&y>2)
                {
                        int z = x+y;
                        System.out.print("z is"+z);
                }
                else

                System.out.println("x is"+x);
        }

}
作者: Holy丶谢特     时间: 2014-8-19 17:40
IT@民工 发表于 2014-8-19 17:21
代码有问题吧?你贴上来的对么?上个图看看
感觉可能是这个意思
class  tes1

完整代码是
class Test
{
   public static void main(String[] args)
   {
       int x=2,y=2;
       if(x>2)
         if(y>2)
          {
             int z= x + y;
             System.out.println("z is"+z);
          }          else
             System.out.println("x is"+x);   
   }
}

疑惑的是第一个if语句省略的大括号是包含了后面所有的语句,还是只包含了一个空语句.
刚刚做过实验了,把y改成3,发现 int z= x + y; System.out.println("z is"+z);没有执行.
所以第一个if语句省略的大括号应该是包含后面所有语句的.


作者: 冒牌高手    时间: 2014-8-19 17:55
是第二种意思,相当于if语句中,嵌套了一个if  else语句,因为x>2的值是false,所以不执行任何语句
作者: chengzhx76    时间: 2014-8-19 19:45
好乱啊。。。。
作者: 画了一个圈儿    时间: 2014-8-20 08:58
应该是第二种,if()语句后面如果没有大括号,默认执行紧跟if()的一条语句。这个例子中,if(x>2)的后一条语句是if(y>2){...},所以应该是
  1. f(x>2)
  2. {
  3. if(y>2){...}
  4. }
  5. else
  6. ...
复制代码

作者: hsy    时间: 2014-8-20 09:19
支持楼上的观点。
作者: lhtwm1    时间: 2014-8-20 09:40
本帖最后由 lhtwm1 于 2014-8-20 09:42 编辑

class Test
{
   public static void main(String[] args)
   {
       int x=2,y=2;
       if(x>2&&y>2)
        
          {
             int z= x + y;
             System.out.println("z is"+z);
          }          else
             System.out.println("x is"+x);   
   }}


其实还是有点想不通,  X,Y 都赋值=2了  那为什么还要用 if语句

作者: Mokill0911    时间: 2014-8-20 10:37
本帖最后由 Mokill0911 于 2014-8-20 10:38 编辑
Holy丶谢特  发表于 2014-8-19 17:40
完整代码是
class Test
{

if语句的特点是:
  1. if { 执行区间}
复制代码
^这种格式,if执行大括号内的所有可执行代码;



  1. if
  2. 执行语句1;

  3. 执行语句2;
复制代码
^这种格式,if只会执行离它最近的一条有效语句,所以执行语句2是执行不到的。



所以在你的代码里,
  1.   if(x>2)
  2.          if(y>2)
  3.           {
  4.              int z= x + y;
  5.              System.out.println("z is"+z);
  6.           }          else
复制代码


第一个if只会执行第二个if

但第二个if 带了大括号,所以大括号内代码可以被执行,但因为条件为false,所以没有执行语句;
你把两个个if的条件改成(y>=2),或者把第二个if的条件改成(y>2) ,将y值改成3 ,都可以看到打印结果;


作者: THE_FUTURE    时间: 2014-8-20 10:56
你的逻辑思维有点另类啊!




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