我正在尝试在java中编写自己的二叉搜索树。我已经编写了所有方法,现在我正在尝试编写一个程序来测试方法。
然而,当我尝试实现我的“插入”方法时,它将无法编译,我不知道为什么。
public class lab05driver {
public static void main(String[] args) {
BST q = new BST();
int a = 5;
String b = "jed";
double c = 1.8;
char d = 'r';
boolean e = false;
int f = 35;
String g = "yay";
double h = 2.1;
char i = 'i';
boolean j = true;
Integer k = 5;
q.insert(k);
}}
我的BST课程如下:
public class BST implements myBST {
private myTreeNode root;
public BST() {
}
public void insert(Comparable x) {
if(root == null) {
root = new myTreeNode();
root.data = x;
} else if ( !lookup(x) ) {
root.insert(x);
}
}
...more code...
}
,myBST看起来像:
public interface myBST {
public void insert(Comparable x);
public void delete(Comparable x);
public boolean lookup(Comparable x);
public void printPreOrder();
public void printInOrder();
public void printPostOrder();
}
最后,myTreeNode看起来像:
public class myTreeNode {
public myTreeNode() {
}
public Comparable data ;
public myTreeNode leftchild;
public myTreeNode rightchild;
public myTreeNode parent;
public void insert(Comparable d) {
//if less than
//does left exist? if it doesnt, make it, give it d
//if it exists call insertrecursive on rightchild
if(d.compareTo(data) <= 0) {
if(leftchild != null) {
leftchild.insert(d);
} else {
leftchild = new myTreeNode();
leftchild.data = d;
leftchild.parent = this;
}
} else {
if(rightchild != null) {
rightchild.insert(d);
} else {
rightchild = new myTreeNode();
rightchild.data = d;
rightchild.parent = this;
}
}
}
...more code...
}
它在lab05driver中的“q.insert(k)”处抛出错误。任何帮助/建议将不胜感激......
~~~~~ 编辑:对不起我jsut复制错误...有一个主方法和整数k是一个整数... 获取命令行的错误是: 警告:[unchecked] unchecked调用compareTo(T)作为原始类型的成员java.lang.Comparable
答案 0 :(得分:0)
q.insert(k);
是一个声明。陈述必须在方法中,目前不在方法中。
做类似的事情:
public class lab05driver
{
public static void main( String[] args )
{
BST q = new BST();
int a = 5;
String b = "jed";
double c = 1.8;
char d = 'r';
boolean e = false;
int f = 35;
String g = "yay";
double h = 2.1;
char i = 'i';
boolean j = true;
Integer k = 1; // changed because "Integer k = "test";" doesn't compile
q.insert(k);
}
}
请注意我用于该方法的签名。这是Java看作入口方法的签名(程序将在哪里开始)。
答案 1 :(得分:0)
我能看到的最明显的问题是:
Integer k = "test";
k需要是某种整数 - 你已经为它分配了一个字符串。这不是有效的作业。有效值为-1,0,1等 - 任何整数值。
分配值后(或将k更改为String
类),您的代码应该没问题