class TestString14
{
public static void main(String[] args) 
{
String str = "[email protected]";
System.out.print(validate(str));
}

public static boolean validate(String str) {
boolean flag = true; if (str.indexOf("@") == -1 || str.indexOf(".") == -1) {
flag = false;
} if (flag) {
if (str.indexOf("@") > str.indexOf(".")) {
flag = false;
}
}
return flag;
}
}
就是第二个if语句,if (flag) {...}这一句,这里的flag是怎么看的,是上面的boolean flag;还是第一个if语句里的flag

解决方案 »

  1.   

    你说的这两个flag本来就是同一个变量啊,都用的是boolean flag声明的变量
    如果str.indexOf("@") == -1 || str.indexOf(".") == -1条件满足,flag设置为false值
    如果不满足,那么flag就是初始值true
    有什么问题么?
      

  2.   

    flag只是一个指向true或者false的引用,比如:一条叫haha的狗,haha就是flag,而你if条件里的判断就根据狗来判断的也就是根据true还是false来判断的,这样说你可懂?
      

  3.   

    同一个flag
    boolean flag = true;你已经定义了变量,第一个if语句只是改变flag的判断。
      

  4.   


    如果str.indexOf("@") == -1 || str.indexOf(".") == -1条件满足,flag设置为false值
    那么下下面if语句里面又有flag = false;不是重复了吗
      

  5.   

    你的程序这样理解
    第一个if
    if(判断语句) {
    flag = false;
    }第二个if
    if(flag) {
    if(判断) {
    flag = flase;
    }
    } return flag;flag的初值为true,第一个if判断后,若条件成立,则给flag赋值为false,此时,第二个if判断flag为flase,判断不成立,程序直接结束。
    第一个if若不成立,则flag为true(初始值),则第二个if判断成立,运行里面的代码。
      

  6.   

    下面是继续判断啊。如果条件不满足。FLAG还是TRUE。满足的话自然不会走下面那个IF了
      

  7.   

    if(flag){
    System.out.println(33);
    }如果flag=true;则控制台打印33;否则不打印   if(flag)和if(true)是等同的
      

  8.   

    说了半天,你说的三个都是同一个flag
      

  9.   

    先做第一个if的判断,如果满足,则flag为false
    若flag没有被修改过,那么做第二个if的判断,如果满足,则flag为false
    最后return flag的值
      

  10.   

    LZ不要把布尔类型想得太复杂了。以整形int为例。看下面代码public class Test1 {
    public static void main(String[] args) {

    //定义两个int型变量,并赋值为10 和 5

    int a = 10;

    int b = 5;

    if(b == 5) {            
    a = 100;      //(1) }


    if(a == 100) {          
    System.out.println("进来了");   //(2)
    }

    System.out.println(a);
    }
    }上面代码,因为刚开始b等于5,所以语句(1)会被执行。原来等于10的a变量会被重新赋值。a会变成100因为a变为100了。所以下面的if语句条件满足,就会执行语句(2)那按照楼主的说法。我还要去问别人第个if语句里的a和上面的int a是怎么看的。这个a是指第一个if语句里的a还是int a = 10里的a。这样的问题问出来就有点怪了。程序从头到尾就只有两个整形变量,一个叫a一个叫b。同样的在布尔型中boolean型只有两种值,要么是true(即为真) 要么就是就 false (即为假)。现在改下上面代码,把整型的变量a 换成布尔型,如下:public class Test2 {
    public static void main(String[] args) {

    //定义两个变量,一个为布尔类型(boolean)的变量a。和整型的变量b
    boolean a = true;

    int b = 5;

    if(b == 5) {            
    a = false;      //(1) }


    if(a) {          
    System.out.println("进来了");   //(2)
    }

    System.out.println(a);    
    }
    }上面代码中。因为b等5.所以第一个if语句什么执行。即(1)处会被执行。所以本来为true的变量a,被赋值为false;
    因为a变为 false了,那第二个if语句就不会被执行了。所以这段代码的运行结果只会输出false; 
      

  11.   

    可以把两个if合并成return true的情况
      

  12.   

      同一个flag,只不过值有所改变罢了。
      

  13.   


    当然是boolean flag=true;这个变量。只是如果第一个if的条件符合,flag又重新赋值为false;lz可明白
      

  14.   


    可以把if(flag){..}改为if(flag = true) {..}吗?
      

  15.   

    不可以,因为if后面接的是判断条件,要不你可以改为flag==true ,就可以了
    一个等号表示赋值,俩个等号表示判断;