Java语言程序设计期末实训考试范围练兵题-日期类和集合类的综合应用问题

题目:

问题描述:
       在实际项目开发中需要存储各种类型的对象数据,一般使用数组存储存在存储个数不确定问题,通常使用集合类型来存储。给你的问题是,在图书信息系统中一个出版社和图书信息,一个出版社发行多门图书,每图书属于一个出版社,在图书查询中往往需要进行某图书属于那个出版社,该出版社在发行某图书的当年发行了多少图书等相关查询,如果使用集合合理存储了出版社和图书对象,进行相关查询将变得容易。
      本问题使用标准输入出版社和图书信息,然后查出某图书的出版社,以及该出版社在该图书出版当年发行图书的种类数目。
输入:
      标准输入,输入的第一行为两个正整数N、M,N表示接下来的N行为出版社信息,每行由出版社编号、出版社名称、出版社地址,数据之间为一个逗号","分隔;出版社信息后M行为图书信息,图书可能有重复,图书信息的每行依次为图书ISBN、出版社编号、图书名称、出版日期、图书价格构成,数据之间为一个逗号","分格。图书数据之后的所有行为图书ISBN数据,需要你完成查找的图书,每个图书查找信息使用一行输出。
输出:
      标准输出,根据需要你查找图书ISBN使用一行输出该图书所在的出版社编号和该出版社该图书发行年发行的图书种类数目;如果该图书不存在,输出"No Book"。

输入样列:
6 22
81070,中国矿业大学出版社,徐州
75605,西安交通大学出版社,西安市兴庆南路10号
302,清华大学出版社,清华大学学研楼A座608室
313,上海交通大学出版社,上海市徐汇区番禺路951号
301,北京大学出版社,北京市海淀区成府路205号
5635,北京邮电大学出版社,北京市海淀区西土城路10号
9787302595021,302,土力学(第3版),2022年10月1日,75.00
9787302611509,302,人工智能安全,2022年10月1日,59.00
9787302597810,302,创业风险管理:开公司必知的128个实操陷阱,2022年7月1日,88.00
9787563547630,5635,Oracle数据库应用与实训教程,2021年7月9日,32.00
9787563542208,5635,单片机原理及接口技术实验教程,2021年7月10日,28.00
9787563537488,5635,动画分镜头设计,2022年7月18日,42.00
9787563542505,5635,Java面向对象程序设计(第4版)(含习题解答与实验),2022年7月19日,46.00
9787563542475,5635,C语言程序设计,2022年7月26日,34.00
9787563546497,5635,C语言程序设计实验指导,2022年7月27日,25.00
978-7-313-22794-2,75605,中国对日战犯审判档案集成(全102卷),2020年9月1日,61200.00
978-7-313-11811-0,75605,进化医学引论,2014年10月8日,48.00
978-7-313-10821-0,75605,平台企业管理:打造最具魅力的企业,2014年3月5日,38.00
7-313-02472-X/TB.053,75605,产品设计,2006年1月1日,25.00
7-313-036438,75605,电子技术实习教程,2004年3月21日,20.00
9787313033185,75605,网页开发技术ASP实践教程,2003年4月10日,34.50
9787313033239,75605,大学英语听力考前冲刺(六级 配音带),2003年3月20日,20.00
978-7-301-31257-5,301,1848年欧洲革命,2021年8月19日,49.00
978-7-301-32258-1,301,人工智能哲学十五讲,2021年7月1日,65.00
978-7-301-32044-0,301,一个村庄的奋斗 : 1965—2020中华民族伟大复兴的乡村基础,2021年5月31日,98.00
978-7-301-32040-2,301,批判性思维与写作,2021年4月12日,32.00
978-7-301-32044-0,301,一个村庄的奋斗 : 1965—2020中华民族伟大复兴的乡村基础,2021年5月31日,98.00
978-7-301-31257-5,301,1848年欧洲革命,2021年8月19日,49.00
9787313033185
978-7-301-31051-6
978-7-301-32258-1

输出样列:
75605 2
No Book
301 4


首先是我的错误代码,没有使用容器,写了好久,感觉没有毛病,但是输出就是不对,希望有大佬可以帮我看看,我哪里出问题了,非常感谢

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt(),m = sc.nextInt();
        String q = sc.nextLine();
        String[] chu = new String[n];
        String[] tu = new String[m];
        String[][] a = new String[n][3];
        String[][] b = new String[m][5];
        int[] year = new int[m];
        for (int i = 0;i < n;i ++){
             q = sc.nextLine();
            a[i] = q.split(",");
        }
        for (int i = 0;i < m;i ++){
            q = sc.nextLine();
            b[i] = q.split(",");
            year[i] = Integer.parseInt(b[i][3].substring(0,4));
            //System.out.println(year[i]);
        }
        while (sc.hasNext()){
             q = sc.nextLine();
             int flag = 0;
             String e = " ";
             int day = 0;
             //找到该图书的出版社编号
             for (int i = 0;i < m;i ++){;
                 if (b[i][0].equals(q)){
                    e = b[i][1];
                     day = year[i];
                     break;
                 }
             }
             int sum = 0;
             String[] r = new String[1024];
             int t = 0;
             //找该出版社该图书发行年发行的图书种类数目
             for (int i = 0;i < m;i ++){
                 //年份相同
                if (year[i] == day){
                    if (t == 0){
                        r[t ++] = b[i][2];
                        sum ++;
                    }
                    //判断有没有出现过这一种书
                    for (int j = 0;j < t;j ++){
                        if(b[i][2] == r[j])
                            break;
                        if (j == t - 1 && b[i][2] != r[j]){
                            r[t ++] = b[i][2];
                            sum ++;
                        }
                    }
                }
             }
             if (sum != 0){
                 System.out.println(e + ' ' + sum);
             }else System.out.println("No Book");
        }
    }
}

下面是正确代码,使用了Map容器


import java.util.HashMap;
import java.util.Map;
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        // 输入出版社信息个数
        int n = sc.nextInt();
        // 输入图书信息个数
        int m = sc.nextInt();
        sc.nextLine();
        // count 根据 出版社编号和出版年份 来记录 出现次数
        // bookInfo 根据 ISBN 来记录当 前书籍的 出版社编号和出版年份
        Map count=new HashMap();
        Map bookInfo=new HashMap();
        // 出版社的消息没有用,全部消去
        for (int i = 0; i < n; i ++) {
            String str = sc.nextLine();
        }
        // 输入图书信息
        for (int i = 0; i < m; i ++) {
            String[] s = sc.nextLine().split(",");
            // 题目有说信息可能重复录入,如果已经有该图书的信息,就要跳过,避免重复记录
            if (bookInfo.get(s[0]) != null) continue;
            // time 为时间
            String time = s[3].substring(0, 4);
            // 用 info 表示 出版社编号和出版年份
            String info = s[1] + time;
            // 以图书的 ISBN (唯一)为关键字,出版社编号和出版年份为值 存进 bookInfo
            bookInfo.put(s[0], info);
            // 根据 出版社编号和出版年份 来统计出现次数
            if (count.get(info) == null) {
                count.put(info, 1);
            } else {
                count.put(info, count.get(info) + 1);
            }
        }
        while (sc.hasNextLine()) {
            // 输入图书的 ISBN
            String str = sc.nextLine();
            // 根据图书的 ISBN 获取对应的 出版社编号和出版年份
            String info = bookInfo.get(str);
            // 如果 info == null 证明没有找到该书
            if(info == null) {
                System.out.println("No Book");
            }
            // 找到该书后就输出 出版社编号和同出版社编号且同年份的书籍个数
            else System.out.println(info.substring(0, info.length() - 4) + " " + count.get(info));
        }
    }
}

你可能感兴趣的:(java,开发语言)