Java 问题:无法从静态上下文中引用(在构造算法二叉搜索树中)
Java problem: cannot be referenced from static context ( in constract algorithm binary search tree )
当我像我的输入法函数一样为我的二叉搜索树分配新值时,程序报告错误说无法从静态上下文中引用。 (这一行 a.root.left = new Node("dd",22)
表示节点不是静态的
这是我的程序:
package trylang;
import java.util.Arrays;
public class tryBSTnode<Key extends Comparable<Key>, Value> {
private Node root;
private class Node{
private Key key;
private Value value;
private Node left, right;
public Node(Key key, Value val){
this.key = key;
this.value = val;
}
}
public tryBSTnode(){
}
public void put(Key key, Value val){
root = put(root,key,val);
}
public Node put(Node nd, Key key, Value val){
if (nd == null) return new Node(key, val);
int cmp = key.compareTo(nd.key);
if (cmp>0) nd.right = put(nd.right,key,val);
else if (cmp<0) nd.left = put(nd.left, key, val);
else nd.value = val;
return nd;
}
public static void main(String[] args) {
tryBSTnode<String, Integer> a = new tryBSTnode<String, Integer>();
a.put("aa",20);
a.put("bb",67);
a.put("cc",67);
a.root.left = new Node("dd",22); //this line got problem
}
}
put方法的逻辑是当node为null时,我们可以给它分配一个新的节点
public Node put(Node nd, Key key, Value val){
if (nd == null) return new Node(key, val);
int cmp = key.compareTo(nd.key);
if (cmp>0) nd.right = put(nd.right,key,val);
else if (cmp<0) nd.left = put(nd.left, key, val);
else nd.value = val;
return nd;
}
树形结构为root(aa,20)->right(bb,67)->right(cc,67),运行put方法没有报错。 root 的左侧为空。但是,当我想将一个新节点分配给树的左侧时,itellij 说无法从静态上下文中引用此行 a.root.left = new Node("dd",22)
。为什么这一行在put方法中可以运行,但在main方法中却出错?
如错误所述;您不能从静态上下文(主要方法)访问非静态成员(节点)。将节点 class 放在 tryBSTNode class 之外,它就可以工作了。
Node
是一个内部 class,除了 this
之外还有一个 tryBSTNode.this
,它可以访问 [=14= 的成员 - 字段或方法] 对象。
由于 Node 的绑定不是预期的,因此将其设为静态:
private static class Node {
或者把class移到tryBSTNode外面;你可以在一个来源中有额外的非public classes。
或者制作一个单独的来源。
您应该将您的主程序命名为 class TryBSTNode
。也有点像单元测试,Test Driven Development。你最终可能会调查一下。
当我像我的输入法函数一样为我的二叉搜索树分配新值时,程序报告错误说无法从静态上下文中引用。 (这一行 a.root.left = new Node("dd",22)
表示节点不是静态的
这是我的程序:
package trylang;
import java.util.Arrays;
public class tryBSTnode<Key extends Comparable<Key>, Value> {
private Node root;
private class Node{
private Key key;
private Value value;
private Node left, right;
public Node(Key key, Value val){
this.key = key;
this.value = val;
}
}
public tryBSTnode(){
}
public void put(Key key, Value val){
root = put(root,key,val);
}
public Node put(Node nd, Key key, Value val){
if (nd == null) return new Node(key, val);
int cmp = key.compareTo(nd.key);
if (cmp>0) nd.right = put(nd.right,key,val);
else if (cmp<0) nd.left = put(nd.left, key, val);
else nd.value = val;
return nd;
}
public static void main(String[] args) {
tryBSTnode<String, Integer> a = new tryBSTnode<String, Integer>();
a.put("aa",20);
a.put("bb",67);
a.put("cc",67);
a.root.left = new Node("dd",22); //this line got problem
}
}
put方法的逻辑是当node为null时,我们可以给它分配一个新的节点
public Node put(Node nd, Key key, Value val){
if (nd == null) return new Node(key, val);
int cmp = key.compareTo(nd.key);
if (cmp>0) nd.right = put(nd.right,key,val);
else if (cmp<0) nd.left = put(nd.left, key, val);
else nd.value = val;
return nd;
}
树形结构为root(aa,20)->right(bb,67)->right(cc,67),运行put方法没有报错。 root 的左侧为空。但是,当我想将一个新节点分配给树的左侧时,itellij 说无法从静态上下文中引用此行 a.root.left = new Node("dd",22)
。为什么这一行在put方法中可以运行,但在main方法中却出错?
如错误所述;您不能从静态上下文(主要方法)访问非静态成员(节点)。将节点 class 放在 tryBSTNode class 之外,它就可以工作了。
Node
是一个内部 class,除了 this
之外还有一个 tryBSTNode.this
,它可以访问 [=14= 的成员 - 字段或方法] 对象。
由于 Node 的绑定不是预期的,因此将其设为静态:
private static class Node {
或者把class移到tryBSTNode外面;你可以在一个来源中有额外的非public classes。
或者制作一个单独的来源。
您应该将您的主程序命名为 class TryBSTNode
。也有点像单元测试,Test Driven Development。你最终可能会调查一下。