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



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

我正在使用队列以迭代方式执行此操作。

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();    
}
}

请注意,在这两种情况下,您都在修改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);
} 

最新更新