Почему моя функция дает бесконечный вывод? - PullRequest
0 голосов
/ 18 мая 2018

Вопрос в том, чтобы сгенерировать все двоичные строки из заданного шаблона 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();    
    }
}

1 Ответ

0 голосов
/ 18 мая 2018

Обратите внимание, что вы изменяете 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);
} 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...