数组遇到的问题及解决方式
在做一个简单的快递e栈的综合练习中,我遇到的一个难点就在于只使用数组来存取数据。原问题是需要存取快递单号,快递公司以及取件码,快递员可操作快递单号,快递公司,自动生成取件码,用户只可操作取件码。
在将快递单号,快递公司,以及取件码一一对应时我遇到了如果将此三个属性存到一个数组中,于是我建立了三个数组,分别存取存取这三个属性,由快递单号作为三个数组的下标进行对取件码以及公司的一一对应。
这个时候又遇到了新的问题:我将三个数组的定义放在我的switch判断中的case中时,信息并没有存下来。是由于作用域的问题,于是我将三个数组的定义放在了判断之前,作为主函数对下面的全局变量。于是这个问题就解决了,最后的代码如下:
数组定义的位置
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
//快递单号数组
int[] trackingNumber = new int[10000];
//取件码数组
int[] number = new int[10000];
//公司名称数组
String[] names = new String[10000];
快递进行存取的相关代码:
case 1:{
System.out.println("请输入快递单号");
int numAdd = input.nextInt();
System.out.println("请输入公司名称");
String nameAdd = input.next();
boolean flag = true;
//定义一个生成的取件码
int numberAdd = (int)(Math.random()*10000);
//判断取件码是否重复,如果重复则重新生成取件码
while(flag) {
for(int i = 0;i<number.length;i++) {
if(numberAdd == number[i]) {
numberAdd = (int)(Math.random()*10000);
break;
}
if(i==number.length-1) {
if(numberAdd!=number[i]){
flag = false;
}
}
}
}
//快递单号数组
trackingNumber[numAdd] = numAdd;
//公司名称数组
names[numAdd] = nameAdd;
//取件码数组
number[numAdd] = numberAdd;
System.out.println("快递已存入,取件码是:"+number[numAdd]);
orderIn = false;
break;
补充:
在进行存取的时候我们需要考虑随机产生的取件码是否会重复,如果重复我们就需要重新自动生成一个取件码,直到没有重复过的取件码才算一一配置成功。