Java 为什么我的函数会给出无限的输出?
问题是从给定的1、0和?模式生成所有二进制字符串?。下面的代码是我写的,它提供了无限的输出。 例如,如果输入为1?1,输出应该是1010101111111 我使用队列以迭代的方式来做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()) {
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');//欢迎;)。我鼓励您接受答案,让其他人知道这个问题已经解决。