当前位置: 首页 > 后端技术 > Java

商品货架管理问题

时间:2023-04-01 22:21:16 Java

商品货架管理问题今天我们来看一个Java数据结构的相关问题1.问题描述商品货架可以看成是一个栈。堆顶的产品生产日期最早,堆底的产品生产日期最晚。装货时,需要将货架倒转,保证生产日期较近的产品处于较低的位置。接下来先看代码,再说分享2.代码实现importjava.util.Arrays;importjava.util.Scanner;classSequentialStack{protecteddatatype[]stack;//declarearrayprivatefinalstaticintSTACK_SIZE=10;//定义数组的最大长度protectedinttop;//声明top指针publicSequentialStack(){stack=(datatype[])(newObject[STACK_SIZE]);//初始化数组top=-1;//定义栈顶指针指向-1位置}publicbooleanisEmpty(){//判断栈是否为空的方法if(top==-1)//如果栈顶指针指向to-1,thenreturntrue;//说明栈为空elsereturnfalse;//否则栈不为空}publicdatatypepop(){//用来表示栈的方法if(isEmpty())//如果栈为空,则抛出异常thrownewRuntimeException("Stackisempty");datatyperesult=stack[top];//定义一个变量,记录top指针指向元素top--;//出栈后,top向前移动一位returnresult;//返回出栈时读取的元素stack}publicvoidpush(datatypea){//用来表示堆叠的方法top++;//将top指针向后移动一位stack[top]=a;//给样本空间的第一个位置赋值if(top==STACK_SIZE)//如果位置超过空间样本的最大值,则抛出异常thrownewRuntimeException("栈满,溢出错误,插入失败\n");}publicStringgetSxz(){//用于获取序列栈的方法return(Arrays.toString(stack));//返回完整的序列栈}}classdatatype{//定义一个数据类型classprivateintid;//声明id私有字符串数据;//declaredatapublicdatatype(){//定义无参构造方法this.id=0;这个。数据=空;}publicdatatype(intid,Stringdata){//定义带参数的构造方法this.id=id;这个。数据=数据;}//定义Id和Data的getter和setterpublicintgetId(){returnid;}publicvoidsetId(intid){this.id=id;}publicStringgetData(){返回数据;}publicvoidsetData(Stringdata){this.data=data;}}publicclassHJGL{publicstaticvoidputitems(SequentialStacks,inta){//用来表示栈1中存储商品的方法Scannersc=newScanner(System.in);//定义从键盘输入的方法intf=0;//定义初始顺序while(fsheIf1=newSequentialStack();//定义第一个栈SequentialStacksheIf2=newSequentialStack();//定义第二个栈inta;//定义携带商品数量的变量aintb;//定义携带商品数量的变量bdatatypeitem=newdatatype();//声明一个数据类型对象Scannerscan=newScanner(System.in);System.out.println("===请输入现有商品上架数量===");a=scan.nextInt();//输入货架上现有物品的数量System.out.println("请输入货架上现有物品的数量和日期(*从最内端到最外端输入货架的)");putitems(sheIf1,一个);//将货架上的商品信息添加到序列栈1while(!sheIf1.isEmpty()){//只要序列栈1不为空sheIf2.push(sheIf1.pop());//放入将序列栈1的内容移动到序列栈2}System.out.println("请输入新上架商品的数量:");b=scan.nextInt();//输入要上架的物品数量从新到旧)");putitems(sheIf1,b);//将货架上新添加的商品信息添加到序列栈1while(!sheIf2.isEmpty()){//只要序列栈2不为空sheIf1.push(sheIf2.pop());//将序列栈2的内容移动到序列栈1}System.out.println("放入新物品后货架上的所有物品编号和日期(*从货架最外端到最内端)");System.out.println("产品编号生产日期");while(!sheIf1.isEmpty()){//只要序列栈1不为空item=sheIf1.pop();//用item继承序列栈1中的所有内容System.out.println(""+item.getId()+""+item.getData());}//在循环扫描中依次输出产品编号信息和产品生产日期信息。close();//关闭Scanner的操作}}3.设计思路是将货架最内端到最外端的序列stack1的所有商品信息依次入栈,然后弹出stack并进入顺序栈2,生产日期最晚的物品放在顺序栈2的最前面,生产日期最早的物品放在顺序栈2的末尾,新物品按顺序加入空的顺序栈1从新日期到旧日期的商品信息,然后弹出序列栈2的内容,添加到序列栈1中。添加时,原货架上的商品中生产日期旧的商品在前面添加,并且生产日期较新的产品位于添加的顶部。后端最后输出序列栈中商品的Id和data1,添加新商品后获取上架,从最外层商品到最内层商品排序4.运行截图5.之前必须做的体验开始画图很容易理解和梳理逻辑。需要分清楚新旧日期的对应关系和货架的前后位置。setdatatype应该作为范式引入序列栈的数组中,序列栈的push和pop方法操作中添加的变量和返回值应该设置为datatype类型。键盘输入只能是基本数据类型,int类型和datatype类型不能互相转换(设置方法的返回类型为object可以实现int类型和datatype类型之间的转换)代码输入,但在运行过程中仍然会出现错误:int和datatype不能相互转换)。键盘输入后,进行基本类型转换,将输入数据调用到datatype的参数化构造函数中,从而封装成datatype类型。如果循环输入信息出错,记得检查Scanner方法是否放在循环外,导致只输入一次信息就跳出循环。将顺序栈出栈后的内容转换为字符串类型(或其他类型,但与数据类型相同),并将内容赋值给setdata(),该方法也会影响getId()方法的输出内容,即不可取。以上就是本文的全部内容。如果对你有帮助,可以点个赞。这对我来说真的很重要。