Java 为什么我的函数会给出无限的输出?

Java 为什么我的函数会给出无限的输出?,java,algorithm,pattern-matching,Java,Algorithm,Pattern Matching,问题是从给定的1、0和?模式生成所有二进制字符串?。下面的代码是我写的,它提供了无限的输出。 例如,如果输入为1?1,输出应该是1010101111111 我使用队列以迭代的方式来做 static void fill(StringBuilder s) { Queue<StringBuilder> q = new LinkedList<StringBuilder> () ; q.add(s); while(!q.isEmpty()) {

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

我使用队列以迭代的方式来做

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();    
    }
}
静态空隙填充(StringBuilders)
{
队列q=新的LinkedList();
q、 添加(s);
而(!q.isEmpty())
{
s=q.peek();
int pos=s.indexOf(“?”);
如果(位置>=0)
{
StringBuilder s1=新的StringBuilder;
s1.设置字符(位置,'0');
q、 添加(s1);
StringBuilder s2=新的StringBuilder;
s1.集字符(位置“1”);
q、 添加(s2);
}
其他的
系统输出打印项次;
q、 poll();
}
}

请注意,您在这两种情况下都在修改
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);
} 
如果(位置>=0)
{
StringBuilder s1=新的StringBuilder;
s1.setCharAt(pos,'0');//欢迎;)。我鼓励您接受答案,让其他人知道这个问题已经解决。