暑假篇之每周两篇文2.0(下)

2023-12-19 02:40
文章标签 暑假 2.0 每周 两篇

本文主要是介绍暑假篇之每周两篇文2.0(下),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

今天是2022/6/12

前言:个人感觉面向对象这块内容有点小难,它主要难在它的代码量很多,用到的知识点也很多,比方说,方法的调用,定义动态数组,面向对象的基础知识,个人感觉是把我最近学的所有东西都杂糅了起来,跟着课程敲“购物车案例”经常会暂停下来,想想“这个点之前我学过,那个也学过,是什么来着?”因此自己在跟着课程敲完代码后,我会再把它敲一遍,重点是理顺一个整体逻辑

下面我将会把它拆成几个模块分别讲一下它的代码和个人对它的理解

需求:

模拟购物车模块的功能,需要实现添加商品到购物车中去查看购物的商品,同时需要提供修改商品的购买数量结算商品价格功能

分析:

购物车中的每个商品都是一个对象,需要定义一个商品类(Goods)

购物车本身也是一个对象,用数组对象代表它

完成界面架构,让用户选择操作的功能(用switch-case加上方法调用)

1.定义商品类

先定义一个商品类,定义完就不看它了~

package CreatObject;public class Goods {int id;String name;double price;int buyNumber;}

2.定义购物车对象,使用一个数组对象表示

Goods[] shopCar =new Goods[100];//{null,null,.....}

看不懂这个是什么的请翻看我的暑假第一篇文章,里面有对它讲解

3.搭建操作架构

首先先输出操作指令然后构造一个Scanner类的对象,并且与标准输入流System.in关联
Scanner sc=new Scanner(System.in);
紧接着调用Scanner类对象sc的方法从输入流中获取你需要的输入
String comman = sc.next()。

再然后定义command变量来接收你读到的口令,再利用switch-case判断读到的口令对应哪种情况

最后到属于它的那种情况里调用对应的方法

 System.out.println("请您选择如下命令进行操作:");System.out.println("添加商品购物车:add");System.out.println("查询购物车商品展示:query");System.out.println("修改商品购买数量:update");System.out.println("结算购买商品的金额:pay");Scanner sc=new Scanner(System.in);System.out.println("请您输入口令:");String command =sc.next();switch (command){case"add"://添加商品购物车addGoods(shopCar,sc);break;case"query"://查询购物车商品展示queryGoods(shopCar);break;case"update"://修改商品购买数量updateGoods(shopCar,sc);break;case"pay"://结算购买商品的金额payGoods(shopCar);break;default:System.out.println("没有该功能:");

 讲到这里,就要强调一下,如果程序执行完一种情况,程序就结束了,但是能结束吗?肯定不能,所以要把上面这大段程序放到一个while循环里,最下面完整的程序里有展示~

说到调用方法,你得有方法可调呀!

接下来分别来讲解这四种方法,分别是添加商品到购物车(addGoods) 查询购物车商品展示(queryGoods) 修改商品的购买数量(updateGoods) 结算购买商品的金额(payGoods)

-------------------------------------------------------------------------------------------------------------------------

方法一:添加商品到购物车(addGoods)

方法即看参数又要看类型。

因为程序直接进入到方法这里不返回什么值所以是void类型,其次对于因为要接收购物车和扫描,要设置两个参数(要带上他们的类型)即Goods [] shopCar 和Scanner sc

public static void addGoods(Goods[] shopCar,Scanner sc) {//录入用户输入的购买的商品信息System.out.println("请输入购买商品的编号:");int id=sc.nextInt();System.out.println("请输入购买商品的名称:");String name=sc.next();System.out.println("请输入购买商品的数量:");int buyNumber=sc.nextInt();System.out.println("请输入购买商品的价格:");double price=sc.nextDouble();

再然后要把购买物品的信息封装为一个商品的对象

用g表示对象名,那么Goods g=new Goods( );

//把这个购买商品的信息封装为一个商品对象Goods g=new Goods();//类名 对象名=new 类名();g.id=id;g.name=name;g.price=price;g.buyNumber=buyNumber;

把商品包装好后,把商品对象添加到购物车数组中

先遍历,找个没有元素放入的位置,把这个包装完成的对象放在这个位置上

for (int i = 0; i < shopCar.length; i++) {if(shopCar[i]==null){//说明此位置没有元素存入,把新买的商品添加到此处shopCar[i]=g;break;}}System.out.println("您的商品"+g.name+"添加到购物车完成!");

 

 第一部分的完整代码在这里,可以从全局上看看

public static void addGoods(Goods[] shopCar,Scanner sc) {//录入用户输入的购买的商品信息System.out.println("请输入购买商品的编号:");int id=sc.nextInt();System.out.println("请输入购买商品的名称:");String name=sc.next();System.out.println("请输入购买商品的数量:");int buyNumber=sc.nextInt();System.out.println("请输入购买商品的价格:");double price=sc.nextDouble();//把这个购买商品的信息封装为一个商品对象Goods g=new Goods();//类名 对象名=new 类名();g.id=id;g.name=name;g.price=price;g.buyNumber=buyNumber;//把这个商品对象添加到购物车数组中去for (int i = 0; i < shopCar.length; i++) {if(shopCar[i]==null){//说明此位置没有元素存入,把新买的商品添加到此处shopCar[i]=g;break;}}System.out.println("您的商品"+g.name+"添加到购物车完成!");}

 

-------------------------------------------------------------------------------------------------------------------------------- 

 方法二:查询购物车商品展示(queryGoods)

方法即看参数又要看类型。

因为程序直接进入到方法这里不返回什么值所以是void类型,其次对于因为要只接收购物车,所以设置一个参数(要带上他的类型)即Goods [ ] shopCar 

遍历一遍购物车数组,定义类型为Goods的变量g去接shopCar[i]的地址,然后判断g是否存在(g!=null)如果存在就输出它的信息,否则就break结束遍历,如果不存在它就不会输出商品的信息,只会有你之前输出的下面这个内容

=======查询购物车信息如下=========
编号        名称            价格            购买数量

private static void queryGoods(Goods[] shopCar) {System.out.println("=======查询购物车信息如下=========");System.out.println("编号\t\t名称\t\t\t价格\t\t\t购买数量");for (int i = 0; i < shopCar.length; i++) {Goods g=shopCar[i];//定义类型为Goods的变量g去接shopCar[i]的地址if(g!=null){//展示这个商品对象System.out.println(g.id+"\t\t"+g.name+"\t\t\t"+g.price+"\t\t\t"+g.buyNumber);}else {//遍历结束break;}}}

 

---------------------------------------------------------------------------------------------------------------------------------

 方法三:修改商品的购买数量(updateGoods)

方法即看参数又要看类型。

因为程序直接进入到方法这里不返回什么值所以是void类型,其次对于因为要接收购物车和扫描,所以设置两个参数(要带上他的类型)即Goods [ ] shopCar 和Scanner sc

因为有扫描的这个东西,结合要修改id,因此要定义一个int类型的id去接收你扫描的东西,即

int id=sc.nextInt( );

得到id后要判断这个id是不是存在 ,所以这里需要再写一个方法,我将方法名命名为getGoodsById。这个新开的方法跟方法二差不多,先遍历购物车数组,定义类型为Goods的变量g去接shopCar[i]的地址,然后判断g是否存在(g!=null)如果存在就把id(你输入的)赋给g.id即这个对象的id,并返回对象g,如果不存在就返回null(这里的null有两种情况请读者在代码中继续看我的解释)

回到方法三里,定义类型为Goods的变量g去接getGoodsById方法返回来的值,如果g==null那么久只能输出“没有这个商品”,但如果存在的话,就要修改你购买的商品数量,定义一个buyNumber来接收顾客输入的最新的数量,再把这buyNumber赋值给你创建的对象的buyNumber,最后再查询一下你最新的商品的信息,发现数量已经发生了变化

 小米八宝粥的数量从20变为40,成功修改!

附上代码:

 private static void updateGoods(Goods[] shopCar,Scanner sc) {//让用户输入要修改商品的id,根据id查询要修改的商品对象while (true) {System.out.println("请输入要修改的商品:");int id=sc.nextInt();Goods g=getGoodsById(shopCar,id);if(g==null){//没有该商品System.out.println("对不起,没有购买商品! ");}else{//说明存在该商品,可以修改它了System.out.println("请您输入:"+g.name+"商品最新购买数量:");int buyNumber= sc.nextInt();g.buyNumber=buyNumber;System.out.println("修改完成:");queryGoods(shopCar);break;}}}public static Goods getGoodsById(Goods[]shopCar,int id){for (int i = 0; i < shopCar.length; i++) {Goods g=shopCar[i];if(g!=null){//判断id是否是我们要找的if(g.id==id){return g;}}else {return null;//找完前面存在的商品都没有找到}}return null;//代表找完100个商品都没有找到id的商品}

 

---------------------------------------------------------------------------------------------------------------------------------

方法四:结算购买商品的金额(payGoods)

方法即看参数又要看类型。

因为程序直接进入到方法这里不返回什么值所以是void类型,其次对于因为要只接收购物车,所以设置一个参数(要带上他的类型)即Goods [ ] shopCar 

既然求和那么肯定要定义一个double类型的变量来表示总和,接着遍历购物车数组中的所有商品对象,定义类型为Goods的变量g去接shopCar[i]的地址,然后判断g是否存在(g!=null)如果存在的话,就累加,如果不存在就跳出循环,遍历完数组后,要输出商品总金额!

代码附上:

 private static void payGoods(Goods[] shopCar) {//1.定义一个求和变量累积金额double money=0;//2.便利购物车数组中全部商品对象,累积单交*数量for (int i = 0; i < shopCar.length; i++) {Goods g=shopCar[i];if(g!=null){money+=(g.price+g.buyNumber);}else{break;}}System.out.println("订单金额"+money);}

----------------------------------------------------------------------------------------------------------------------

附上完整代码! 


package CreatObject;import java.util.Scanner;public class ShopCarTest {public static void main(String[] args){//定义商品类,用于后期创建商品对象   商品可以看出对象//定义购物车对象,使用一个数组对象表示Goods[] shopCar =new Goods[100];//{null,null,.....}//搭建操作架构while (true) {//选择的这一大段代码得要用户不断的执行,所以把它放在循环里,ctrl+alt+t选while就可System.out.println("请您选择如下命令进行操作:");System.out.println("添加商品购物车:add");System.out.println("查询购物车商品展示:query");System.out.println("修改商品购买数量:update");System.out.println("结算购买商品的金额:pay");Scanner sc=new Scanner(System.in);System.out.println("请您输入口令:");String command =sc.next();switch (command){case"add"://添加商品购物车addGoods(shopCar,sc);break;case"query"://查询购物车商品展示queryGoods(shopCar);break;case"update"://修改商品购买数量updateGoods(shopCar,sc);break;case"pay"://结算购买商品的金额payGoods(shopCar);break;default:System.out.println("没有该功能:");}}}private static void payGoods(Goods[] shopCar) {//1.定义一个求和变量累积金额double money=0;//2.便利购物车数组中全部商品对象,累积单交*数量for (int i = 0; i < shopCar.length; i++) {Goods g=shopCar[i];if(g!=null){money+=(g.price+g.buyNumber);}else{break;}}System.out.println("订单金额"+money);}private static void updateGoods(Goods[] shopCar,Scanner sc) {//让用户输入要修改商品的id,根据id查询要修改的商品对象while (true) {System.out.println("请输入要修改的商品:");int id=sc.nextInt();Goods g=getGoodsById(shopCar,id);if(g==null){//没有该商品System.out.println("对不起,没有购买商品! ");}else{//说明存在该商品,可以修改它了System.out.println("请您输入:"+g.name+"商品最新购买数量:");int buyNumber= sc.nextInt();g.buyNumber=buyNumber;System.out.println("修改完成:");queryGoods(shopCar);break;}}}public static Goods getGoodsById(Goods[]shopCar,int id){for (int i = 0; i < shopCar.length; i++) {Goods g=shopCar[i];if(g!=null){//判断id是否是我们要找的if(g.id==id){return g;}}else {return null;//找完前面存在的商品都没有找到}}return null;//代表找完100个商品都没有找到id的商品}private static void queryGoods(Goods[] shopCar) {System.out.println("=======查询购物车信息如下=========");System.out.println("编号\t\t名称\t\t\t价格\t\t\t购买数量");for (int i = 0; i < shopCar.length; i++) {Goods g=shopCar[i];//定义类型为Goods的变量g去接shopCar[i]的地址if(g!=null){//展示这个商品对象System.out.println(g.id+"\t\t"+g.name+"\t\t\t"+g.price+"\t\t\t"+g.buyNumber);}else {//遍历结束break;}}}
/*
完成商品添加到购物车的功能*/public static void addGoods(Goods[] shopCar,Scanner sc) {//录入用户输入的购买的商品信息System.out.println("请输入购买商品的编号:");int id=sc.nextInt();System.out.println("请输入购买商品的名称:");String name=sc.next();System.out.println("请输入购买商品的数量:");int buyNumber=sc.nextInt();System.out.println("请输入购买商品的价格:");double price=sc.nextDouble();//把这个购买商品的信息封装为一个商品对象Goods g=new Goods();//类名 对象名=new 类名();g.id=id;g.name=name;g.price=price;g.buyNumber=buyNumber;//把这个商品对象添加到购物车数组中去for (int i = 0; i < shopCar.length; i++) {if(shopCar[i]==null){//说明此位置没有元素存入,把新买的商品添加到此处shopCar[i]=g;break;}}System.out.println("您的商品"+g.name+"添加到购物车完成!");}}
package CreatObject;public class Goods {int id;String name;double price;int buyNumber;}

 --------------------------------------------------------------------------------------------------------------

个人总结:以上就是购物车案例的所有讲解了,其实在编写这篇文章之前有很多小的点不太明白,但是经过我仔仔细细的分析和拆分后,我发现,这东西我好像懂了~

还是开头前言的那句话,它的难就在用的东西很多,需要站在全局的角度去看每一个方法的分支,如果有什么不太明白的,可以把程序写一写

如果你也喜欢这篇文章的话,给我一个赞吧!

 

这篇关于暑假篇之每周两篇文2.0(下)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/510646

相关文章

GitHub每周最火火火项目(9.2-9.8)

项目名称:polarsource / polar 项目介绍:polar 是一个开源项目,它是 Lemon Squeezy 的替代方案,并且具有更具优势的价格。该项目的目标是为开发者提供一种更好的选择,让他们能够在追求自己的热情和兴趣的同时,通过编码获得相应的报酬。通过使用 polar,开发者可以享受到更实惠的价格,同时也能够更自由地发挥自己的创造力和技能。 项目地址:https://github.

OpenGL ES 2.0渲染管线

http://codingnow.cn/opengles/1504.html Opengl es 2.0实现了可编程的图形管线,比起1.x的固定管线要复杂和灵活很多,由两部分规范组成:Opengl es 2.0 API规范和Opengl es着色语言规范。下图是Opengl es 2.0渲染管线,阴影部分是opengl es 2.0的可编程阶段。   1. 顶点着色器(Vert

QT项目实战之音乐播放器2.0版本

该版本相较于1.0版本最主要的不同在于连接数据库实现类似于歌曲收藏和取消收藏的功能。 详细情况看我的这篇文章http://t.csdnimg.cn/WS5s8。 效果展示 VSMyMusicShow2.0 define.h UseMySQL.h   musicInfo.h   VSMyMusicPlayer.h

2014年暑假培训 - 数论

A银河上的星星 /**************************************************************     Problem: 1014     User: DoubleQ     Language: C++     Result: Accepted     Time:190 ms     Memor

MemSQL Start[c]UP 2.0 - Round 1A(构造)

题目链接:http://codeforces.com/problemset/problem/452/A 解题思路: 打个表暴力查找匹配。 完整代码: #include <algorithm>#include <iostream>#include <cstring>#include <complex>#include <cstdio>#include <strin

2014暑假集训搜索专题

A - 漫步校园 Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u Submit Status Description LL最近沉迷于AC不能自拔,每天寝室、机房两点一线。由于长时间坐在电脑边,缺乏运动。他决定充分利用每次从寝室到机房的时间,在校园里散散步。整个HDU校园呈方形布局,可划

HDU 3037 今年暑假不AC

题目: http://acm.hdu.edu.cn/showproblem.php?pid=2037 题解: 对结束时间排序,然后进行一次遍历,寻找开始时间不小于上一个结束时间的节目。 代码: #include<stdio.h>#include<iostream>using namespace std;struct program{int start,end;}p[101

深度学习每周学习总结N9:transformer复现

🍨 本文为🔗365天深度学习训练营 中的学习记录博客🍖 原作者:K同学啊 | 接辅导、项目定制 目录 多头注意力机制前馈传播位置编码编码层解码层Transformer模型构建使用示例 本文为TR3学习打卡,为了保证记录顺序我这里写为N9 总结: 之前有学习过文本预处理的环节,对文本处理的主要方式有以下三种: 1:词袋模型(one-hot编码) 2:TF-I

【java 走进NLP】simhash 算法计算两篇文章相似度

python 计算两篇文章的相似度算法simhash见: https://blog.csdn.net/u013421629/article/details/85052915 对长文本 是比较合适的(超过500字以上) 下面贴上java 版本实现: pom.xml 加入依赖 <dependency><groupId>org.jsoup</groupId><artifactId>jsoup</a

【python 走进NLP】simhash 算法计算两篇文章相似度

互联网网页存在大量的重复内容网页,无论对于搜索引擎的网页去重和过滤、新闻小说等内容网站的内容反盗版和追踪,还是社交媒体等文本去重和聚类,都需要对网页或者文本进行去重和过滤。最简单的文本相似性计算方法可以利用空间向量模型,计算分词后的文本的特征向量的相似性,这种方法存在效率的严重弊端,无法针对海量的文本进行两两的相似性判断。模仿生物学指纹的特点,对每个文本构造一个指纹,来作为该文本的标识,从形式上来