为什么我的功能提供无限输出?

时间:2018-05-18 10:30:48

标签: java algorithm pattern-matching

问题是从给定的1,0和?模式生成所有二进制字符串。下面的代码是我写的,它给出了无限输出。 例如,如果输入为1?1? ,输出应为1010,1011,1110,1111

我正在使用Queue以迭代方式进行。

static void fill(StringBuilder s)
{
    Queue<StringBuilder> q = new LinkedList<StringBuilder> () ;
    q.add(s);
    while(!q.isEmpty())
    {
        s = q.peek();
        int pos = s.indexOf("?");
        if(pos>=0)
        {
            StringBuilder s1 = new StringBuilder(s);
            s1.setCharAt(pos,'0');
            q.add(s1);
            StringBuilder s2 = new StringBuilder(s);            
            s1.setCharAt(pos,'1');
            q.add(s2);
        }
        else
            System.out.println(s);
        q.poll();    
    }
}

1 个答案:

答案 0 :(得分:2)

请注意,您在两种情况下都在修改s1

if(pos>=0)
{
    StringBuilder s1 = new StringBuilder(s);
    s1.setCharAt(pos,'0');    // <-- Here s1 is fine
    q.add(s1);
    StringBuilder s2 = new StringBuilder(s);            
    s1.setCharAt(pos,'1');    // <-- You must use s2
    q.add(s2);
}