我所写的这个购物车代码已经有人发布过了
但我学的时候有些地方并不是很理解,我花了一段时间思考后,便来谈谈我对其的理解
首先,我们需要思考购物车是什么
购物车是用来装商品的,而商品有很多,其又有各自的属性,如:价格,数量,名称等。
那么我们就可以把购物车看成一个容器,来装这些商品,由于我目前所学的知识有限,便把他定义为数组,像这样
Goodsmodel[] goodscar=new Goodsmodel[100];
为什么这么定义后面再说
那我们开始写起来吧
我们拿了购物车,说明我们要买的东西不止一个(也有可能只有一个),那么就需要写一个商品类,来创造一个个对象,也就是现实生活中所对应的商品,如下
public class Goodsmodel {
double price;
int id;
String name;
int num;
}
这里我插一句,就是类与对象的区别,类相当于一个图纸,像房屋图纸,在图纸上有着所需创建房屋的基本属性,而对象,就是这些属性有了具体值后的体现,也就是建成的房屋,所以,我取名叫Goodsmodel,(汉式英语,可以理解吧,emm,驼峰模式忘记了,下次注意),这个类起名叫Goodsmodel后,这个Goodsmodel便成了一个引用型数据类型,我们便可以依据它定义一个包含其对应对象的数组,就是上文所提到的。
那么我们拿到商品后,就需要把商品加入到购物车中去,那我们是不是还要看看我们买了什么,有可能我们还要改变所买商品的数量,那么我们是不是还要看看我们要花多少钱啊,这些都是一个个方法,这样便于调用和理解,方法如下
public static void addGoods(Goodsmodel[] goodscar,Scanner sc){
}//加入商品
public static void queryGoods(Goodsmodel[] goodscar){
}//查看商品
public static void updateGoods(Goodsmodel[] goodscar,Scanner sc){
}//更改购买商品的数量
public static void moneyGoods(Goodsmodel[] goodscar){
}//所需支付的钱数
(可不看) 我再来解释下方法为什么这样定义吧,因为方法名称要有意义,并且我们所定义的方法都与购物车有关,所以形参列表中要写其的数据类型的数组,方便调用一个个对象的数据。而形参列表中的Scanner理解起来很简单,就不说了。
那么,我们要时刻加入商品的信息,查看或者更改,就是随时调用不同的方法,那么,是不是要定义一个死循环,并且可以用switch来分情况调用方法,而switch中的表达式,我们可以用可输入的指令来表示,那我们就要写一个键盘录入技术,并给购物者一个提醒,来输入这些指令,如下
public static void main(String[] args) {
Goodsmodel[] goodscar=new Goodsmodel[100];
while (true) {
System.out.println("您有以下指令");
System.out.println("加入商品到购物车:add");
System.out.println("查看商品的信息:query");
System.out.println("改变商品所购买的数量:update");
System.out.println("您购买商品的总价格:money");
Scanner sc=new Scanner(System.in);
String instruct=sc.next();
switch (instruct){
case "add":
addGoods(goodscar,sc);
break;
case "query":
queryGoods(goodscar);
break;
case "update":
updateGoods(goodscar,sc);
break;
case "money":
moneyGoods(goodscar);
break;
default:
System.out.println("指令错误");
}
}
}
接下来,我们就要把这几个方法的内容写一遍
首先,是addGoods <添加商品>
public static void addGoods(Goodsmodel[] goodscar,Scanner sc){
Goodsmodel g=new Goodsmodel();
System.out.println("请输入商品的编号");
g.id= sc.nextInt();
System.out.println("请输入商品的名字");
g.name=sc.next();
System.out.println("请输入商品的价格");
g.price=sc.nextDouble();
System.out.println("请输入商品的数量");
g.num=sc.nextInt();
for (int i = 0; i < goodscar.length; i++) {
if (goodscar[i]==null){
goodscar[i]=g;
break; //此处为保证只加入一个g于数组中处于null状态的元素处
}
}
System.out.println("商品已录入");
}
其次,是queryGoods <查看商品>
public static void queryGoods(Goodsmodel[] goodscar) {
System.out.println("编号\t\t\t名字\t\t\t价格\t\t数量");
for (int i = 0; i < goodscar.length; i++) {
if (goodscar[i]!=null){
System.out.println(goodscar[i].id+"\t\t\t"+goodscar[i].name+"\t\t"+goodscar[i].price+"\t"+goodscar[i].num);
}else {
break; //减少不必要的空间占用
}
}
}
接下来,是updateGoods <更改商品的数量>
public static void updateGoods(Goodsmodel[] goodscar,Scanner sc) {
Out:
while (true) {
System.out.println("请输入你想改变商品的编号");
int id = sc.nextInt();
for (int i = 0; i < goodscar.length; i++) {
if (goodscar[i] != null) {
if (goodscar[i].id == id) {
System.out.println("您想改变该商品的购买数量为:");
goodscar[i].num=sc.nextInt();
System.out.println("您已更改成功");
break Out; //跳出死循环,即跳到Out所在的位置
}else{
System.out.println("未检索到该商品");
break ;
}
}else {
System.out.println("未检索到该商品");
break ; //跳出for循环
}
}
}
}
由于这样写有些繁琐,我们可以再定义一个方法,来达到相同的效果,这样较为简洁方便,如下
public static void updateGoods(Goodsmodel[] goodscar,Scanner sc) {
while (true) {
System.out.println("请输入你想改变商品的编号");
int id= sc.nextInt();
if (updateid(goodscar,id)==null){
System.out.println("未检索到该商品");
}else {
System.out.println("请输入你想改变购买商品的数量");
updateid(goodscar,id).num=sc.nextInt();
System.out.println("您已更改成功");
break;
}
}
}
public static Goodsmodel updateid(Goodsmodel[] goodscar, int id){ //
for (int i = 0; i < goodscar.length; i++) {
if (goodscar[i]!=null){
if (goodscar[i].id==id){
return goodscar[i];
}
}else {
return null; //数组中都为默认值null,没有元素
}
}
return null; //整个数组找完后,没有一个标号与所输入的编号相同
}
最后,是moneyGoods <总钱数>
public static void moneyGoods(Goodsmodel[] goodscar) {
double money=0;
for (int i = 0; i < goodscar.length; i++) {
if (goodscar[i]!=null){
money+=goodscar[i].price*goodscar[i].num;
}else {
break;
}
}
System.out.println("您需要支付"+money+"元");
}
其实,这个购物车代码很好写,只是比较繁琐,综合性较强而已,但我们可以从中知道该如何结合实际去一步步思考,进而培养独立思考的意识。