public class Hfll 
{
public static void main(String args[])
{
int x=0;
int y=0;
for(int k=0;k<5;k++)
{
if((++x>2)||(++y>2)) //这个条件到底该如何去执行啊
{
x++;
}
}
System.out.println(x+"and"+y);
}
}上面这段程序运行结果是8and2,我算到7and5,大家给解释下吧
下面是我理解的运算步骤:k=0,++x=1,++y=1,条件判断为假,不执行if语句,
                        k=1,++x=2,++y=2,条件判断为假,不执行if语句;
                        k=2,++x=3,++y=3,条件判断为真,执行x++;
                        k=3,++x=5,++y=4,条件判断为真,执行x++;
                        k=4,++x=7,++y=5,条件判断为真,执行x++;
                        此时x+=8,+y=5
哪里理解错了啊,问题可能小白了点,新人大家勿拍呵呵

解决方案 »

  1.   

    问题在于if((++x>2)||(++y>2))[
    ||的执行 是先判++x是否大于2 如果++x大于2就 再不执行++y>2 因为此时条件已经成立
    所有 y一直是等于2
    不知道楼主明白没
    你可以运行下这个例子 就明白了
    public class testHUO {
    public static void main(String[] args) {
    int x=2,y=0;
    if(++x>1||++y>0){
    ++x;
    }
    System.out.println("x="+x);
    System.out.println("y="+y);
    }}
      
      

  2.   

    这里涉及||运算符与|运算符的区别
    (1 > 0 || ++a > 0)  ||运算符如果前面为真了,后面的++a>0就不会继续执行
    (1 > 0 | ++a > 0)  |运算符不管前面的结果,后面的++a>0都会执行
    同理
    &&运算符如果前面为假,后面的语句不会执行
    &运算符不论前面的结果,后面的语句都会执行
      

  3.   

    ||是短路的
    明白这个就很好理解了哦
    k=0,++x=1,++y=1,条件判断为假,不执行if语句,
    k=1,++x=2,++y=2,条件判断为假,不执行if语句;
    k=2,++x=3,++y=2,(y被短路,下面的y都被短路)条件判断为真,执行x++;
    k=3,++x=5,++y=2,条件判断为真,执行x++;
    k=4,++x=7,++y=2,条件判断为真,执行x++;
    此时x+=8,+y=2 
      

  4.   

    (1 > 0 || ++a > 0)  ||运算符如果前面为真了,后面的++a>0就不会继续执行 
    (1 > 0 | ++a > 0)  |运算符不管前面的结果,后面的++a>0都会执行 
      

  5.   

    ||短路,前面为true后面的就不运行了
      

  6.   

    “||”运算符是这样判断的,假设“(条件1)||(条件2)”,如果条件1为真,那么就不再执行条件2;如果条件1为假,那么再继续执行条件2.public class Hfll {
    public static void main(String args[]) {
    int x = 0;
    int y = 0;
    boolean flag = false;
    for (int k = 0; k < 5; k++) {
    flag = ((++x > 2) || (++y > 2));
    if (flag == true) // 这个条件到底该如何去执行啊
    { System.out.print("k=" + k);
    System.out.print("  x=" + x);
    System.out.print("  y=" + y);
    System.out.print("  (++x>2)||(++y>2)=" + flag);
    System.out.println();
    x++;
    }
    }
    System.out.println(x + " and " + y);
    }
    }运行结果如下:
    k=2  x=3  y=2  (++x>2)||(++y>2)=true
    k=3  x=5  y=2  (++x>2)||(++y>2)=true
    k=4  x=7  y=2  (++x>2)||(++y>2)=true
    8 and 2从上面的结果可以看出,如果(++x>2)为真的话,那么(++y>2)就一直没有执行,一直是y=2。
    不知道这样楼主是否能明白。
      

  7.   

    (1 > 0 || ++a > 0)  ||运算符如果前面为真了,后面的++a>0就不会继续执行 
    (1 > 0 | ++a > 0)  |运算符不管前面的结果,后面的++a>0都会执行
    如果(++x>2)为真的话,那么(++y>2)就一直没有执行,一直是y=2