无法解决java.lang.NullPointerException
无论我如何处理行无法解决java.lang.NullPointerException,java,nullpointerexception,Java,Nullpointerexception,无论我如何处理行bTree.binaryTree[I].Data=in.nextLine()导致 输入二叉树中的节点数:中的5个异常 位于的节点#0的线程“main”java.lang.NullPointerException详细信息 初始化(framework.java:19)输入Data:at binaryTree.main.main(main.java:9)进程已完成,退出代码为1 Github要点: 编辑: (遵循幽灵猫的建议后) 我已经尽了最大努力初始化了几乎所有的东西,以避免在任何地
bTree.binaryTree[I].Data=in.nextLine()框架类中的代码>导致
输入二叉树中的节点数:中的5个异常
位于的节点#0的线程“main”java.lang.NullPointerException详细信息
初始化(framework.java:19)输入Data:at
binaryTree.main.main(main.java:9)进程已完成,退出代码为1
Github要点:
编辑:
(遵循幽灵猫的建议后)
我已经尽了最大努力初始化了几乎所有的东西,以避免在任何地方出现“null”,但是这个异常会不断出现
节点类
package binaryTree;
import java.util.*;
public class node {
boolean hasLeft,hasRight;
boolean isRootPrimary,isRoot;
String Data;
String nodeID,leftNodeID,rightNodeID,parentID;
int childrenNodeCount;
node(){
hasLeft=false;
hasRight=false;
Data="";
childrenNodeCount=0;
}
void check(){
if(hasLeft||hasRight)
isRoot=true;
}
String fetchRoot(){
return parentID;
}
String fetchID(){
return nodeID;
}
String fetchSiblingID(){
return "("+String.valueOf(leftNodeID)+" "+String.valueOf(rightNodeID)+")";
}
}
树类
package binaryTree;
import java.util.*;
public class Tree extends node{
node binaryTree[];
int count;int rootID,height,depth;
String siblingPairs,leaves;
Tree(int count){
binaryTree=new node[count];
this.count=count;
rootID=0;
height=0;depth=0;
}
void finalise(){
for(int i=0;i<count;i++){
if(binaryTree[i].childrenNodeCount==0)
leaves=String.valueOf(binaryTree[i].fetchID());
if(binaryTree[i].childrenNodeCount==2){
siblingPairs=binaryTree[i].fetchSiblingID();
}
}
StringTokenizer st=new StringTokenizer(leaves);
while(st.hasMoreElements()){
int counter=0;
int leafID=Integer.valueOf(st.nextToken());
node temp=binaryTree[leafID];
while(temp.isRootPrimary){
temp=binaryTree[Integer.valueOf(temp.fetchRoot())];
counter=counter+1;
}
if(counter>height) {
height = counter;
depth=height-1;
}
}
}
}
package binaryTree;
import java.util.*;
public class framework {
public Tree intialize(){
System.out.print("Enter the Number of Nodes in the Binary Tree :");
Scanner in=new Scanner(System.in);
int count=in.nextInt();
Tree bTree=new Tree(count);
int ID=0;int i=0;
while(i<count){
System.out.println("Details for node#"+i);
System.out.print("Enter Data :");
bTree.binaryTree[i].Data=in.nextLine();
bTree.binaryTree[i].nodeID=String.valueOf(ID);
if(i!=0){
boolean flag = true;
while (flag) {
String parentID="";
System.out.print("Enter the node's Parent:");
parentID = in.nextLine();
if (bTree.binaryTree[Integer.valueOf(parentID)].childrenNodeCount >= 2) {
System.out.println("Parent Node is Full");
}
else {
bTree.binaryTree[i].parentID = in.nextLine();
bTree.binaryTree[Integer.valueOf(parentID)].childrenNodeCount=bTree.binaryTree[Integer.valueOf(parentID)].childrenNodeCount+1;
flag=false;
}
}
System.out.print("Is the node Parent's Left?");
String temp=in.next();
if(temp.equalsIgnoreCase("yes")||temp=="1"||temp.equalsIgnoreCase("y")){
bTree.binaryTree[Integer.valueOf(bTree.binaryTree[i].parentID)].hasLeft=true;
bTree.binaryTree[Integer.valueOf(bTree.binaryTree[i].parentID)].leftNodeID=bTree.binaryTree[i].nodeID;
}
else {
bTree.binaryTree[Integer.valueOf(bTree.binaryTree[i].parentID)].hasRight = true;
bTree.binaryTree[Integer.valueOf(bTree.binaryTree[i].parentID)].rightNodeID=bTree.binaryTree[i].nodeID;
}
}
else
bTree.binaryTree[i].isRootPrimary=true;
bTree.binaryTree[i].check();
i=i+1;ID=ID+1;
}
bTree.finalise();
return bTree;
}
public void displayAll(Tree bTree){
System.out.println("Running a Full Analysis on the Binary Tree");
System.out.println("Printing nodes Details");
for(int i=0;i<bTree.count;i++){
System.out.println("Node #"+i);
System.out.println("PrimaryRoot :"+bTree.binaryTree[i].isRootPrimary);
System.out.println("isRoot :"+bTree.binaryTree[i].isRoot);
System.out.println("Data :"+bTree.binaryTree[i].Data);
System.out.println("Number of Children Nodes :"+bTree.binaryTree[i].childrenNodeCount);
System.out.println("hasLeft :"+bTree.binaryTree[i].hasLeft);
if(bTree.binaryTree[i].hasLeft)
System.out.println("LeftNodeID :"+bTree.binaryTree[i].leftNodeID);
System.out.println("hasRight :"+bTree.binaryTree[i].hasRight);
if(bTree.binaryTree[i].hasRight)
System.out.println("RightNodeID :"+bTree.binaryTree[i].rightNodeID);
System.out.println("parentID :"+bTree.binaryTree[i].fetchRoot());
System.out.println("SiblingPairs (if any) :"+bTree.binaryTree[i].fetchSiblingID());
System.out.println("____________________________________________________________________________");
}
System.out.println("Tree Specifications");
System.out.println("Total No. of Nodes :"+bTree.count);
System.out.println("Height of Tree :"+bTree.height);
System.out.println("Depth of Tree :"+bTree.depth);
System.out.println("Leaves :"+bTree.leaves);
System.out.println("Sibling Pairs :"+bTree.siblingPairs);
}
}
package binaryTree;
public class main {
public static void main(String Args[]){
framework Framework=new framework();
Tree binaryTree=Framework.intialize();
Framework.displayAll(binaryTree);
}
}
错误出现在访问树对象的位置bTree.binaryTree[i].data
,您正在尝试访问null的属性
System.out.println("Details for node#"+i);
System.out.print("Enter Data :");
//bTree.binaryTree[i] = new Tree(i); //uncomment this line its will work
bTree.binaryTree[i].Data=in.nextLine(); bTree.binaryTree[i] is null or not initialized.
bTree.binaryTree[i].nodeID=String.valueOf(ID);
在本例中,您创建了一个对象数组,但数组中并没有填充任何对象,访问这些位置将以NullPointerException结束。使用new
操作符创建一个对象,然后分配到位置binaryTree[i]
,然后您就可以访问数据了 错误出现在您访问树对象的位置bTree.binaryTree[i]。data
,您正在尝试访问null的属性
System.out.println("Details for node#"+i);
System.out.print("Enter Data :");
//bTree.binaryTree[i] = new Tree(i); //uncomment this line its will work
bTree.binaryTree[i].Data=in.nextLine(); bTree.binaryTree[i] is null or not initialized.
bTree.binaryTree[i].nodeID=String.valueOf(ID);
在本例中,您创建了一个对象数组,但数组中并没有填充任何对象,访问这些位置将以NullPointerException结束。使用new
操作符创建一个对象,然后分配到位置binaryTree[i]
,然后您就可以访问数据了 您的问题在于:
binaryTree=new node[count];
这只会创建一个新的但空的数组
首先必须迭代该数组,并在每个插槽中插入一个节点对象
此外:您想阅读java编码风格指南。例如,类名总是以大写开头 您的问题在于:
binaryTree=new node[count];
这只会创建一个新的但空的数组
首先必须迭代该数组,并在每个插槽中插入一个节点对象
此外:您想阅读java编码风格指南。例如,类名总是以大写开头 可能的重复遵循java命名约定,如果您不知道,请阅读它。感谢您的快速接受。当我下周有时间的时候,我会给你一些建议。可能重复的遵循java命名约定,如果你不知道,去阅读它。谢谢你的快速接受。下周我会给你一些建议。bTree.binaryTree[]已经在树类中初始化,节点的数据在节点的构造函数中初始化为“”。你是否尝试了你的代码@Kiran Kumar it return线程“main”java.lang.ArrayIndexOutOfBoundsException:0
是的,我知道,但我正在指导他为什么会发生NullPointerException,就是这样,我不担心他的逻辑。这并不能提供解决方案@Kiran Kumar,这只是解释,他或她可以在链接中了解NullPointException:)你是对的@MrLY但是,他没有告诉我们他想要实现什么,或者他想要做什么?bTree.binaryTree[]已经在树类中初始化,节点的数据在节点的构造函数中被初始化为“”。你是否尝试过你的代码@Kiran Kumar it return线程“main”java.lang.ArrayIndexOutOfBoundsException:0
是的,我知道,但我正在指导他为什么会发生NullPointerException,就是这样,我不担心他的逻辑。这并不能提供解决方案@Kiran Kumar,这只是解释,他或她可以在链接中了解NullPointException:)你是对的@MrLY但是,他没有告诉我们他想要实现什么,或者他想要做什么,对吗?试过你的建议,现在我可以让程序运行了,这很奇怪。。。新程序位于,结果输出为输入二叉树中的节点数:3节点详细信息#0输入数据:节点详细信息#1输入数据:完全跳过第一个节点的数据输入…这并不奇怪。对不起,你的代码是一堆奇怪的代码。但这不是一个我们为您调试混乱代码的站点。也许我以后会看一看。。。但这可能意味着周二……谢谢你的努力。我发现了错误,现在运行良好;)。试过你的建议现在我可以让程序运行了很奇怪。。。新程序位于,结果输出为输入二叉树中的节点数:3节点详细信息#0输入数据:节点详细信息#1输入数据:完全跳过第一个节点的数据输入…这并不奇怪。对不起,你的代码是一堆奇怪的代码。但这不是一个我们为您调试混乱代码的站点。也许我以后会看一看。。。但这可能意味着周二……谢谢你的努力。我发现了错误,现在运行良好;)。