java创建自定义类的数组

java创建自定义类的数组

错题笔记

学习动态规划做例题hdu 2602遇到的问题:创建自定义类后,新建一个自定义类的数组,向数组赋值时报如下错误:

java.lang.NullPointerException: Cannot assign field "val" because "bone[i]" is null

通过搜索报错信息发现也有同学出现了类似问题,根据大家的经验我在代码中加入了标注行

import java.util.Scanner;
public class ddd20 {
    class BONE{
        int val;//体积
        int vol;//价值
        BONE(int val,int vol){
            this.val = val;
            this.vol = vol;
        }
    }
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int N = sc.nextInt();
        BONE bone[] = new BONE[N];
        for(int i=0;i<N;i++){
            bone[i] = new BONE();//根据网上资料添加
            bone[i].val = sc.nextInt();
        }
        for(int i=0;i<N;i++){
            bone[i].vol = sc.nextInt();
        }
        for(int i=0;i<N;i++){
            System.out.println("体积:"+bone[i].val+"重量:"+bone[i].vol);
        }
    }
}

结果仍然报错

cannot be referenced from a static context

于是尝试其他方法,将自定义类放置于主结构外,并给初始化后的数组元素赋予初值,使得指针指向该位置,改后代码如下:

import java.util.Scanner;
public class ddd20 {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int N = sc.nextInt();
        BONE bone[] = new BONE[N];
        for(int i=0;i<N;i++){
            bone[i] = new BONE(0,0);
            bone[i].val = sc.nextInt();
        }
        for(int i=0;i<N;i++){
            bone[i].vol = sc.nextInt();
        }
        for(int i=0;i<N;i++){
            System.out.println("体积:"+bone[i].val+"重量:"+bone[i].vol);
        }
    }
}
    class BONE{
        int val;//体积
        int vol;//价值
        BONE(int val,int vol){
            this.val = val;
            this.vol = vol;
        }
    }

运行无错。

总结:在java中,数组存放的是这个类型的对象,万物皆对象。Java语言本身是不提供在自定义类数组声明时候自动创建新对象的方式的。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值