黑马程序员技术交流社区

标题: 关于这个运算符,有点不明白 [打印本页]

作者: 张凯    时间: 2012-7-21 21:26
标题: 关于这个运算符,有点不明白
本帖最后由 张凯 于 2012-7-22 09:27 编辑

static int counter=0;
while(true){
try {
if(counter++<2){
throw new MyNewException();}
System.out.println("No Exception");
}catch(MyNewException ex){
System.err.println("MyNewException happened");
}finally{
System.err.println("finally is called");
if(counter>2) {
System.out.println("循环了【"+counter+"】次");
break;}
}

在这里counter++<2,
counter是自加了之后再比较还是比较后再自加?
如果是自加后再与2进行比较。那么当counter已经为1的时候。那么counter自加后为2了。那么既不满足counter<2,也不满足counter>2。那么这个循环不是进去死循环了吗?
帮忙解决一下。详细点~谢谢~
作者: 黎健东    时间: 2012-7-21 21:59
本帖最后由 凉宫蛋蛋 于 2012-7-22 03:42 编辑
  1. package Heima001_DumpAndDown100;

  2. import java.io.IOException;

  3. public class test {
  4.         public static void main(String[] args) throws IOException {
  5.                 int counter = 0;
  6.                 while (true) {
  7.                         try {
  8.                                 //1.1第一轮,count=0
  9.                                 //1.2先判断 0 < 2?
  10.                                 if (counter++ < 2) {
  11.                                         //1.3上面判断成立,进入这里后,counter = 1
  12.                                         System.out.println(counter);
  13.                                         //1.4抛出异常,
  14.                                         throw new Exception();
  15.                                 }
  16.                                 System.out.println("No Exception");
  17.                                 //1.5
  18.                         } catch (Exception e) {
  19.                                 //1.6
  20.                                 System.err.println("MyNewException happened");
  21.                                 //1.7
  22.                         } finally {
  23.                                 //1.8
  24.                                 System.err.println("finally is called");
  25.                                 //1.9counter为1 1>2 ?不成立,回到while
  26.                                 if (counter > 2) {
  27.                                         System.out.println("循环了【" + counter + "】次");
  28.                                         break;
  29.                                 }
  30.                         }
  31.                 }
  32.         }
  33. }
复制代码
  1. package Heima001_DumpAndDown100;

  2. import java.io.IOException;

  3. public class test {
  4.         public static void main(String[] args) throws IOException {
  5.                 int counter = 0;
  6.                 while (true) {
  7.                         try {
  8.                                 //2.1第二轮,count=1
  9.                                 //2.2先判断 1 < 2?
  10.                                 if (counter++ < 2) {
  11.                                         //2.3上面判断成立,进入这里后,counter = 2
  12.                                         System.out.println(counter);
  13.                                         //2.4抛出异常,
  14.                                         throw new Exception();
  15.                                 }
  16.                                 System.out.println("No Exception");
  17.                                 //2.5
  18.                         } catch (Exception e) {
  19.                                 //2.6
  20.                                 System.err.println("MyNewException happened");
  21.                                 //2.7
  22.                         } finally {
  23.                                 //2.8
  24.                                 System.err.println("finally is called");
  25.                                 //2.9counter为2 2>2 ?不成立,回到while
  26.                                 if (counter > 2) {
  27.                                         System.out.println("循环了【" + counter + "】次");
  28.                                         break;
  29.                                 }
  30.                         }
  31.                 }
  32.         }
  33. }
复制代码
  1. package Heima001_DumpAndDown100;

  2. import java.io.IOException;

  3. public class test {
  4.         public static void main(String[] args) throws IOException {
  5.                 int counter = 0;
  6.                 while (true) {
  7.                         try {
  8.                                 //3.1第三轮,count=2
  9.                                 //3.2先判断 2 < 2? 不成立到catch
  10.                                 if (counter++ < 2) {
  11.                                        
  12.                                         System.out.println(counter);
  13.                                        
  14.                                         throw new Exception();
  15.                                 }
  16.                                 System.out.println("No Exception");
  17.                                 
  18.                         } catch (Exception e) {
  19.                                 //3.3来到这里后counter为3
  20.                                 System.err.println("MyNewException happened");
  21.                                 //3.4
  22.                         } finally {
  23.                                 //3.5
  24.                                 System.err.println("finally is called");
  25.                                 //3.6counter为3 3>2 ?成立
  26.                                 if (counter > 2) {
  27.                                         //3.7输出counter = 3
  28.                                         System.out.println("循环了【" + counter + "】次");
  29.                                         //3.8
  30.                                         break;
  31.                                 }
  32.                         }
  33.                 }
  34.                 //3.9跳出while
  35.         }
  36. }




  37. counter++是先判断后自加

  38. ++counter就是先自加后判断
  39. 求加分
复制代码

作者: 黎健东    时间: 2012-7-21 22:01
counter++是先判断后自加
++counter就是先自加后判断
作者: 张水荣    时间: 2012-7-21 22:21
++放要后面是先使用,后加1.
即如果是付值,则先付值,后加1的,
如果是比较,则先比较,后加1.
你的代码是先运行了两次try中的语句,
只不过是运行一次,抛出一次异常,
抛出一次异常,catch就抓住一次异常,
其运行顺序可以这样来表示:try-->catch-->finally-->try-->catch-->finally-->try-->finally
当counter加到3时,最后一次循环try中没有抛异常,跳过catch,直接运行finally中的语句了
作者: 焦晨光    时间: 2012-7-21 22:28
首先 楼主的代码比较乱且没有主函数,我根据方法体内的语句分析楼主下面的问题

在这里counter++<2, //++ 运算符 如果在变量名前++counter 先自加再比较
                      如果在后面counter++先比较后自加

counter是自加了之后再比较还是比较后再自加?//所以 上述代码是先比较,后自加;

如果是自加后再与2进行比较。那么当counter已经为1的时候。那么counter自加后为2了。
那么既不满足counter<2,也不满足counter>2。那么这个循环不是进去死循环了吗?
//根据楼主方法体内的代码 counter的值
while(true){
  try {
  if(counter++<2){
每循环一次都会+1,

if(counter>2) {
System.out.println("循环了【"+counter+"】次");
break;}
所以当counter=3时 会跳出循环,程序共循环三次;

作者: 李菁    时间: 2012-7-21 23:11
counter++先加1后比较,++counter先比较后加1
当进行第三次循环时,counter值为3,进入finally的if语句,输出”循环了3次“,跳出while循环
作者: 林康春    时间: 2012-7-21 23:55

作者: 黎健东    时间: 2012-7-22 03:44
韦前辈,我的解释写在代码里边了,怎么我的就不能加分呢...
作者: 张凯    时间: 2012-7-22 09:27
焦晨光 发表于 2012-7-21 22:28
首先 楼主的代码比较乱且没有主函数,我根据方法体内的语句分析楼主下面的问题

在这里counter++ ...

非常感谢,代码是有点乱。




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