[英]Java Binary Search tree method needs to return value instead of print
我有一種方法,我需要返回BST值而不是打印它們,以便可以將結果發送到jtextarea而不是打印它。 方法如下:
public void printInOrder(BSTNode node) {
if (node != null) {
nodecount++;
printInOrder(node.left);
System.out.println(node.word + " - " + node.data);
if (node.data == 1)
uc++;
printInOrder(node.right);
}
}
這是我嘗試調用該方法的代碼,以便我可以將其發送到JTextArea。...結果是jtextarea的名稱
class Alphabetical implements ActionListener {
public void actionPerformed(ActionEvent e) {
File f = new File(dir.getText() + "\\" + filename.getText());
try {
Scanner sc = new Scanner(f);
BSTFunctions bs = new BSTFunctions();
while (sc.hasNext()) {
bs.insert(bs.ROOT, sc.next().toLowerCase().trim(), 1);
}
bs.printInOrder(bs.ROOT);
results.append(bs.printInOrder(bs.ROOT));
sc.close();
} catch (FileNotFoundException e1) {
e1.printStackTrace();
}
}
}
我認為最干凈的方法是通過傳遞給方法的某種回調。
嘗試這個:
public interface BSTListener
{
public void onNode(BSTNode node);
}
public void callbackInOrder(BSTNode node,
BSTListener listener)
{
if (node != null)
{
callbackInOrder(node.left, listener);
listener.onNode(node);
callbackInOrder(node.right, listener);
}
}
然后,實現此偵聽器,該偵聽器將節點添加到JTextArea中:
BSTListener listener;
listener = new BSTListener()
{
@Override
public void onNode(BSTNode node)
{
results.append(node.word + " - " + node.data);
}
};
bs.callbackInOrder(bs.ROOT, listener);
如果您不喜歡回調解決方案,則可以嘗試創建一個返回包含以下元素的列表的方法:
public List<String> listInOrder(BSTNode node)
{
List<String> result = new ArrayList<String>();
if (node != null)
{
result.addAll(listInOrder(node.left));
result.add(node.word + " - " + node.data);
result.addAll(listInOrder(node.right));
}
return result;
}
當然這具有所有元素第二次存儲在存儲器中的缺點。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.