用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();
}
至此,就已全部初始化完毕,不会再出现上边的问题啦。