java中如何处理下面的逻辑:if(条件1){
   语句1
   语句2
   语句3
}
if(条件2){
   语句1
   语句2
   语句3
}
if(条件3){
   语句1
   语句2
   语句3
}现在把
   语句1
   语句2
   语句3
写到一个地方,让上面的条件直接goto到那里.

解决方案 »

  1.   

    貌似楼主是说将3个重复的块提取出来变成
    here:
    function 1;
    function 2;
    function 3;
    if(a){
          goto here;
    }
    if(b){
          goto here;
    }
    if(c){
          goto here;
    }
      

  2.   

    简单说实现这样的功能:if(t1) goto labelx;
    其它语句
    if(t2) goto labelx;
    其它语句
    if(t3) goto labelx;labelx:
      stmt1;
      stmt2;
      stmt3;
      stmt4;不要提取成方法,用流程控制
      

  3.   

    Why????
    if (条件1 || 条件2 || 条件3){
       语句1 
       语句2 
       语句3
    }
    Maybe different things happen in different conditions...
      

  4.   

    你的意思是对的.但上面说了不能提取成函数,只允许用流程控制.
    if (条件1 || 条件2 || 条件3){
       语句1 
       语句2 
       语句3
    }
    是错误的,因为条件中还要执行其它语句.比如建立一个连结.
    Connection conn = getConnection();然后我做具体的几步操作.
    第一步条件不满足,则直接执行关闭连结,下面的就不用做了.
    如果满足,做第二步,如果条件不满足,直接关闭连结就不做第三步了.
    if (条件1 || 条件2 || 条件3)要把三步都做了才能用||.没有达到goto的作用,goto是直接跳过下面的操作.
      

  5.   

    这个问题其实真正编码的时候经常用到.就是把很多重复操作提取为了一个方法.但是提取方法如果用到很就是,就要把变量一个一个传过去,过一会发现又少传了一个变量,又回过头来重新给方法加参数.
    就是说外部就是如果很多,就要定义很多参数,比如关闭rs,stmt,conn,就要把这三个变量传给提取的共用的方法.
    每次if(ccc)   close(rs,stmt,conn);如果参数很多和多次写语句差不多了.其实我们都知道java可以break到一个label,但那要在循环中,可是我们这样的逻辑不在循环中如何break呢?赵本山大叔说:"没有困难创造困难也要上".本着这个精神,我们就要造循环.但造的这个循环只是循环的架子,实际上没有循环:for(int i=0;i<1;i++){   if(t1) break label1;
       ........;
       if(t2) break label1;
       ........;
    }
    label1:
       stmt1;
       stmt2;
       stmt3;
       stmt4;简单说你只要做一个一次循环就达到了goto的目的.do{
       if(t1) break label1;
       ........;
       if(t2) break label1;
       ........;
    }while(false);
    或者
    while(true){
       if(t1) break label1;
       ........;
       if(t2) break label1;
       ........;
       break;//最后加一个break来保证只循环一次.
    }
      

  6.   

    我考虑过类似的方法,不过java的标号只允许在循环之前吧.
      

  7.   

    都已经说了,如果没有太多的变量,可以提取为方法.但如果要操作太多的变量,就要把这些方法都作为参数传过去,有时要反复修改参数的个数.
    如果在原来的地方直接操作就不要需要传参数.比如: public static void main(String[] args) throws Exception{ if(1==1){跳过System.out.println(111),直接操作System.out.println(222);}
    System.out.println(111); System.out.println(222);
    }
    改成:
    public static void main(String[] args) throws Exception{
    label1:
    do{
    if(1==1) break label1;
    System.out.println(111);
    }while(false);
    System.out.println(222);
    }
    就很方便地跳过下面的操作.
      

  8.   


    是在循环之前啊,但break到那个标号就是跳出了循环.public static void main(String[] args) throws Exception{ 
     label1: 
     do{ 
      if(1==1) break label1; 
      System.out.println(111); 
     }while(false); 
     System.out.println(222);