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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

74123

注册黑马

  • 黑马币:

  • 帖子:

  • 精华:

© 74123 注册黑马   /  2012-7-6 12:41  /  2468 人查看  /  17 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

public class Test
{
        public static void main(String  args[])
        {
                int i=13,j=10;
                if(i-->j)
                        i++;
                else j--;
                System.out.println(i+"\t"+j);
        }
}
为啥是13和10。。。。

评分

参与人数 1技术分 +1 收起 理由
韦念欣 + 1 给新同学一个鼓励!

查看全部评分

17 个回复

正序浏览
对了,忘了说了,你这个不是循环。
回复 使用道具 举报

public class Test
{
        public static void main(String  args[])
        {
                int i=13,j=10;
                if(i-->j)
                        i++;
                else j--;
                System.out.println(i+"\t"+j);
        }
}
为啥是13和10。。。。
一步步来昂
首先你int i=13;int j=10;
然后做if判断时你用的if(i-->j)
这一步是这么执行的:
先判断是否i>j,然后不管i是否大于j都做i--运算,也就是i=i-1(此时i=12),因为结果大于,所以进入if语句里;  //因为i--的意思是先执行操作然后做自减运算,如果你写的是--i的话就是先执行自减然后再做别的操作。
接下来,如我前面所说,你这步写的i++;但由于这一步只有这一个自加运算没别的操作,所以不用考虑,只能是i的自加,运算完毕后i=13。
注意,由于if条件满足就直接进了if的语句体,所以else里的j--没有执行所以j还是10。
再接下来你进行了输出,所以得到的就是13    10了。
提醒一下,if()语句里不管有多少句都最好加上花括号,这样不容易因为笔误出现bug。
最好写为:
if(i-->j)
{
    i++;
}
else {
    j--;
}
回复 使用道具 举报
public class Test
{
        public static void main(String  args[])
        {
                int i=13,j=10; //此处为定义两个int类型变量i,j,并赋初值,i=13,j=10
                if(i-->j) /*
                           * if语句,括号内的语句成立的时候执行i++,否则执行else里的j--。i--是先使用i的值,然后再减去1,括号内此时是13>10,为true,执行完括号内的i-->j后
                  * i 减去1为12,即i=12,j=10,括号内的语句为true,执行i++,即先试用i的值,然后把i的值加1,此处没有使用i的值,所以只是把i值加1,此时
                  * i =12+1=13,j一直没有改变*/
                        i++; //i++只有一句话可以不用大括号括起来,当if 块由多句组成时,要用大括号括起来
                else j--;
                System.out.println(i+"\t"+j); //执行完if语句后执行此处代码,此时i=13,j=10,所以会打印13和10
        }
}
回复 使用道具 举报
public class Test
{
        public static void main(String  args[])
        {
                int i=13,j=10;
                if(i-->j)
                        i++;
                else j--;
                System.out.println(i+"\t"+j);
        }
}

同学,你应该明白的是这道练习,不是关于循环语句的问题。而是if...else 语句和自增与自减的问题。
首先。你要搞明白自增中两个++号在前和在后的区别:
例如:int a = 3;b = 1;
           b = ++a;
//l两个++号在前面的运算过程相当于 先a = a+1  然后再把a+1的值重新赋值给了原来的a,这时原来的a发生了变化就变成了 a = 4 ;最后进行赋值把a的值赋值给b。b = 4.
           
b = a++  //两个++号在后面的运算过程:先将a变量中的数据,进行临时存储,temp =a  就是说临时存储的a数值还是3.然后再进行自增,那么a = a+1  a = 4;最后赋值给b的是临时存储的a = 3. 而不是自增后的值。
再看上面那道练习:
                int i=13,j=10;
                if(i-->j)//这里是i-- 那么就是i变量中的数据,进行临时存储,再自减。最后赋值的是临时存储的值。
                        i++;//这里i++没有进行赋值,那么最后打印输出的就是自增后的结果。
                else j--;
                System.out.println(i+"\t"+j);
还有要明确的是if ... else语句是如果...否则 意味着两个语句肯定有一个会执行。就例如if()这个大括号里面满足条件判断为true就执行i++不执行else下面的i--。.如果if()大括号里面不满足条件判断为false就不执行i++而是执行else下面的i--。

回复 使用道具 举报
public class Test
{
        public static void main(String  args[])
        {
                int i=11,j=10;
                if(i-->j) //注意:是11在和j比较大小,而不是10.
       i++;
   else j--;
                System.out.println(i+"\t"+j); //结果为11,10
        }

---------------------------------------------------------------------------
如果输出在变一下就 还有的玩了
public class Test
{
        public static void main(String  args[])
        {
                int i=11,j=10;
                if(i-->j) //注意:是11在和j比较大小,而不是10.
       i++;
   else j--;
                System.out.println((++i)+"\t"+(j--)); // 输出语句中如果还有计算那结果还是会发生改变的啊


                System.out.println((++i));
                System.out.println((++j));        
//      如果你单独输出 无论你输出语句里面加不加括号答案都不会变了这个也要注意           
        }

回复 使用道具 举报
这个题结果是13和10一点也不难看出来。

如果把i=13改成i=11就有意思了'

public class Test
{
        public static void main(String  args[])
        {
                int i=13,j=10;
                if(i-->j) //事实上此处代码==>if(13>j) {i--;i++},结果为true,else下的语句不执行。
       i++;
   else j--;
                System.out.println(i+"\t"+j);
        }
}
---------------------------------------------------------
public class Test
{
        public static void main(String  args[])
        {
                int i=11,j=10;
                if(i-->j) //注意:是11在和j比较大小,而不是10.
       i++;
   else j--;
                System.out.println(i+"\t"+j); //结果为11,10
        }
}

i++特点:
过程是这样:
1,先将i变量中的数据,进行临时存储。
  temp = i;
2,i进行自增运算。
  i = i+1;
3,将临时存储a的数据
  temp和j比较大小。等价于if(temp>j)



回复 使用道具 举报
int x = i++;++放在变量i后面是先把i拿来用,即先赋值给x,再自增
int x = ++i;++放在变量i前面是先让i自增,再拿来用,赋值给x
回复 使用道具 举报
public class Test
{
        public static void main(String  args[])
        {
                int i=13,j=10;//这里给  i和j分别赋值为13和10
                if(i-->j)//这句话表示i--先赋值再计算 也就是先赋值,再运算。所以判断if的条件13>10为ture,计算完后--也就是此时i=12
                        i++;//执行玩if为ture条件成立i自增一次,所以i的值为13.
                else j--;//结果为ture不执行这个代码。
                System.out.println(i+"\t"+j);//打印结果是13和10
        }
}
回复 使用道具 举报
if(i-->j),这时 i 的值还是13,13>10,满足条件,因此执行i++,当执行i++之前,i 的值已经变为12,执行完i++后,i 的值变为13,因此最后输出 i 的值为13,又因为 j 的值自始至终未发生运算,所以 j 的值未发生改变,所以还是10,希望对你有所帮助。
回复 使用道具 举报
public class Test
{
         public static void main(String  args[])
         {
                 int i=13,j=10;
                 if(i-->j) //i--是先赋值给它13然后再减减,j的值为10,所以此处if判断条件是:i=13,j=10,i>j为真,如果此时让控制台输出i的值,则应该是12,因为赋完值后进行减减操作,i--的意思是i=i-1则为12
                 i++;
// i++此时的值为13,如果i++改为System.out.print(i++)则应该是12,在输出一次,即将i++改为System.out.print(i++);System.out.print(i++)则输出12,13因为i++是先赋值再进行加加操作,
                 else j--;
                 System.out.println(i+"\t"+j);
         }
}

评分

参与人数 1技术分 +1 收起 理由
韦念欣 + 1 给新同学一个鼓励!

查看全部评分

回复 使用道具 举报
我晕,总算看明白了! 帮你解释一下,看清楚了~~~
public class Test
{
        public static void main(String  args[])
        {
                int i=13,j=10;   
                if(i-->j)//判断 i - - 是否 大于 j  //首先对比 i 是否大于 j,结束后 i 值-1
                        i++;   //因为条件成立,i 值在+1 //这样 i 值就又是 13了
                else j--;   //无意义语句,没有机会运行的
                System.out.println(i+"\t"+j);  
                               //所以结果 就是 原来的初始值!无意义
        }
}
回复 使用道具 举报
楼主 我帮你运行一下这个程序,希望可以帮到你

public class Test
{
         public static void main(String  args[])
         {
                 int i=13,j=10;  //第一步:找到main函数后,从这里开始执行,定义i=13,j=10
                 if(i-->j)       //第二步 :先要明确i--这句话是什么意思。就是先用i的值运算,然后i-1.所以 if(i-->j)实际是(下面的话翻译成人能理解的语言哈)如果13大于10,然后13减1,此时i的值变为12.
                        i++;   //第三步:由于第二步的结果为true,所以运行这句话 i加1,第二步中i的值已经是12了,所以此时执行完这句话后,i的值变为13.
                 else j--;     //这句话 由于 if语句判断一直是true,所以这句话没有被执行。
                 System.out.println(i+"\t"+j);
         }
}
所以结果 是   13  10

评分

参与人数 1技术分 +1 收起 理由
韦念欣 + 1 给新同学一个鼓励!

查看全部评分

回复 使用道具 举报
不是个循环问题啊
       这是个选择语句
           int i=13,j=10;
                if(i-->j)//i--结果是13 但是i的值变成了12 此时条件为真执行i++不执行else语句
                        i++;//i++ 结果是 12 但是i的值变成了13
                else j--;
这样打印出来的就是13 和10 了 (建议楼主去看看i++ 和++i的区别,还有什么是循环语句{:soso_e100:})
回复 使用道具 举报
先告诉我怎么读你这个程序, --->是什么意思,然后我就能告诉你这个结果的原因!!!这个符号不认识……
回复 使用道具 举报
本帖最后由 姬仁贵 于 2012-7-6 13:01 编辑

首先这个不属于循环的问题     这个是选择判断语句if-else语句;
  int i =13, j =10;
                if(i-->j)
                        i++;
                else j--;
                System.out.println(i+"\t"+j);
首先进入 if 判断语句中 if(i--  >j)判断i--是否小于 j 因为 i-- 是先取值再自减的所以是13>10;      i的值自减变为12;
判断语句成立所以执行 i++;      else j--;这条语句不执行 ;
       i   自增    变为13;
后面直接执行  System.out.println(i+"\t"+j);打印结果13  、  10
回复 使用道具 举报

public class Test
{
        public static void main(String  args[])
        {
                int i=13,j=10;
                if(i-->j)//这里计算后i=12,j=10,条件为true
                        i++;//这计算后i=13,而j=10未变化
                else
                       j--;//这里未执行
                System.out.println(i+"\t"+j);//输出时,i=13,j=10
        }
}

评分

参与人数 1技术分 +1 收起 理由
韦念欣 + 1 给新同学一个鼓励!

查看全部评分

回复 使用道具 举报
是if-else语句问题,根据判断条件可知,变量i和j做比较,得到条件表达式的值为真,然后执行i-1,然后变量i的值为12,而j的值为10;由于条件表达式为真,所以执行i++,所以i的值为13,并跳过else子句块,循环控制语句执行完毕,这时变量i和j的值分别为13和10。楼主基础需要加强。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马