初学java,请老师您检查下,谢谢老师您辛苦

来源:14-17 测评作业

unbreakable_全栈

2024-12-04

package com.imooc.setHomework;

import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
import java.util.Scanner;
import java.util.Iterator;
import java.util.HashSet;
import java.util.Set;
import java.util.HashMap;
import java.util.Map;
import java.util.*;

// 定义一个电影类
//class Movie implements Comparable<Movie> {
class Movie {
    private String title;
    private int year;
    private double rating;

    public Movie(String title, int year, double rating) {
        this.title = title;
        this.year = year;
        this.rating = rating;
    }

    public void setTitle(String title) {
        this.title = title;
    }

    public void setYear(int year) {
        this.year = year;
    }

    public void setRating(double rating) {
        this.rating = rating;
    }

    public String getTitle() {
        return title;
    }

    public int getYear() {
        return year;
    }

    public double getRating() {
        return rating;
    }

    @Override
    public String toString() {
        return "电影名称: " + title +
                "\t上映年份: " + year +
                "\t豆瓣评分: " + rating;
    }

//    @Override
//    public int compareTo(Movie other) {
//        return this.year - other.year;
//    }
}

class Song {
    private String name;   // 歌曲名
    private String singer; // 歌手
    private String album;  // 专辑

    public Song(String name, String singer, String album) {
        this.name = name;
        this.singer = singer;
        this.album = album;
    }

    public Song() {
    }

    public void setName(String name) {
        this.name = name;
    }

    public void setSinger(String singer) {
        this.singer = singer;
    }

    public void setAlbum(String album) {
        this.album = album;
    }

    public String getName() {
        return name;
    }

    public String getSinger() {
        return singer;
    }

    public String getAlbum() {
        return album;
    }

    @Override
    public String toString() {
        return String.format("%s - %s (%s)", name, singer, album);
    }
}

public class setHomework {
    public static void main(String[] args) {
        // 1、将以下电影存储到 list 集合中,并统计电影数量
        MovieList();
        System.out.println("第一题结束");

        // 2、使用 list 集合整理音乐播放列表
        MusicPlaylistManager();
        System.out.println("第二题结束");

        // 3、将电影添加到集合中,并遍历集合
        MovieCollection();
        System.out.println("第三题结束");

        // 4、在“第3题”的基础上,修改集合元素
        MovieCollectionFour();
        System.out.println("第四题结束");

        // 5、在“第4题”的基础上,删除集合元素
        MovieCollectionFive();
        System.out.println("第五题结束");

        // 6、投票统计
        VotingStatistics();
        System.out.println("第六题结束");

        // 7、图书管理
        BookManager();
        System.out.println("第七题结束");

        // 8、管理手机库存
        MobileInventoryManager();
        System.out.println("第八题结束");

        // 9、查看班级平均成绩
        GradeAverageCalculator();
    }

    /**
     * 9、查看班级平均成绩
     */
    public static void GradeAverageCalculator () {
        // 存储每个班级的语文、数学和英语成绩
        Map<Integer, Map<String, List<Double>>> grades = new HashMap<>();

        // 添加五个班级的成绩数据
        addGrades(grades, 1, "语文", 96.5, 85.4, 88.2, 90.1, 92.3);
        addGrades(grades, 1, "数学", 98.8, 89.2, 91.0, 93.4, 95.6);
        addGrades(grades, 1, "英语", 95.2, 87.5, 89.3, 91.7, 93.1);

        addGrades(grades, 2, "语文", 96.7, 87.2, 89.5, 91.8, 93.4);
        addGrades(grades, 2, "数学", 97.5, 88.7, 90.4, 92.6, 94.8);
        addGrades(grades, 2, "英语", 96.5, 87.9, 89.7, 91.9, 93.6);

        addGrades(grades, 3, "语文", 95.3, 86.1, 88.6, 90.8, 92.4);
        addGrades(grades, 3, "数学", 97.9, 89.3, 91.1, 93.5, 95.7);
        addGrades(grades, 3, "英语", 94.8, 86.4, 88.9, 91.2, 93.6);

        addGrades(grades, 4, "语文", 94.6, 85.7, 87.9, 90.3, 92.5);
        addGrades(grades, 4, "数学", 96.4, 87.8, 90.0, 92.3, 94.5);
        addGrades(grades, 4, "英语", 93.7, 85.2, 87.6, 90.0, 92.3);

        addGrades(grades, 5, "语文", 93.8, 84.5, 86.7, 89.1, 91.4);
        addGrades(grades, 5, "数学", 95.1, 86.9, 89.2, 91.5, 93.8);
        addGrades(grades, 5, "英语", 92.6, 84.3, 86.5, 89.8, 91.9);

        // 计算并打印平均分
        printAverages(grades);
    }

    // 添加单个班级的成绩
    public static void addGrades(Map<Integer, Map<String, List<Double>>> grades, int gradeLevel, String subject, Double... scores) {
        grades.computeIfAbsent(gradeLevel, k -> new HashMap<>()).computeIfAbsent(subject, k -> new ArrayList<>()).addAll(Arrays.asList(scores));
    }

    // 计算并打印平均分
    public static void printAverages(Map<Integer, Map<String, List<Double>>> grades) {
        for (Integer gradeLevel : grades.keySet()) {
            Map<String, List<Double>> subjects = grades.get(gradeLevel);

            for (String subject : subjects.keySet()) {
                double averageScore = calculateAverage(subjects.get(subject));
                System.out.println("年级 " + gradeLevel + " 班 " + subject + " 平均分: " + averageScore);
            }
        }
    }

    // 计算某个科目的平均分
    public static double calculateAverage(List<Double> scores) {
        double sum = 0;
        for (double score : scores) {
            sum += score;
        }
        return sum / scores.size();
    }

    /**
     * 8、管理手机库存
     */
    public static void MobileInventoryManager () {
        // 初始化手机库存信息
        Map<String, Map<String, Integer>> inventory = new HashMap<>();

        // 华为手机库存
        Map<String, Integer> huaweiModels = new HashMap<>();
        huaweiModels.put("Pura70", 0);
        huaweiModels.put("Mate60", 0);
        huaweiModels.put("Mate60Pro", 0);
        inventory.put("华为", huaweiModels);

        // 小米手机库存
        Map<String, Integer> xiaomiModels = new HashMap<>();
        xiaomiModels.put("mi5s", 0);
        xiaomiModels.put("xiaomi13", 65);
        xiaomiModels.put("Redmi Note13", 27);
        inventory.put("小米", xiaomiModels);

        // 执行操作1:清空库存全为0的品牌
        inventory.entrySet().removeIf(entry -> entry.getValue().values().stream().allMatch(quantity -> quantity == 0));

        // 打印更新后的库存情况
        System.out.println("After removing brands with no stock:");
        for (Map.Entry<String, Map<String, Integer>> brandEntry : inventory.entrySet()) {
            if (!brandEntry.getValue().isEmpty()) {
                System.out.println(brandEntry.getKey() + ": " + brandEntry.getValue());
            }
        }

        // 执行操作2:删除品牌中已停产的手机型号
        for (Map.Entry<String, Map<String, Integer>> entry : inventory.entrySet()) {
            entry.getValue().keySet().removeIf("mi5s"::equals); // 假设"mi5s"是唯一停产型号
        }

        // 再次打印更新后的库存情况
        System.out.println("\nAfter removing discontinued model 'mi5s':");
        for (Map.Entry<String, Map<String, Integer>> brandEntry : inventory.entrySet()) {
            if (!brandEntry.getValue().isEmpty()) {
                System.out.println(brandEntry.getKey() + ": " + brandEntry.getValue());
            }
        }
    }

    /**
     * 7、图书管理
     * 运行代码时,它将创建三个List分别代表不同类别的书籍,然后将这些List作为值与相应的类别名称(如"古典文学"、“近代文学”、“科幻小说”)一起放入HashMap中。
     * 最后,它会遍历Map并打印出每个类别及其对应的书籍列表
     */
    public static void BookManager () {
        // 创建书籍列表
        List<String> classicalLiteratureBooks = new ArrayList<>();
        classicalLiteratureBooks.add("水浒传");
        classicalLiteratureBooks.add("三国演义");
        classicalLiteratureBooks.add("红楼梦");
        classicalLiteratureBooks.add("西游记");

        List<String> modernLiteratureBooks = new ArrayList<>();
        modernLiteratureBooks.add("繁星");
        modernLiteratureBooks.add("春水");
        modernLiteratureBooks.add("边城");
        modernLiteratureBooks.add("朝花夕拾");

        List<String> scienceFictionBooks = new ArrayList<>();
        scienceFictionBooks.add("沙丘");
        scienceFictionBooks.add("流浪地球");
        scienceFictionBooks.add("宇宙往事");
        scienceFictionBooks.add("三体");
        scienceFictionBooks.add("银河帝国");
        scienceFictionBooks.add("死神永生");

        // 创建Map集合
        Map<String, List<String>> bookCategories = new HashMap<>();
        bookCategories.put("古典文学", classicalLiteratureBooks);
        bookCategories.put("近代文学", modernLiteratureBooks);
        bookCategories.put("科幻小说", scienceFictionBooks);

        // 打印每种类别的书籍
        for (Map.Entry<String, List<String>> entry : bookCategories.entrySet()) {
            String category = entry.getKey();
            List<String> books = entry.getValue();
            System.out.print(category + ": [");
            for (int i = 0; i < books.size(); i++) {
                if (i > 0) {
                    System.out.print(", ");
                }
                System.out.print(books.get(i));
            }
            System.out.println("]");
        }
    }

    /**
     * 6、投票统计
     */
    public static void VotingStatistics () {
        // 使用HashSet来存储投票者的名字,避免重复投票
        Set<String> saturdayVotes = new HashSet<>();
        Set<String> sundayVotes = new HashSet<>();

        // 初始化投票结果
        saturdayVotes.add("小慕");
        saturdayVotes.add("Lily");
        saturdayVotes.add("Lucy");
        saturdayVotes.add("大毛");
        saturdayVotes.add("Tony");
        saturdayVotes.add("小刚");
        // 注意这里小慕和大毛重复投票,但由于HashSet的特性,这些重复的投票会被忽略

        sundayVotes.add("Tom");
        sundayVotes.add("彭彭");
        sundayVotes.add("Kate");
        // 注意这里彭彭重复投票,但同样会被忽略

        // 二毛取消参加,从投票中移除
        sundayVotes.remove("二毛");

        // Lily 和 Lucy 改投周日的票
        saturdayVotes.remove("Lily");
        saturdayVotes.remove("Lucy");
        sundayVotes.add("Lily");
        sundayVotes.add("Lucy");

        // 输出投票结果
        System.out.println("周六去的人数:" + saturdayVotes.size());
        System.out.println("周日去的人数:" + sundayVotes.size());

        // 如果需要查看具体投票的人,可以遍历HashSet
        System.out.println("周六投票的人有:");
        for (String voter : saturdayVotes) {
            System.out.println(voter);
        }

        System.out.println("周日投票的人有:");
        for (String voter : sundayVotes) {
            System.out.println(voter);
        }
    }

    /**
     * 5、在“第4题”的基础上,删除集合元素
     * 删除集合元素 经过前面的修改,movieList 集合中现在有 7 个元素,将评分低于 9.5 分的电影从集合中删除。
     */
    public static void MovieCollectionFive () {
        // 创建一个电影信息的列表
        List<Movie> movies = new ArrayList<>();

        // 添加电影到列表中
        movies.add(new Movie("肖申克的救赎", 1994, 9.7));
        movies.add(new Movie("阿甘正传", 1994, 9.5));
        movies.add(new Movie("千与千寻", 2001, 9.4));
        movies.add(new Movie("星际穿越", 2014, 9.4));
        movies.add(new Movie("楚门的世界", 1998, 9.5));
        movies.add(new Movie("放牛班的春天", 2004, 9.3));
        movies.add(new Movie("当幸福来敲门", 2006, 9.2));

        // 删除集合的最后一个元素
        if (!movies.isEmpty()) {
            movies.remove(movies.size() - 1);
        }

        // 将电影《楚门的世界》的评分改成 9.5 分
        for (Movie movie : movies) {
            if ("楚门的世界".equals(movie.getTitle())) {
                movie.setRating(9.5);
                break;
            }
        }

        // 在第2个元素位置添加电影信息
        movies.add(1, new Movie("霸王别姬", 1993, 9.6));

        // 删除评分低于 9.5 分的电影
        Iterator<Movie> iterator = movies.iterator();
        while (iterator.hasNext()) {
            Movie movie = iterator.next();
            if (movie.getRating() < 9.5) {
                iterator.remove();
            }
        }

        // 遍历电影列表并打印每部电影的详细信息
        for (Movie movie : movies) {
            System.out.println(movie);
        }
    }

    /**
     * 4、在“第3题”的基础上,修改集合元素
     * 问题:在第2个元素位置,添加以下电影信息,是不是应该添加到 肖申克的救赎 的后边
     */
    public static void MovieCollectionFour () {
        // 创建一个电影信息的列表
        List<Movie> movies = new ArrayList<>();

        // 添加电影到列表中
        movies.add(new Movie("肖申克的救赎", 1994, 9.7));
        movies.add(new Movie("阿甘正传", 1994, 9.5));
        movies.add(new Movie("千与千寻", 2001, 9.4));
        movies.add(new Movie("星际穿越", 2014, 9.4));
        movies.add(new Movie("楚门的世界", 1998, 9.4));
        movies.add(new Movie("放牛班的春天", 2004, 9.3));
        movies.add(new Movie("当幸福来敲门", 2006, 9.2));

        // 删除集合的最后一个元素
        if (!movies.isEmpty()) {
            movies.remove(movies.size() - 1);
        }

        // 在第2个元素位置添加电影信息
        movies.add(1, new Movie("霸王别姬", 1993, 9.6));

        // 将电影《楚门的世界》的评分改成 9.5 分
        for (Movie movie : movies) {
            if ("楚门的世界".equals(movie.getTitle())) {
                movie.setRating(9.5);
                break;
            }
        }

        // 遍历电影列表并打印每部电影的详细信息
//        Collections.sort(movies); // Sort the list by year before printing
        for (Movie movie : movies) {
            System.out.println(movie);
        }
    }

    /**
     * 3、将电影添加到集合中,并遍历集合
     */
    public static void MovieCollection () {
        // 创建一个电影信息的列表
        List<Movie> movies = new ArrayList<>();

        // 添加电影到列表中
        movies.add(new Movie("肖申克的救赎", 1994, 9.7));
        movies.add(new Movie("阿甘正传", 1994, 9.5));
        movies.add(new Movie("千与千寻", 2001, 9.4));
        movies.add(new Movie("星际穿越", 2014, 9.4));
        movies.add(new Movie("楚门的世界", 1998, 9.4));
        movies.add(new Movie("放牛班的春天", 2004, 9.3));
        movies.add(new Movie("当幸福来敲门", 2006, 9.2));

        // 遍历电影列表并打印每部电影的详细信息
        for (Movie movie : movies) {
            System.out.println(movie);
        }
    }

    private static void displaySongs(List<Song> songs) {
        for (int i = 0; i < songs.size(); i++) {
            System.out.printf("%d. %s\n", i + 1, songs.get(i));
        }
    }

    /**
     * 2、使用 list 集合整理音乐播放列表
     */
    public static void MusicPlaylistManager () {
        List<Song> songs = new ArrayList<>();
        Scanner scanner = new Scanner(System.in);

        // 初始化歌曲列表
        songs.add(new Song("又见炊烟", "王菲", "菲常传奇"));
        songs.add(new Song("可能", "程响", "可能"));
        songs.add(new Song("大风吹", "王赫野", "大风吹"));
        songs.add(new Song("今天", "刘德华", "真永远"));
        songs.add(new Song("再回首", "姜育恒", "多年以后·再回首"));

        // 显示初始播放列表
        System.out.println("初始音乐播放列表:");
        displaySongs(songs);

        // 用户选择喜欢的歌曲
        System.out.println("\n请输入您喜欢的歌曲编号(1-" + songs.size() + "), 用逗号分隔:");
        String input = scanner.nextLine();

        // 解析用户输入
        String[] selectedIndices = input.split(",");
        List<Song> favoriteSongs = new ArrayList<>();

        for (String indexStr : selectedIndices) {
            try {
                int index = Integer.parseInt(indexStr.trim()) - 1;
                if (index >= 0 && index < songs.size()) {
                    favoriteSongs.add(songs.get(index));
                } else {
                    System.out.println("无效的歌曲编号: " + (index + 1));
                }
            } catch (NumberFormatException e) {
                System.out.println("无效的输入格式.");
            }
        }

        // 显示用户喜欢的歌曲
        System.out.println("\n您的喜欢歌曲列表:");
        displaySongs(favoriteSongs);

        // 计算并显示喜欢的歌曲数量
        System.out.println("\n您的喜欢歌曲列表中共有 " + favoriteSongs.size() + " 首歌曲.");
    }

    /**
     * 1、将以下电影存储到 list 集合中,并统计电影数量
     */
    public static void MovieList () {
        // 创建一个ArrayList来存储电影名称
        ArrayList<String> movies = new ArrayList<>();

        // 添加电影到列表中
        movies.add("肖申克的救赎");
        movies.add("阿甘正传");
        movies.add("千与千寻");
        movies.add("星际穿越");
        movies.add("楚门的世界");
        movies.add("放牛班的春天");
        movies.add("当幸福来敲门");

        // 统计电影数量
        int movieCount = movies.size();

        // 输出电影列表和电影数量
        System.out.println("电影列表:");
        for (String movie : movies) {
            System.out.println(movie);
        }
        System.out.println("电影总数:" + movieCount);
    }
}

写回答

1回答

彭彭老师

2024-12-06

第6题,“二毛”并没有添加到集合中,从投票中移除“二毛”,返回 false,成功移除元素时返回 true

https://img1.sycdn.imooc.com/szimg/6752b2f1094fac4e06100369.jpg

第9题,同学的实现与原题要求不一样,也是可以的,达到练习目的即可,也可以按照下面的思路来实现

【解题思路】

1、定义一年级类,包含语文平均成绩、数学平均成绩、英语平均成绩 3 个属性

2、测试类中,实例化 5 个班级对象

3、创建 map 集合

4、将班级对象添加到 map 集合中,班级名称作为 key

5、遍历 map 集合键值对

0
0

Java零基础入门与实战

Java零基础入门与实战 多场景|多案例|全栈项目

277 学习 · 220 问题

查看课程