0

我不知道在哪里或如何放置我的 return 语句,所以我返回一个链表。链表的返回是循环的。但是,我需要在此之外有一个退货声明,但无法正常工作。我只是不断得到空返回。尝试放入 else 语句,但它不起作用。我觉得这是一个简单的解决方案,但无法解决。我知道在这段代码中总是读取返回 null,只是不知道如何放置它,所以它并不总是返回 null。

方法是接收一串数字,将字母附加到键盘上的这些数字上,并将这些字符串的可能组合放入查找单词并返回这些单词的链接列表的方法中。

只是无法计算出方法中的return语句。

 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;          
}  
4

2 回答 2

1

您的方法签名是一个合同——您将返回一个链表。在这种情况下,您需要做两件事之一——返回一个链表,无论是否为空,或者如果确实存在必须有 > 0 个项目的链表,则抛出异常。

除了可以使用 len-- 作为循环条件之外, q.add("") 对您没有任何作用。使用 q.isEmpty 作为您的控制:您要么离开循环,要么将字符串添加到队列中。

由于您要在 if 子句中结束循环,因此请从 q.add 周围删除 else{}

如果你真的打算从三重嵌套循环中返回,只需抛出一个异常并在调用函数中处理它。否则,将从 possibleWords() 返回的值分配给本地引用,然后返回它。

使用单字符变量并没有让你的生活变得更轻松,但这是一件主观的事情:)

于 2013-05-03T16:33:48.773 回答
0

您可以在 for 循环之后添加 return 语句

于 2013-05-03T14:36:01.147 回答