小弟刚刚开始学习Java 现在遇到一道题 不知道何解 先来求助各位大大 恳请各位帮忙解释一下
求下面程序的运行结果
public class test
{
    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 但是我不明白为什么 有哪位大大能够给我仔细的解释一下 我知道程序要做5次循环 第一次循环结束值为1and1 第二次结束为2and2 但是第三次开始就变为4and2 从第三次开始++y就不起作用了一样 我不明白为什么 我想的答案应该是8and5 能告诉我为什么++y不作为了呢 谢谢

解决方案 »

  1.   


    public class test 

        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); 
                } 
            } 
            System.out.println(x + "and" + y); 
        } 

    顶楼上的,自己运行一下就知道了
      

  2.   

     if((++x > 2)||(++y > 2))
    当(++x > 2)为true时,就会往下执行++x;而不再判断(++y)> 2,
    第三次根本就不会执行++y
      

  3.   

    ||运算符不是要比较运算符两边的数值吗 然后得出true或是false 那样的话++y还是执行了的啊
      

  4.   

    在第三次循环执行,此时,x=2,y=2,执行时编译系统只执行到(++x>2)成立,因为是或关系,后者(++y)>2无需执行.就可以确定,所以是8 and 2
      

  5.   

    x || y;
    如果x为真,就不会去判断y了。x && y;
    如果x为假,也不会去判断y了。
      

  6.   

    ||只要一边为true了,整个就为true,就不用执行后面的了。
      

  7.   

    逻辑运算符是短路的 
    对于 || 前面的条件为true,整个表达式就肯定是true,所以就没必要继续执行后面的判断
    对于 && 如果前面是false,整个表达式肯定是false,后面也不会执行
      

  8.   

    if((++x > 2)||(++y > 2)) 
    当x=2时 ++x > 2 为true
    ||当第一个条件为真时,就不会去判断第二个条件了 
    所以++y并没有执行最后y还是2
      

  9.   

    当k=0时,x=1,y=1;
    当k=1时,x=2,y=2;
    当k=2时,x=4,y=2;
    当k=3时,x=6,y=2;
    当k=4时,x=8,y=2;
    当k=5时 不进入循环其实说白了就是“||”这个逻辑运算符的问题
    如果前面满足要求 后面的久不判断    后面y没有加了
    如果前面不满足要求 后面的接着判断  所以前面y加了两次
      

  10.   

     if((++x > 2)||(++y > 2)) 当前面为true后面就不执行了 
      

  11.   

    我这里还有另一个问题 不知道哪位大大能够再辛苦一下帮我解释一下
    求下面程序的运行结果
    public class Hello
    {
        public static void main(String args[])
        {
            boolean b1 = true;
            boolean b2 = false;
            boolean b3 = true;
            if(b1&b2|b2&b3|b2|b3)
            {
                System.out.println("aaa");
            }
            if(b1&b3|b2&b3|b2|b3)
            {
                System.out.println("bbb");
            }
        }
    }
    答案是aaabbb 但是我不明白为什么
      

  12.   

    以第一个为例子:boolean b1 = true; 
    boolean b2 = false; 
    boolean b3 = true; b1&b2|b2&b3|b2|b3
    -->true&false|false&true|false|false&和|运算级别是一样的,像加减一样逐步算,最后得到true