Java 中的 follow 方法的实现无法正常工作

问题描述 投票:0回答:0

在以下方法“follow()”中,有一个名为 followMap 的链接哈希图,该图应输出以下内容:- Follow Map: {S=c,b,d,L,d T=S, L=b,L } 但是,它输出以下内容:- Follow Map: {S=d, T=S, L=L} 这是不正确的。

从调试中我发现它在键“S”中生成所有预期值“c、b、d、L、d”,但是,它以某种方式不断覆盖它们并且只保留最后达到的值“d” “.

我一直在努力解决这个问题,但我不能了。如果有人帮助我,那就太好了。

public String follow() {
    first();
    System.out.println("Map: "+map);
    String follow = "";
    String first = "";
    String f = "";
    for (int i = 0; i < nonTerminals.length; i++) {
        String prodRules = map.get(nonTerminals[i]);
        String [] prSplit = prodRules.split(",");
        for (int j = 0; j < prSplit.length ; j++) {
            for (int k = 0; k < prSplit[j].length(); k++) {
                first = "";
                System.out.println(prSplit[j].charAt(k));
                if(!isTerminal(prSplit[j].charAt(k)))
                {
                    follow = followMap.get(prSplit[j].charAt(k));
                    if(k==prSplit[j].length()-1)
                    {
                        if(follow==null)
                        {
                            follow = "";
                            follow+= nonTerminals[i].charAt(0) + "";
                            followMap.put(prSplit[j].charAt(k)+"",follow);
                        }
                        else
                        {
                            follow = followMap.get(prSplit[j].charAt(k));
                            follow+= "," +nonTerminals[i].charAt(0) + "";
                            followMap.put(prSplit[j].charAt(k)+"",follow);
                            System.out.println(follow);
                        }

                    }
                    else
                    {
                        if(isTerminal(prSplit[j].charAt(k+1)))
                        {
                            System.out.println("--follow= "+follow);
                            if(follow==null)
                            {
                                follow = "";
                                follow+= prSplit[j].charAt(k+1) + "";
                                followMap.put(prSplit[j].charAt(k)+"",follow);
                                System.out.println("follow= "+follow);
                            }
                            else
                            {
                                follow = followMap.get(prSplit[j].charAt(k));
                                follow+= "," + prSplit[j].charAt(k+1) + "";
                                followMap.put(prSplit[j].charAt(k)+"",follow);
                            }
                        }
                        else
                        {
                            if(followMap.get(prSplit[j].charAt(k))==null)
                            {
                                first = firstMap.get(prSplit[j].charAt(k+1));
                                follow = "";
                                follow += first;
                                followMap.put(prSplit[j].charAt(k)+"",follow);
                            }
                            else
                            {
                                first = firstMap.get(prSplit[j].charAt(k+1));
                                follow = followMap.get(prSplit[j].charAt(k));
                                follow += ","+ first;
                                followMap.put(prSplit[j].charAt(k)+"",follow);
                            }

                        }

                    }
                    System.out.println("FMap: "+followMap);

                }
                else
                {

                }
            }
        }
    }
    System.out.println("Follow Map: "+ followMap);
}
java string overwrite linkedhashmap
© www.soinside.com 2019 - 2024. All rights reserved.