【Java程序设计】用Java初始化一个类对象的数组

引出问题

今天在写算法题,在我的程序中创建了一个类,然后对这个类中的属性进行操作,大致如下:

public class Algorithm {
    static int N;//月饼类型种数
    static mooncake sold[];
    static double need;//市场最大需求量

    public static class mooncake{
        double weight;//月饼总重量
        double value;//月饼总价值
        double unit;//月饼单位重量
        mooncake(){//该类构造函数
            weight = 0;
            value = 0;
            unit = 0;
        }
    }

    public static void input(){
        Scanner scanner = new Scanner(System.in);
        N = scanner.nextInt();//输入类型种数
        sold = new mooncake[N];//初始化数组
        need = scanner.nextDouble();
        int i = 0;
        for(i = 0;i < N;i++){//输入各类型月饼重量
            sold[i].weight = scanner.nextDouble();
        }
        for(i = 0;i < N;i++){//输入各类型月饼总价值
            sold[i].value = scanner.nextDouble();
            sold[i].unit = sold[i].value/sold[i].weight;//顺便计算单位价值
        }
        scanner.close();
    }

    public static void sortaccunit(mooncake arr[],int low,int high){
        mooncake temp = new mooncake();//为交换做准备
        int i = low; //i指向比较元素的期望位置
        double x = arr[i].unit;//将该数组第一个元素设置为比较元素
        //从第二个元素开始遍历,如果找到元素小于比较元素就跳过
        for(int j = low + 1;j < high;j++){
            //如果找到了大于比较元素的数,就将其与前面较小的数交换
            if(arr[j].unit <= x){
                i++;
                temp = arr[j];
                arr[j] = arr[i];
                arr[i] = temp;
            }
        }
        //将比较元素交换到期望位置
        temp = arr[low];
        arr[low] = arr[i];
        arr[i] = temp;
    }

    public static void main(String[] args) {
        input();
        sortaccunit(sold,0,N);//根据单位价值排序
        for(int i = 0;i<N;i++){
            System.out.println(sold[i].unit);
        }
    }
}

我在这其中写了一个快速排序,我想测试一下这个排序是否正确,结果出现了以下错误:
在这里插入图片描述
后来才知道,不能这么随意地初始化类对象数组。。

在Java中初始化一个类对象数组的具体方法

第一步

这里以mooncake类为例子,类中有构造函数mooncake()
很简单,一开始像平常初始化数组一样,初始化一个mooncake类的数组

N = 10;
mooncake sold[] = new mooncake[N];//这里初始化了一个mooncake类的mooncake数组

第二步

对这个数组中的每一个成员都使用构造函数进行初始化,这个是最重要的,就是缺少了这一步,我的程序就出现了问题。

for(int i = 0;i < N;i++){
	sold[i] =new mooncake();
}

至此,就已全部初始化完毕,不会再出现上边的问题啦。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值