这是一个快递柜小程序,使用二维数组存储快递单号,取件码公司等信息。
public class Express {
private String number;//快递单号
private String company;//快递公司
private int code;//取件码
public String getNumber() {
return number;
}
public void setNumber(String number) {
this.number = number;
}
public int getCode() {
return code;
}
public void setCode(int code) {
this.code = code;
}
首先开辟一个10x10的二维数组
private Express[][] date = new Express[10][];
//生成10x10二维数组
{
for (int i = 0; i < 10; i++) {
date[i] = new Express[10];
}
}
主函数调用add方法添加快递,用size来记录二维数组是否已经满
int size = 0;
public boolean add(Express e) {
if (size == 100) {
return false;
}
//随机生成2个0~9的下标
int x = -1;
int y = -1;
while (true) {
y = random.nextInt(10);
x = random.nextInt(10);
if (date[x][y] == null) {
//位置为空可以存储快递
break;
}
}
//生成取件码
int code = randomCode();
e.setCode(code);
date[x][y] = e;
return true;
}
存储数据的时候随机数生成一个6位的取件码
private Random random = new Random();
private int randomCode(){//产生10000~999999取件码
while (true) {
int code = random.nextInt(900000) + 100000;
Express e = findByCode(code);
if(e == null){//如果不存在,取件码不重复生成取件码
return code;
}
}
}
在存储之前先查看生成的6位取件码是否重复,采用暴力方法变量查询
public Express findByCode(int code){//通过取件码查询快递
for(int i=0;i<10;i++){
for (int j = 0;j<10;j++){
if(date[i][j].getCode() == code){//如果取件码存在则范围快递所在的下标
return date[i][j];
}
}
}
return null;
}
代码大致上就是这些,在运行添加的时候却出现了空指针异常的问题
然后我使用debug发现错误在这行代码上,6位随机数已经产生了,因为是刚添加,遍历二维数组里没有存储数据,所以我这里直接与随机产生的code相比较却出现了空指针异常的问题。
解决:数组没有插入数据时,默认指向为null,这时候很容易出现空指针异常,当比较的时候应保证二维数组里有值。所以我添加了一个判空语句
if(date[i][j]!=null && date[i][j].getCode() == code)
添加后程序成功运行没有出现异常
刚学java,虽然简单的理解了面向过程的思想,但是实际编程的时候很容易被一些小问题卡住,程序猿的里程还有很远!