Java错误:Exception in thread "main" java.lang.NullPointerException

写了一个Java程序可是没办法运行;代码如下:packagehellojava11;publicclassMaxextendsOutClass{publicstaticv... 写了一个Java程序可是没办法运行;
代码如下:
package hellojava11;

public class Max extends OutClass{
public static void main(String[] args){
double[] arr={34,66,12,45,33,678,2,44,6};
OutClass example = new OutClass();
example.outmethod();
}
}
class OutClass{
public void outmethod(){
InnerClass o = new InnerClass();
o.zuida(); //System.out.println(o.temp);
}
class InnerClass {
double[] arr;
public void zuida(){
double temp=arr[0];
for(int i=0;i<arr.length-1;i++){
if(temp < arr[i]){
temp=arr[i];
}
}
System.out.println(temp);
}
}
}
感觉好像是指针指到了null,但是不知道为什么会这样,真诚求教
展开
 我来答
zjgzhengxian
推荐于2016-03-20 · TA获得超过1276个赞
知道小有建树答主
回答量:736
采纳率:100%
帮助的人:374万
展开全部

最终就是运行下面语句中的zuida方法:

double[] arr;
public void zuida(){
    double temp=arr[0];
    for(int i=0;i<arr.length-1;i++){
        if(temp < arr[i]){
            temp=arr[i];
        }
    }
    System.out.println(temp);
}

这个for循环中的arr就是InnerClass这个类的全局变量,上面声明的那个double[] arr;

因为没有初始化,所以此时arr=null,所以进行arr.length报空指针异常。

double[] arr={34,66,12,45,33,678,2,44,6};这个语句应该写在InnerClass里覆盖掉double[] arr;

更多追问追答
追问
是这样的,我想定义一个内部类;一个外部类;一个和外部类同等地位的类,让这个类继承了外部类。然后将数组赋值在这个和外部类同等地位的类里面,调用内部类里面的方法,但是现在完全懵了,请问能指教下怎么改吗?
追答

class OutClass {这行后面添加:

//arr数组为OutClass的全局变量,也能在InnerClass中直接引用
public static double[] arr;

去掉最开始的double[] arr={34,66,12,45,33,678,2,44,6};

arr数组在main函数中赋值,OutClass example = new OutClass();后面添加:

//注:如果上面arr没有声明为static的话,需要example.arr=....
arr = new double[]{34, 66, 12, 45, 33, 678, 2, 44, 6};

最后,去掉InnerClass类中的double[] arr;

总的来说就是

public class Max extends OutClass {
    public static void main(String[] args) {
        OutClass example = new OutClass();
        arr = new double[]{34, 66, 12, 45, 33, 678, 2, 44, 6};
        example.outmethod();
    }
}
class OutClass {
    public static double[] arr;
    public void outmethod() {
        InnerClass o = new InnerClass();
        o.zuida();
    }
    class InnerClass {
        public void zuida() {
            double temp = arr[0];
            for (int i = 0; i < arr.length - 1; i++) {
                if (temp < arr[i]) {
                    temp = arr[i];
                }
            }
            System.out.println(temp);
        }
    }
}
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式