Как написать этот оператор возврата, чтобы я не возвращал значение null?

Я не знаю, где и как разместить оператор возврата, поэтому я получаю связанный список. Возврат связанного списка находится в цикле. Однако мне нужно иметь оператор return вне этого, но я не могу заставить его работать. Я просто продолжаю получать нулевой возврат. Пытался вставить оператор else, но он не работает. Я чувствую, что это простое решение, но не могу его решить. Я знаю, что возвращаемый ноль всегда читается в этом коде, просто не знаю, как его поставить, чтобы он не всегда возвращал ноль.

Метод принимает строку цифр, получает буквы, прикрепленные к этим цифрам на клавиатуре, и помещает возможные комбинации этих строк в метод, который находит слова и возвращает связанный список этих слов.

Просто не могу отработать оператор возврата в методе.

 public LinkedList bfs_search(String numberEntered) {  
    //use a queue for all the unsearched combinations to go
    Queue<String> q = new LinkedList<String>();  

    q.add(""); 

    String possibleWord = null;

    //loop through each number entered
    for(int i = 0; i < numberEntered.length(); i++) {  
        //get the letters on the keypad for current number
        String lettersOnKeypadNumber = T9keypad[numberEntered.charAt(i) - ASCII_ZERO];  
        int len = q.size();  

        //loop while there are letter sequences in the queue.  Note len-- is same as len=len-1 so loop until only one item left in queue (the blank item inserted above)
        while(len -- > 0) {  
            String letterSequenceFromQ = q.remove();  
            //loop through each letter on the keypad number, add it to the letter sequence pulled from queue and search for that letter sequence as a word in the trie
            for(int j = 0; j < lettersOnKeypadNumber.length(); j++) {  
                possibleWord = letterSequenceFromQ + lettersOnKeypadNumber.charAt(j);  
                //q.add(tmpStr);  
                if(search(possibleWord) && possibleWord.length() == numberEntered.length()) {  
                    //found it!
                   return possibleWords(possibleWord); 

                } else {
                    //letter sequence is not a word, add it to the queue for possible word when get the next set of letters for the next keyed number
                    q.add(possibleWord);                      
                }  
            }  
        }

   } 
   return null;          
}  

person user1835504    schedule 03.05.2013    source источник
comment
Вернуть пустой связанный список?   -  person Shark    schedule 03.05.2013
comment
@Shark нет, метод, вызываемый в этом методе, также возвращает связанный список, который я пытаюсь вернуть.   -  person user1835504    schedule 03.05.2013
comment
Да, но вы можете заменить return null на return new LinkedList<>().   -  person Duncan Jones    schedule 03.05.2013
comment
@DuncanJones Хорошо, вы имеете в виду создать новый список ссылок из связанного списка, возвращаемого внутри метода, и вернуть его?   -  person user1835504    schedule 03.05.2013
comment
Ваш оператор return null находится внутри цикла for. Переместите его наружу для цикла.   -  person dkaustubh    schedule 03.05.2013
comment
while(len-- > 0) выглядит как ошибка, не нужно ли переоценить q.size()?   -  person Duncan Jones    schedule 03.05.2013
comment
@DuncanJones возможно, но эта часть кода работает как есть.   -  person user1835504    schedule 03.05.2013
comment
Я запутался, возвращает ли метод значение null, потому что possibleWords() возвращает значение null или потому, что вы достигаете своего оператора return null;? Если вы не знаете, пожалуйста, используйте отладчик и узнайте.   -  person Duncan Jones    schedule 03.05.2013
comment
@DuncanJones PossibleWords() не является нулевым возвратом. Но я не могу заставить это вернуться в bfs_search(). Всегда просто возвращает ноль.   -  person user1835504    schedule 03.05.2013
comment
метод работает без возврата, когда я просто распечатываю переменную возможное слово в операторе if, а не передаю ее в возможное слово ().   -  person user1835504    schedule 03.05.2013
comment
Кроме того, я могу просто распечатать результат возможногоWords() в этом операторе if.   -  person user1835504    schedule 03.05.2013
comment
possibleWords() не возвращает null. Но я не могу заставить это вернуться в bfs_search(). Всегда просто возвращает ноль. › Извините, но мне это не понятно. Что всегда просто возвращает ноль?   -  person Duncan Jones    schedule 03.05.2013
comment
@DuncanJones Я имею в виду, что вместо «возврата возможных слов (возможного слова);» в операторе if, являющегося возвратом, возврат является «возвратом нуля»; который находится вне цикла for.   -  person user1835504    schedule 03.05.2013


Ответы (2)


Подпись вашего метода — это контракт — вы СОБИРАЕТЕСЬ вернуть связанный список. В этом случае вам нужно сделать одну из двух вещей: вернуть связанный список, пустой или нет, или создать исключение, если это действительно так, что должен быть связанный список с > 0 элементами.

q.add("") ничего не делает для вас, кроме как позволяет использовать len-- в качестве условия цикла. Используйте q.isEmpty в качестве элемента управления: вы либо выходите из цикла, либо добавляете строку в очередь.

Поскольку вы завершаете цикл в своем предложении if, удалите else{} вокруг q.add

если вы действительно собираетесь вернуться из тройного вложенного цикла, просто создайте исключение и обработайте его в вызывающей функции. В противном случае присвойте значение, возвращенное из возможных слов(), локальной ссылке и верните ее.

вы не упрощаете свою жизнь, используя односимвольные переменные, но это субъективная вещь :)

person Ben Brammer    schedule 03.05.2013

Вы можете добавить оператор return после цикла for

person endhvel    schedule 03.05.2013
comment
Но вызов метода possibelWords() должен быть в этом операторе if no? - person user1835504; 03.05.2013
comment
Я думаю, что он говорит о заявлении return null; - person DeadlyJesus; 03.05.2013
comment
@DeadlyJesus мой плохой, вот где он у меня был, переместил его. таким образом, он по-прежнему всегда возвращает ноль, а не возврат в операторе if. - person user1835504; 03.05.2013