集合——集合练习题,简单的电影操作

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

package gatherBox.exercises.movie;

import java.util.*;

public class Movie {
    private String name;//构建一个属性为电影名字,该属性的类型是 private String
    private String type;//构建一个属性为电影属性
    private Integer donny;//构建一个属性为电影人气

    public Movie() {//无参构造器
    }

    public Movie(String name, String type, Integer donny) {//设置一个有参构造器,提供类的初始化和实例化,以便调用。
                                                            // (因为private类型属性不能直接调用,通过构造器来实现调用)


        this.name = name;//将获取的 name 赋值给自己的 name (也就是private类型的 name )
        this.type = type;//将获取的 type 赋值给自己的 type (也就是private类型的 type )
        this.donny = donny;//将获取的 donny 赋值给自己的 donny (也就是private类型的 donny )
    }


    public String getName() {//name 阅读器,其他类通过getName获取当前类private String name的值
        return name;//返回 name
    }
    public void setName(String name) {//name 修改器,其他类通过setName修改当前类private String name的值(所以返回为void)
        this.name = name;//将外部获取的 name 赋值给自己的name
    }


    public String getType() {//type 阅读器
        return type;//返回 type
    }
    public void setType(String type) {//type 修改器
        this.type = type;//将外部获取的 type 赋值给自己的 type
    }


    public Integer getDonny() {//donny 阅读器
        return donny;//返回 donny
    }
    public void setDonny(Integer donny) {//donny 修改器
        this.donny = donny;//将外部获取的 donny 赋值给自己的 donny
    }

    @Override
    public String toString() {//让返回的哈希值变为返回String值
        return "电影名称:"+name+"\n电影类型:"+type+"\n电影人气"+donny;
    }
}

class MovieManager{
    public static void main(String[] args) {

        //定义一个容器来存放Movie对象内容
        List<Movie> moviesList = new ArrayList<>();

        //定义一个HashSet集合,用来封装电影类型
        Map<Integer,String> movieTypeMap = new HashMap<>();//容器存放电影类型

        int count = 1;//设置一个 int 类型参数
        for (;;){//构建一个死循环
            System.out.println("*************************************");
            System.out.println("\t\t1、添加电影");
            System.out.println("\t\t2、查看电影列表");
            System.out.println("\t\t3、分类管理");
            System.out.println("\t\t4、显示人气最高电影");
            System.out.println("\t\t5、退出");
            System.out.println("*************************************");
            System.out.print("请选择:");

            Scanner input = new Scanner(System.in);// System.in -参数,这里就是获取输入流的意思。
            int num = input.nextInt();//使用输入流对象调用 nextInt() 方法输入一个整数到 num 中,
                                      // 其意思是使用 Scanner 类中的 nextInt() 方法输入一个整数, 该方法只是接受一个整型的数据,
                                      // 如果输入的是非整数数据, 将会 抛出 InputMismatchException 异常。

            switch (num){// switch case 语句,该意思是当num为相应值的时候就执行下面 case 的相应语句
                case 1://当 num 为 1 时候执行下面语句
                    System.out.println("开始添加电影");

                    System.out.println("请输入添加的电影名称");
                    String name = input.next();//使用输入流对象调用next()方法输入一个对应的值给 name 中(这里因为没有 类型 制
                                               // 约所以输入的类型可以任意)【说明:上面nextInt()方法的类型为 int 类型】

                    System.out.println("请输入添加的电影类型");
                    String type = input.next();//使用输入流对象调用next()方法输入一个对应的值给 type 中

                    System.out.println("请输入添加的电影人气");
                    Integer donny = input.nextInt();//使用输入流对象调用next()方法输入一个对应的值给 donny 中

                    Movie movie = new Movie(name,type,donny);//将电影名称、电影类型、电影人气封装成一个 Movie 对象【注:Movie 是类目的是暂时存放电影信息。该封
                                                             // 装用 ArrayList 集合进行的封装保存】

                    moviesList.add(movie);//将封装好的电影名称、电影类型、电影人气放入 ArrayList 集合

                    //将电影对象存放到集合中去(HashSet)
                    boolean b = movieTypeMap.containsValue(type);//将电影属性存放在HashSet中
                    if (!b) {//判断电影属性是否存在,电影属性不存在才添加(否则会出现重复的电影类型所以需要判断),存在就不添加了
                        movieTypeMap.put(count, type);//当电影类型不存在添加到movieTypeMap类型里面,count 变量已经初始化为1了,当不存在将count存放在 key
                                                      //type 存放在 value
                        count++;//count 进行自加
                    }
                    break;//结束当前 case 语句(如果没有该语句它将继续执行 case 2 直到退出)

                case 2 ://case 2 是查看电影列表
                    moviesList.forEach(temp->{//电影列表是存在 ArrayList 集合中的所有只需要打印 ArrayList 集合就行所以该语句为打印语句
                        System.out.println(temp+"\n");
                    });
                    break;//结束当前case

                    case 3 ://电影属性分类
                        System.out.println("请选择分类");
                        //遍历存放电影类型的map集合
                        movieTypeMap.forEach((k,v)->{//电影属性是存放在 HashMap 的所以遍历一遍就行
                            System.out.println(k+"、"+v);
                        });

                        Integer movieTypeNum = input.nextInt();//键盘输入具体的电影类型
                        String movieType = movieTypeMap.get(movieTypeNum);//根据电影编号(key),找出具体的电影类型(value)

                        //找出相应类型的所有电影,从moviesList查找
                        for (Movie temp : moviesList){

                            //去除temp中的电影类型
                            String tempMovieType = temp.getType();

                            //比较
                            if (movieType.equals(tempMovieType)){
                                System.out.println(temp+"\n");
                            }
                        }
                        break;

                case 4://显示人气最高的电影
                    Movie leiTai=moviesList.get(0);//定义一个比较平台(构建一个比较语句)

                    //开始比较
                    for (int n = 1;n<moviesList.size();n++) {
                        //取出第一个值
                        Integer i = leiTai.getDonny();
                        //取出第二个值
                        Movie m = moviesList.get(n);
                        Integer j = m.getDonny();
                        if (i<j) {
                            leiTai = m;
                        }
                    }
                    //打印最高分电影
                    System.out.println(leiTai);
                    break;
                case 5:
                    System.out.println("退出中");
                    System.exit(0);//因为这里是关闭语句,所以下面 break 有没有都可以,但是为了语句的严谨性尽量还是
                                          //将 break 写出来,以便带来不必要的麻烦
                    break;
                default://default 语句是在 switch 输入的字符没有对应的 case 时候执行的。这里当没有对应的 case 的时候代表
                        // 输入错误,所以只需要一个打印语句提示退出 default 语句就行。
                    System.out.println("输入错误,请重新输入!");
                    break;
            }
        }
    }
}

https://www.bilibili.com/video/av73064835?p=31

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值