Java: возвращение InOrder Traversal в виде строки в JLabel - PullRequest
0 голосов
/ 25 сентября 2019

Попытка вернуть вывод прохождения InOrder в Java JLabel.Я могу вернуть содержимое ArrayList, но мне нужно, чтобы вывод был строкой без [,,,].Я уверен, что это простое решение, но я застрял некоторое время, пробуя разные вещи, в основном преследуя свой хвост.Приветствуется любая предоставленная помощь.

Часть GUI: Хранит ввод из текстового поля как String originalList.Пытается установить текст JLabel "resultBox" с выводом из getResult ().

        if (e.getSource() == sortBtn) {
            System.out.println("Test");
            String originalList = readN();
            resultBox.setText(getResult(originalList));
            System.out.println("Original List: " + originalList);
        }

getResult () токенизирует originalList и вставляет в дерево BinarySearchTree и возвращает обходной путь inorder tree.inOrder () '

   public static String getResult(String tokenString) {

        StringTokenizer tokens = new StringTokenizer(tokenString, "()*/+- ", false);

        while (tokens.hasMoreTokens()) {
            String tkn = tokens.nextToken();

            if(tkn.equals(" ")) {
                //ignore spaces
            }
            else {
                int key = Integer.parseInt(tkn);
                tree.insert(key);
            }
        }
        return tree.inorder();
    }

inorder () вызывает inorderRec () и возвращает результат.

// This method mainly calls inorderRec() 
    String inorder()  { 
       String result = inorderRec(root);
       return result;
    } 

    // A utility function to do inorder traversal of BST 
    String inorderRec(Node root) {

        if (root != null) { 
            inorderRec(root.left); 
            keyList.add(root.key);
            inorderRec(root.right);
        }
        return String.valueOf(keyList);
        //return result;
    }

При использовании ввода 50 30 20 40 70 60 80 результат, видимый для JLabel, должен быть 20 30 4050 60 70 80, но фактический выход составляет [20, 30, 40, 50, 60, 70, 80]

Ответы [ 3 ]

0 голосов
/ 25 сентября 2019

Если вы используете Java 8 или выше, вы можете использовать API String.join() (https://docs.oracle.com/javase/8/docs/api/java/lang/String.html#join-java.lang.CharSequence-java.lang.Iterable-), чтобы объединить все элементы списка в одну строку с заданным разделителем. Например:

List<String> names = Arrays.asList("Mark", "Stacy", "Gretta");
System.out.println(String.join(" ", names));

выдаст:

Mark Stacy Gretta

0 голосов
/ 25 сентября 2019

Я понял это.Я понял, что user7 дал мне подсказку: «создайте вывод в нужном формате после возврата метода inorderRec».Первоначально я повторял keyList в inorderRec (), но выводил только один индекс, скорее всего потому, что оператор в цикле был:

result = String.valueOf (keyList.get (i) + "");

вместо

result + = String.valueOf (keyList.get (i) + "");

Я переместил это в inorder () и все выводится правильно.Большое спасибо вам обоим за помощь.Очень признателен!

Обновленный код выводит корректно:

// This method mainly calls InorderRec() 
    String inorder()  { 
       //String result = inorderRec(root);
       inorderRec(root);
       for (int i = 0; i < keyList.size(); i++) {
                //System.out.print(keyList.get(i) + " ");
                result += String.valueOf(keyList.get(i) + " ");
            }
       return result;
    } 

    // A utility function to do inorder traversal of BST 
    void inorderRec(Node root) {

        if (root != null) { 
            inorderRec(root.left); 
            keyList.add(root.key);
            inorderRec(root.right);
        }
    }

Выход GUI

0 голосов
/ 25 сентября 2019

String.valueOf(keyList) вызывает toString списка - таким образом, вы в конечном итоге получаете представление.

Скорее, создайте вывод в желаемом формате после возврата метода inorderRec.Для этого я вижу, что нет необходимости возвращать что-либо из inorderRec, поскольку вы добавляете в некоторый список (keyList) (который вы не указали, где он создается)

String inorder()  { 
   inorderRec(root);
   return String.join(" ", ketList);
} 

void inorderRec(Node root) {

    if (root != null) { 
        inorderRec(root.left); 
        keyList.add(root.key);
        inorderRec(root.right);
    }
}

String.join состояния javadoc

Возвращает новую {@code String}, состоящую из копий {@code CharSequence элементов}, объединенных вместе с копией указанного {@ code delimiter}.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...