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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

Holy丶谢特 

初级黑马

  • 黑马币:28

  • 帖子:10

  • 精华:0

© Holy丶谢特  初级黑马   /  2014-8-19 16:54  /  1529 人查看  /  9 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 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);
}







9 个回复

倒序浏览
代码有问题吧?你贴上来的对么?上个图看看
感觉可能是这个意思
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);
        }

}
回复 使用道具 举报
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语句省略的大括号应该是包含后面所有语句的.

回复 使用道具 举报
是第二种意思,相当于if语句中,嵌套了一个if  else语句,因为x>2的值是false,所以不执行任何语句
回复 使用道具 举报 1 0
好乱啊。。。。
回复 使用道具 举报
应该是第二种,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:58
7#
支持楼上的观点。
回复 使用道具 举报
lhtwm1 中级黑马 2014-8-20 09:40:54
8#
本帖最后由 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: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 ,都可以看到打印结果;

回复 使用道具 举报
你的逻辑思维有点另类啊!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马