Итак, у меня есть последний в понедельник в Java, и в классе мы перешли на generics, и я подумал, что это выглядит просто. Я хотел попробовать это, используя пример из книги. Поэтому я пытаюсь создать родовое дерево. Дело в том, что мой код почти одинаково похож на примеры, используемые в классе, за исключением того, что мой не будет работать. Я довольно смущен, почему. Он говорит мне, что мне не хватает идентификатора в методе insert. Но, как я уже сказал, это выглядит как идеальная смесь между тем, что сделал профессор, и примером книг. Я попытался найти ответы на другие вопросы о дженериках, но я просто стал более смущенным. Возможно ли кому-то в простых терминах (в пределах разумного) объяснить мне, что я делаю неправильно? Если ваши интересно на какой учебник это Java Как программа по Deitel и DeitelJava Generic Tree Comparable
// Tree.java
// Definition of class TreeNode and class Tree.
// class TreeNode definition
class TreeNode<E extends Comparable<TreeNode<E>>>
{
TreeNode<E> leftNode; // left node
E data; // node value
TreeNode<E> rightNode; // right node
// constructor initializes data and makes this a leaf node
public TreeNode(E nodeData)
{
data = nodeData;
leftNode = rightNode = null; // node has no children
} // end TreeNode constructor
// locate insertion point and insert new node; ignore duplicate values
public void <E extends Comparable<TreeNode<E>>> insert(E insertValue)
{
// insert in left subtree
if (data.compareTo(insertValue) > 0)
{
// insert new TreeNode
if (leftNode == null)
leftNode = new TreeNode<E>(insertValue);
else // continue traversing left subtree
leftNode.insert(insertValue);
} // end if
else if (data.compareTo(insertValue) < 0) // insert in right subtree
{
// insert new TreeNode
if (rightNode == null)
rightNode = new TreeNode<E>(insertValue);
else // continue traversing right subtree
rightNode.insert(insertValue);
} // end else if
} // end method insert
} // end class TreeNode
// class Tree definition
public class Tree<E>
{
private TreeNode<E> root;
// constructor initializes an empty Tree of integers
public Tree()
{
root = null;
} // end Tree no-argument constructor
// insert a new node in the binary search tree
public void insertNode(E insertValue)
{
if (root == null)
root = new TreeNode<E>(insertValue); // create the root node here
else
root.insert(insertValue); // call the insert method
} // end method insertNode
// begin preorder traversal
public void preorderTraversal()
{
preorderHelper(root);
} // end method preorderTraversal
// recursive method to perform preorder traversal
private void preorderHelper(TreeNode<E> node)
{
if (node == null)
return;
System.out.printf("%d ", node.data); // output node data
preorderHelper(node.leftNode); // traverse left subtree
preorderHelper(node.rightNode); // traverse right subtree
} // end method preorderHelper
// begin inorder traversal
public void inorderTraversal()
{
inorderHelper(root);
} // end method inorderTraversal
// recursive method to perform inorder traversal
private void inorderHelper(TreeNode<E> node)
{
if (node == null)
return;
inorderHelper(node.leftNode); // traverse left subtree
System.out.printf("%d ", node.data); // output node data
inorderHelper(node.rightNode); // traverse right subtree
} // end method inorderHelper
// begin postorder traversal
public void postorderTraversal()
{
postorderHelper(root);
} // end method postorderTraversal
// recursive method to perform postorder traversal
private void postorderHelper(TreeNode<E> node)
{
if (node == null)
return;
postorderHelper(node.leftNode); // traverse left subtree
postorderHelper(node.rightNode); // traverse right subtree
System.out.printf("%d ", node.data); // output node data
} // end method postorderHelper
} // end class Tree
Это мой класс драйвера, который является фрагментом книги используется в качестве примера:
// This program tests class Tree.
import java.util.Random;
public class TreeTest
{
public static void main(String args[])
{
Tree tree = new Tree<E>();
E value;
Random randomNumber = new Random();
System.out.println("Inserting the following values: ");
// insert 10 random integers from 0-99 in tree
for (int i = 1; i <= 10; i++)
{
value = randomNumber.nextInt(100);
System.out.print(value + " ");
tree.insertNode(value);
} // end for
System.out.println ("\n\nPreorder traversal");
tree.preorderTraversal(); // perform preorder traversal of tree
System.out.println ("\n\nInorder traversal");
tree.inorderTraversal(); // perform inorder traversal of tree
System.out.println ("\n\nPostorder traversal");
tree.postorderTraversal(); // perform postorder traversal of tree
System.out.println();
} // end main
} // end class TreeTest
Пробовали ли вы не используете ' E' в main()? Как с помощью 'Integer'instead? – Shark
Когда вы создаете экземпляр 'Tree', вам нужно сказать, какой тип' E' будет. – jr593
Упс! Исходный тип: 'Tree tree = new Tree();'. Try 'Tree tree = новое дерево ();' –
Bohemian