我反编译了一个程序里面带了个GOTO有那为高手能帮忙还原呀就这几行
    private int A(ArrayList arraylist, int i, boolean flag)
    {
        String as[];
        String as1[];
        String as2[];
        int ai[];
        int ai1[];
        int ai2[];
        int i1;
        Object obj = null;
        B b = (B)arraylist.get(i);
        if(b.B() > 0)
            return 1;
        if(R)
        {
            int j = b.C();
            boolean flag1 = false;
            String s1 = System.getProperty("com.accumo.classifier.sys.PhraseExtractor.domain");
            if(s1 != null && s1.equalsIgnoreCase("news"))
                flag1 = j == PartOfSpeechTags.q || j == PartOfSpeechTags.v || j == PartOfSpeechTags.Vg || j == PartOfSpeechTags.p || j == PartOfSpeechTags.u || j == PartOfSpeechTags.c || j == PartOfSpeechTags.f || j == PartOfSpeechTags.b || j == PartOfSpeechTags.d || j == PartOfSpeechTags.ad || j == PartOfSpeechTags.t || j == PartOfSpeechTags.y || j == PartOfSpeechTags.Ng || j == PartOfSpeechTags.m || j == PartOfSpeechTags.h || j == PartOfSpeechTags.k || j == PartOfSpeechTags.vn || j == PartOfSpeechTags.a;
            else
                flag1 = j == PartOfSpeechTags.q || j == PartOfSpeechTags.p || j == PartOfSpeechTags.u || j == PartOfSpeechTags.c || j == PartOfSpeechTags.f || j == PartOfSpeechTags.b || j == PartOfSpeechTags.d || j == PartOfSpeechTags.ad || j == PartOfSpeechTags.t || j == PartOfSpeechTags.y || j == PartOfSpeechTags.Ng || j == PartOfSpeechTags.m || j == PartOfSpeechTags.h || j == PartOfSpeechTags.k || j == PartOfSpeechTags.a;
            if(flag1)
                return 1;
        }
        byte byte0 = flag ? ((byte) (2)) : 1;
        int k = flag ? M : L;
        int l = i + k < arraylist.size() ? i + k : arraylist.size() - 1;
        as = new String[k + 1];
        as1 = new String[k + 1];
        as2 = new String[k + 1];
        ai = new int[k + 1];
        ai1 = new int[k + 1];
        ai2 = new int[k + 1];
        A(arraylist, i, k + 1, as, as1, as2, ai, ai1, ai2, flag);
        i1 = k;
_L4:
        if(i1 < 0) goto _L2; else goto _L1
_L1:
        String s;
        boolean flag2;
        int j1;
        if(as1[i1] == null)
            continue; /* Loop/switch isn't completed */
        s = as[i1].toLowerCase();
        if(i1 == 0 && G.A(as[0].charAt(0)) && as[0].length() == 1 || J.get(s) != null)
            continue; /* Loop/switch isn't completed */
        flag2 = false;
        j1 = 0;
_L3:
        if(j1 < N.size())
        {
            RE re = (RE)N.get(j1);
            boolean flag3 = re.match(s);
            if(!flag3)
                continue; /* Loop/switch isn't completed */
            String s2 = re.getParen(0);
            if(s2 == null || s2.length() != as[i1].length())
                continue; /* Loop/switch isn't completed */
            flag2 = true;
        }
        break; /* Loop/switch isn't completed */
        j1++;
          goto _L3
        if(!flag2)
        {
            X.debug("^^^^^^^^^^ storing: " + as[i1]);
            com.accumo.classifier.A.D d = new com.accumo.classifier.A.D(ai2[i1], as[i1], as1[i1], as2[i1], ai[i1], ai1[i1]);
            U.add(d);
        }
        i1--;
          goto _L4
_L2:
        return 1;
    }

解决方案 »

  1.   

    你这个反编译器不太好吧,没有把变量名查出来,而且还尽是goto。。
      

  2.   

    public class Test{


    private int A(ArrayList arraylist, int i, boolean flag)
        {
            String as[];
            String as1[];
            String as2[];
            int ai[];
            int ai1[];
            int ai2[];
            int i1;
            Object obj = null;
            B b = (B)arraylist.get(i);
            if(b.B() > 0)
                return 1;
            if(R)
            {
                int j = b.C();
                boolean flag1 = false;
                String s1 = System.getProperty("com.accumo.classifier.sys.PhraseExtractor.domain");
                if(s1 != null && s1.equalsIgnoreCase("news"))
                    flag1 = j == PartOfSpeechTags.q || j == PartOfSpeechTags.v || j == PartOfSpeechTags.Vg || j == PartOfSpeechTags.p || j == PartOfSpeechTags.u || j == PartOfSpeechTags.c || j == PartOfSpeechTags.f || j == PartOfSpeechTags.b || j == PartOfSpeechTags.d || j == PartOfSpeechTags.ad || j == PartOfSpeechTags.t || j == PartOfSpeechTags.y || j == PartOfSpeechTags.Ng || j == PartOfSpeechTags.m || j == PartOfSpeechTags.h || j == PartOfSpeechTags.k || j == PartOfSpeechTags.vn || j == PartOfSpeechTags.a;
                else
                    flag1 = j == PartOfSpeechTags.q || j == PartOfSpeechTags.p || j == PartOfSpeechTags.u || j == PartOfSpeechTags.c || j == PartOfSpeechTags.f || j == PartOfSpeechTags.b || j == PartOfSpeechTags.d || j == PartOfSpeechTags.ad || j == PartOfSpeechTags.t || j == PartOfSpeechTags.y || j == PartOfSpeechTags.Ng || j == PartOfSpeechTags.m || j == PartOfSpeechTags.h || j == PartOfSpeechTags.k || j == PartOfSpeechTags.a;
                if(flag1)
                    return 1;
            }
            byte byte0 = flag ? ((byte) (2)) : 1;
            int k = flag ? M : L;
            int l = i + k < arraylist.size() ? i + k : arraylist.size() - 1;
            as = new String[k + 1];
            as1 = new String[k + 1];
            as2 = new String[k + 1];
            ai = new int[k + 1];
            ai1 = new int[k + 1];
            ai2 = new int[k + 1];
            A(arraylist, i, k + 1, as, as1, as2, ai, ai1, ai2, flag);
            i1 = k;
    //_L4:
    while(i1<0){
            //if(i1 < 0) goto _L2; else goto _L1
    //_L1:
            String s;
            boolean flag2;
            int j1;
            if(as1[i1] == null)
                continue; /* Loop/switch isn't completed */
            s = as[i1].toLowerCase();
            if(i1 == 0 && G.A(as[0].charAt(0)) && as[0].length() == 1 || J.get(s) != null)
                continue; /* Loop/switch isn't completed */
            flag2 = false;
            j1 = 0;
    //_L3:
            while(j1 < N.size()){
            
           // if(j1 < N.size())
           // {
                RE re = (RE)N.get(j1);
                boolean flag3 = re.match(s);
                
                //if(!flag3){
                if(flag){
                   // continue; /* Loop/switch isn't completed */
                String s2 = re.getParen(0);
                
               // if(s2 == null || s2.length() != as[i1].length())
                if(s2 != null || s2.length() == as[i1].length())
                    //continue; /* Loop/switch isn't completed */
                flag2 = true;
                }
          //  }
          //  break; /* Loop/switch isn't completed */
            j1++;
            
            }
             // goto _L3
            if(!flag2)
            {
                X.debug("^^^^^^^^^^ storing: " + as[i1]);
                com.accumo.classifier.A.D d = new com.accumo.classifier.A.D(ai2[i1], as[i1], as1[i1], as2[i1], ai[i1], ai1[i1]);
                U.add(d);
            }
            i1--;
             // goto _L4
    }
    _L2:
            return 1;
        }}
      

  3.   

    GOTO语句用BREAK 标号~
    还原~具体的自己想
      

  4.   

    GOTO语句用BREAK 标号~
    还原~具体的自己想
    楼主自己也保重身体
      

  5.   

    goto是java中保留关键字,我们老师在讲到break&continue时部分是按goto讲的
      

  6.   

    goto看了就头大....
    还是接分好了.
      

  7.   

    我用这个反编译器:FrontEnd
    不错!
      

  8.   

    反编译多数都会调用到jad, 你的版本低了. 找一个高版本的
      

  9.   

    在java中好像是用不了goto语句吧?即使是在C/C++中也是很少用的!!建议楼主也不要用了。避免不必要的麻烦啊!!!
      

  10.   

    去找找DJ Java Decompiler吧,除了没注释外,其他跟原程序一模一样