java对象数组问题

来源:百度知道 编辑:UC知道 时间:2024/06/24 08:58:40
import java.io.IOException;
import java.util.Scanner;

class BiTreeNode{
String content;
BiTreeNode left;
BiTreeNode right;
BiTreeNode(){

}
BiTreeNode(String content,BiTreeNode left,BiTreeNode right){
this.content=content;
this.left=left;
this.right=right;
}
void preOrder(){

}
void inOrder(){

}
void postOrder(){

}
}

public class ThreeOrder {
public static void main(String args[]) throws IOException{
Scanner in = new Scanner(System.in);
System.out.println("请输入二叉树内容:第一行为节点数n,后面的n行是节点A -1 3的形式");
int n=in.nextInt();
BiTreeNode notreenode=new BiTreeNode();
BiTreeNode[] bitreenode=new BiTreeNode[n];
int l=0,r=0;
String s="";
for(int i=0;i<n;i++){
s=in.next();
l=in.nextInt();
r=in.nextInt();
if(l==-1&&r==-1){

BiTreeNode[] bitreenode=new BiTreeNode[n]; 如果改成
BiTreeNode[] bitreenode;会出现编译错误,因为bitreenode没有初始化,并没有创建实例,java会强制限制禁止没有初始化的情况,但你可用=null初始化,到后面进行赋值。如果是对象数组,后面调用bitreenode时别忘了初始化对象,比如bitreenode=new BiTreeNode[3];否则执行bitreenode[i] = new BiTreeNode(s, bitreenode[l], bitreenode[r]);时出现空错误,试问:i到底是多少好呢?答案是任何整数都不行,必须初始化bitreenode对象数组。

略过这一点,从上面的代码看来,执行是可能发生数组越界异常,因为从
BiTreeNode[] bitreenode=new BiTreeNode[n]; 看来,调用bitreenode[i]时,i的取值范围为[0,n-1],后面有bitreenode[i]=new BiTreeNode(s,bitreenode[l],bitreenode[r]);之类的语句,也就是说从控制台输入的数字也就是后来赋值给l或r的那些数据不能超过这个范围!当然,如果不小心n<=0,运行时执行到调用bitreenode[i]时立即发生数组越界异常。如果保证从控制台输入的数字在[0,n-1],理论上是可以得到预想输出结果的。

这里不可以是BiTreeNode[] bitreenode;
因为你没有指定这个变量实际的数组对象,那么在下面的
bitreenode[i] 这里就会报错了
想想,你能对null执行null[i]么~

首先,BiTreeNode数组对象bitreenode中没有任何元素。

尽管对象型数组也是通过 new 创建,但数组中不包含元素,即对象的实例,元素需要填充到数组中。

数组,不管是什么类型,它只是一个“容器”,只能装载元素,不能产生元素。一个仅初始化的对象型数组中不包含任何元素,所有元素都是 null。

所以,你的代码中只要遇到 bitreenode