本人新手,求高人指点java!帮忙看下代码哪出问题了吧!

之前已经写好了一个Account类,可以设置用户id、balance,产生日期,现在要设计并测试一个抽奖类,抽奖类可以从n个账户中抽出m个不重复账户,并返回中奖账户的id、balance和产生日期。代码运行后总是显示nullPointerException。各位高人帮我看看代码哪出了问题吧!

import javax.swing.JOptionPane;
public class SelectAccountRandomly {
public static void main(String[] args){
SelectAccountRandomly random=new SelectAccountRandomly();
random.Select(10,3);
}
public void Select(int n,int m){
int[] array=new int[n];
boolean y = true;
for (int i = 0; i <m; i++) {
do {
y = true;
int random = (int) (Math.random() * n);
for (int j = 0; j < i; j++) {
if (array[j] == random) {
y = false;
break;
}
}
if (y) {
array[i]=random;
}
} while(!y);
}

Account[] account=new Account[n];
for(int i=0;i<n;i++){
account[i].setId(i+1);
account[i].setBalance(20000);
}
for(int i=0;i<m;i++){
String output="Congratulations: "+"id: "+account[array[i]].getId()+"balance: "+account[array[i]].getBalance()+"date: "+account[array[i]].getAccountDate().toString();
JOptionPane.showMessageDialog(null, output);

}

}
}

问题出在这里
Account[] account=new Account[n];
for(int i=0;i<n;i++){
account[i].setId(i+1);
account[i].setBalance(20000);
}
你的数组只是声明了10个Account类型的引用空间,但是每个元素还没有初始化,,所以account[i]为null
可以改成这样
for(int i=0;i<n;i++){
account[i] = new Account();
account[i].setId(i+1);
account[i].setBalance(20000);
}

原来有人已经回答了
account[i].setAccountDate(new Date());//另外你还要再添加一行,因为你在String output="Congratulations: "+"id: "+account[array[i]].getId()+"balance: "+account[array[i]].getBalance()+"date: "+account[array[i]].getAccountDate().toString();最后的getAccountDate().toString()得到的日期可能为空,不能使用null.toString(),也会报空指针

也不一定要添加,你这个date取得是当前时间,类似常量。代码简化期间,可以在Account的构造函数里面初始化date,或者在声明date的时候直接初始化。

方法1
class Account{
public Account(){
date = new Date()
}

方法2
class Account
private Date date = new Date()
}

这样肯定就不会NullPointerException了
温馨提示:内容为网友见解,仅供参考
第1个回答  2010-12-24
刚才我运行了一下,是30行出错了:account[i].setId(i+1);
account数组初始化时长度是10,而数组里面并没有数据,没有Account对象,所以不能使用null.setId(i+1);
你可以实例化十个空的Account对象放在数组里,就不会出现空指针了。
for(int i=0;i<n;i++){
account[i] = new Account();//实例化对象。
account[i].setId(i+1);
account[i].setBalance(20000);
account[i].setAccountDate(new Date());//另外你还要再添加一行,因为你在String output="Congratulations: "+"id: "+account[array[i]].getId()+"balance: "+account[array[i]].getBalance()+"date: "+account[array[i]].getAccountDate().toString();最后的getAccountDate().toString()得到的日期可能为空,不能使用null.toString(),也会报空指针异常。

}
第2个回答  2010-12-24
有点乱...
相似回答