1.需求
2.实际操作
1.创建一个实体类
首先第一件事,就是写好一个实体类,为后面封装所有数据做准备,我们只需要私有化成员变量,然后再ptg即可
2.创建处理业务类和测试类
写好了实体类就要开始处理业务了,所以我们要再创建一个专门处理业务的类,名为MovieService
写完了业务类后别着急,再创建一个测试类。我们肯定要在测试类里创建业务类对象,然后使用业务类方法start,用于开启电影信息系统
但由于我们业务类没有写start方法,测试类会报错,这时我们点击start,然后alt +回车即可快捷创建start方法
3.开始在start方法里写处理业务的代码
1.首先我们要写一个菜单提供给用户
在菜单里也知道需要键盘录入,要录根据用户输入的数来选择哪些功能
毫无疑问,需要使用switch来判断用户输入的数以此选择不同的功能
接着在测试类使用start方法,很明显,这样写只能循环一次,不能达到我们的预期,所以我们还需要使用无限循环,直到用户输入3时,才结束系统
使用快捷键 ctrl alt t 选择我们要包裹的代码,快速包裹 这里选择while
再给while一个标号,让case3的break结束循环
4.在测试类里封装数据
写完了菜单后,就该封装所有数据了
需要注意,在实体类里,ptg有带参数的构造方法,那我们创建对象的时候就用上这个构造方法,写出实参,从而快速赋值
赋值完后,我们发现movie1 2 3都是同一个类型,并且有多个数据,这不禁让我们想起数组,但数组可以储存对象吗?
答案是可以,数组储存数字,就是int类型,那数组储存对象,不就是该对象的类型嘛
5.将数据从一个类中传递到另一个类中
封装好所有数据后就该进行使用,处理业务了。但我们的数据放在了测试类,而我们又得在业务类调用数据写代码,那我们该怎么把一个类的数据传递给另外一个类?
很简单,我们肯定要在测试类里创建业务类的对象,那我们就直接把数组(存着所有数据)放进创建好的对象的实参中
想一想为什么可以这样操作?(这里报错是还未创建构造方法)
之前我们在说方法内存图的时候说过,方法的形参也是一种变量,该变量的值根据主方法里的参数所确定,你是什么,我就是什么
所以,我们先将数组丢入创建的对象的实参中,然后再alt 回车 在业务类中创建带参的构造方法,这时数组的所有数据就已经传入到业务类里了
6.开始处理展示系统中全部电影的名称和评分
当数据进入业务类后,就可以开始写具体功能了。
功能一要展示所有电影的名称和评分,所以肯定要遍历数组,但我们可以直接在构造方法里遍历数组吗?
答案是不能,因为我们要根据用户输入的数字来确定选择哪些功能,当用户输入1时,才是打印所有电影的名称和评分,所以我们要在case1里遍历数组
我们将case1的打印改成方法,alt 回车快速生成方法
在方法里遍历数组
竟然爆红了,为什么会爆红?原因就是因为movies这个数组现在是局部变量,只能存在于构造方法里,出了括号就用不了
解决的方法也很简单,我们直接创建一个成员变量,让局部变量movies给成员变量赋值,这样就可以在类里使用数组了
遍历完数组之后,先试着打印一下数组
打印出来的竟然是一堆地址,可见,数组存储对象时,并非直接把对象的数据存入,而是存入对象的地址,然后根据地址调用数据
地址对我们来说没用,那我们该如何打印出名称和评分呢?
使用get方法即可解决
当i=1,movie=movie1,movie调用get方法
get tittle里的return tittle找到movie1的名称即东八区的先生们
谁调用的get方法,return就把值返回给谁,所以movie.gettittle=“东八区的先生们”那么此时打印的就是这个名称
7.处理电影详细信息
写完功能一,接着写功能二,功能二要放在case2里写
要根据用户输入id的数字来确定该打印什么,所以要键盘录入
但没必要再重新召唤Scanner,我们上面就写了一个
但上面的Scannner也只能在start里使用,那我们就再一次把Scanner也给提到类里
获取到用户输入的id,遍历数组,获取三个电影的id,依旧是使用get方法获取,然后进行对比即可
找到了之后就输出所有信息
使用return结束循环,如果用户输入的id不是电影的id,还需要提醒,所以再写一个提醒语句
当走完整个循环后依旧没有if到,那么就会输出打印语句,否则直接return结束循环
到此,所有代码写完,案例结束