oop第三次作业

一、前言

第八次作业

涉及知识点

1.类实现Comparable/Comparable<>接口
类中重写compareTo(Object o)方法
使用Collections.sort()进行排序
2.Collections.sort()和Arrays.sort()的区别
Arrays.sort()对对象数组进行排序
Collections.sort()对对象列表进行排序
3.利用Comparator进行排序
样例代码(按照字符顺序输出)

点击查看代码
Collections.sort(courseArrayList, new Comparator<Course>() {
            @Override
            public int compare(Course o1, Course o2) {
                Comparator<Object> comparator = Collator.getInstance(Locale.CHINA);
                return comparator.compare(o1.getCourseName(), o2.getCourseName());
            }
        });

第九次作业

涉及知识点

1.Map(键值对)
a.可以使用 get(key) 方法来获取 key 对应的 value
b.可以使用 remove(key) 方法来删除 key 对应的键值对(key-value)
c.计算 Map 中的元素数量可以使用 size() 方法
d.可以使用 for-each 来迭代 Map 中的元素。
样例代码

点击查看代码
// 创建 HashMap 对象 Sites
        HashMap<Integer, String> Sites = new HashMap<Integer, String>();
        // 添加键值对
        Sites.put(1, "Google");
        Sites.put(2, "Runoob");
        Sites.put(3, "Taobao");
        Sites.put(4, "Zhihu");
        // 输出 key 和 value
        for (Integer i : Sites.keySet()) {
            System.out.println("key: " + i + " value: " + Sites.get(i));
        }
        // 返回所有 value 值
        for(String value: Sites.values()) {
          // 输出每一个value
          System.out.print(value + ", ");
        }

2.HashMap和TreeMap的区别
HashMap的结果是没有排序的。TreeMap实现SortMap接口,能够把它保存的记录根据键排序,默认是按键值的升序排序,也可以指定排序的比较器,当用Iterator遍历TreeMap时,得到的记录是排过序的。HashMap里面存入的键值对在取出的时候是随机的,它根据键的HashCode值存储数据,根据键可以直接获取它的值,具有很快的访问速度。在Map中插入、删除和定位元素,HashMap是最好的选择。TreeMap取出来的是排序后的键值对。但如果您要按自然顺序或自定义顺序遍历键,那么TreeMap会更好。
3.List
add() - 将元素添加到列表
get() - 有助于从列表中随机访问元素
iterator() - 返回迭代器对象,该对象可用于顺序访问列表的元素
set() - 更改列表的元素
remove() - 从列表中删除一个元素
size() - 返回列表的长度
toArray() - 将列表转换为数组
contains() - 如果列表包含指定的元素,则返回true
4.List与Set的区别
List可以包含重复的元素,Set不能有重复的元素。
5.ArrayList和LinkedList的区别
ArrayList 是动态数组的数据结构实现,而 LinkedList 是双向链表的数据结构实现
需要频繁读取集合中的元素时,更推荐使用 ArrayList,而在插入和删除操作较多时,更推荐使用 LinkedList。

第十次作业

涉及知识点

1.倒序迭代
Iterator iterator = set.descendingIterator();
2.迭代器构造
对list迭代
Iterator iterator=list.iterator();iterator.hasNext();String temp=iterator.next();
对set迭代
Iterator iterator=set.iterator();iterator.hasNext();String temp=iterator.next();
对map迭代
Set<Map.Entry<Integer,String>> set=map.entrySet();
Iterator<Map.Entry<Integer,String>> iterator=set.iterator();iterator.hasNext();
Map.Entry<Integer,String> temp=iterator.next();

第十一次作业

涉及知识点

1.Stack
boolean empty() 测试堆栈是否为空
Object peek( )查看堆栈顶部的对象,但不从堆栈中移除它
Object pop( )移除堆栈顶部的对象,并作为此函数的值返回该对象
Object push(Object element)把项压入堆栈顶部
2.在构造函数中调用其他构造函数
public PersonOverride() {
this("default",1,true);
}
public PersonOverride(String name, int age, boolean gender) {
this.name = name;
this.age = age;
this.gender = gender;
}

题量和难度

题目量较少,题目较难

二、设计与分析

题目集7

7-1

题目分析

题目给出的信息包括三部分:菜谱,订单(桌号、点菜记录、代点菜记录、删除点菜记录),结束。
根据三部分的信息,截取每一条信息的长度,通过长度判断该信息属于哪一类。
输入:
菜谱包括:
1.菜名、单价
2.菜名、特色菜种类、单价、T
订单:桌号包括:桌号、时间
点菜记录包括:
1.序号、菜名、份额、份数
2.序号、菜名、辣/酸/甜度、份额、份数
代点菜记录包括:
1.被点菜的桌号、序号、菜名、份额、份数
2.被点菜的桌号、序号、菜名、辣/酸/甜度、份额、份数
删除点菜记录包括:delete和点菜序号
过程:
信息长度为2:
(1)菜谱(读入菜谱)
(2)删除点菜记录(删除记录有效,打标记,算总价时不计入;删除记录无效,输出delete error)
信息长度为3:
错误信息,输出wrong format
信息长度为4:
(1)若第一个信息点不是数字,则增加新菜谱
(2)若第一个信息点是数字,则为点菜记录(菜名存在,输出序号+菜名+单价;菜名不存在,输出菜名+does not exist)
信息长度为5:
(1)如果第二个信息点不是数字,则为点菜记录
菜名存在,若口味度值在对应范围内,计算总价和对应口味度值,输出序号+菜名+单价;若口味度值不在对应范围内,输出acidity/spicy/sweetness num out of range + 口味度值
菜名不存在,输出菜名+does not exist
(2)若第二个信息点是数字,则为代点菜记录
菜名存在,若被点菜桌存在,给被点菜桌增加菜品,给点菜桌增加价格,输出:table+点菜桌桌号+pay for table+被点菜桌桌号+价格;
菜名不存在,输出菜名+does not exist
信息长度为6:与信息长度为5的处理类似
信息长度为7:
(1)号码长度或号码前三位不对,输出wrong format
(2)号码长度正确,判断此顾客是否存在,不存在则添加桌号及顾客信息,若不在营业时间内,输出table+桌号+ out of opening hours;若在营业时间内,输出table+桌号+:
输出:
(1)按次序输出每桌菜对应的信息,table+桌号+原价+打折后价格+辣酸甜度值
(2)输出顾客的名字+电话号码+总价

源码分析

类图

源码

点击查看代码

import java.time.LocalDateTime;
import java.util.*;

public class Main {
    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        Menu menu = new Menu();
        Table[] tables = new Table[10];
        Client[] clients = new Client[10];
        int[] flag = new int[10];//判断是否在营业时间内
        int[] flag0 = new int[10];//判断顾客信息是否正确
        int[] flag1 = new int[10];//判断点菜记录中是否含有川菜
        int[] flag2 = new int[10];
        int[] flag3 = new int[10];
        int[] flag4 = new int[10];//判断菜单是否有误
        ArrayList<String> clientName = new ArrayList<>();
        ArrayList<Client> clientArrayList = new ArrayList<>();
        int count = 0;
        int dishAmount = 0;//菜品数
        int orderAmount = 0;//点菜记录的数目
        int clientAmount = 0;//客户数量
        Dish dish;
        int tableAmount = 0;//桌数
        int a1, a2, a3, a4, a5, a6, a7;
        String[] str2;
        while (true) {
            String string = input.nextLine();
            str2 = string.split(" ");
            if (string.equals("end"))
                break;
            count = str2.length;
            if (count == 2) {
                if (flag0[tableAmount] == 0) {
                    if (!str2[1].equals("delete")) {
                        a2 = Integer.parseInt(str2[1]);
                        menu.getDishes()[dishAmount] = menu.addDish(str2[0], a2);//添加新的菜到菜单里面
                        dishAmount++;
                    }
                    else {
                        a1 = Integer.parseInt(str2[0]);
                        if (tables[tableAmount].getOrder().delARecordByOrderNum(a1) == -1 && flag[tableAmount] != 1) {
                            System.out.println("delete error;");
                        } else {
                            String flavour = tables[tableAmount].getOrder().getRecords()[a1 - 1].getD().getFlavour();
                            if (tables[tableAmount].getOrder().getRecords()[a1 - 1].getD().getFlavour() == null) {
                                if (tables[tableAmount].getOrder().getRecords()[a1 - 1].getD() != null) {
                                    int price = tables[tableAmount].getOrder().getRecords()[a1 - 1].getPrice();//要删除序号的点菜记录的价格
                                    tables[tableAmount].setSum1(tables[tableAmount].getSum1() - price);//删除记录后那桌的未打折的总价格
                                }
                            } else {
                                if (tables[tableAmount].getOrder().getRecords()[a1 - 1].getD() != null) {
                                    int price = tables[tableAmount].getOrder().getRecords()[a1 - 1].getPrice();//要删除序号的点菜记录的价格
                                    // 删除记录后那桌的未打折的总价格
                                    tables[tableAmount].setInitialSum2(tables[tableAmount].getInitialSum2() - price);
                                    price = (int) (price * tables[tableAmount].getTDiscount() + 0.5);
                                    tables[tableAmount].setSum2(tables[tableAmount].getSum2() - price);
                                    if (flavour.equals("川菜")) {
                                        flag1[tableAmount] --;
                                        tables[tableAmount].setTotalSpicy(tables[tableAmount].getTotalSpicy() - tables[tableAmount].getOrder().getRecords()[a1 - 1].getTaste() * tables[tableAmount].getOrder().getRecords()[a1 - 1].getPortion());
                                        tables[tableAmount].setSpicyPortion(tables[tableAmount].getSpicyPortion() - tables[tableAmount].getOrder().getRecords()[a1 - 1].getPortion());
                                    } else if (flavour.equals("晋菜")) {
                                        flag2[tableAmount] --;
                                        tables[tableAmount].setTotalAcidity(tables[tableAmount].getTotalAcidity() - tables[tableAmount].getOrder().getRecords()[a1 - 1].getTaste() * tables[tableAmount].getOrder().getRecords()[a1 - 1].getPortion());
                                        tables[tableAmount].setAcidityPortion(tables[tableAmount].getAcidityPortion() - tables[tableAmount].getOrder().getRecords()[a1 - 1].getPortion());
                                    } else if (flavour.equals("浙菜")) {
                                        flag3[tableAmount] --;
                                        tables[tableAmount].setTotalSweetness(tables[tableAmount].getTotalSweetness() - tables[tableAmount].getOrder().getRecords()[a1 - 1].getTaste() * tables[tableAmount].getOrder().getRecords()[a1 - 1].getPortion());
                                        tables[tableAmount].setSweetnessPortion(tables[tableAmount].getSweetnessPortion() - tables[tableAmount].getOrder().getRecords()[a1 - 1].getPortion());

                                    }

                                }

                            }
                        }
                    }
                }
            }else if (count == 3) {
                    System.out.println("wrong format");
                } else if (count == 5) {
                    if (flag0[tableAmount] == 0) {
                        if (!str2[1].matches("[1-9][\\d]*")) {
                            a3 = Integer.parseInt(str2[0]);//序号
                            a4 = Integer.parseInt(str2[2]);//口味度值
                            a5 = Integer.parseInt(str2[3]);//份额
                            a6 = Integer.parseInt(str2[4]);//份数
                            tables[tableAmount].getOrder().addTARecord(a3, a4, str2[1], a5, a6);//使用函数给点菜记录赋予相关的序号、菜名、份额、份数,将该条记录添加到总记录中
                            dish = menu.searthTDish(str2[1]);//找点菜记录的菜名,存在菜名,返回dish,否则返回null
                            if (dish == null && flag[tableAmount] != 1) {
                                System.out.println(str2[1] + " does not exist");
                            } else {
                                String flavour = menu.searthDish(str2[1]).getFlavour();
                                if (flavour != null && flavour.equals("川菜") && a4 <= 5 && a4 >= 0) {
                                    tables[tableAmount].getOrder().getRecords()[orderAmount].setD(dish);//让记录的菜等于dish,以方便获得菜的价钱
                                    if (tables[tableAmount].getOrder().getRecords()[orderAmount].getD() != null && flag[tableAmount] != 1) {
                                        int price = tables[tableAmount].getOrder().getRecords()[orderAmount].getPrice();//计算记录的价格
                                        tables[tableAmount].setInitialSum2(tables[tableAmount].getInitialSum2() + price);
                                        System.out.println(tables[tableAmount].getOrder().getRecords()[orderAmount].getOrderNum() + " " + dish.getName() + " " + price);
                                        price = (int) (price * tables[tableAmount].getTDiscount() + 0.5);
                                        tables[tableAmount].setSum2(tables[tableAmount].getSum2() + price);//把该记录的价格加到该桌子的总价格中
                                    }
                                    flag1[tableAmount] ++;
                                    tables[tableAmount].setTotalSpicy(tables[tableAmount].getTotalSpicy() + a4 * a6);
                                    tables[tableAmount].setSpicyPortion(tables[tableAmount].getSpicyPortion() + a6);
                                } else if (flavour != null && flavour.equals("川菜")) {
                                    System.out.println("spicy num out of range :" + a4);
                                } else if (flavour != null && flavour.equals("晋菜") && a4 <= 4 && a4 >= 0) {
                                    tables[tableAmount].getOrder().getRecords()[orderAmount].setD(dish);//让记录的菜等于dish,以方便获得菜的价钱
                                    if (tables[tableAmount].getOrder().getRecords()[orderAmount].getD() != null && flag[tableAmount] != 1) {
                                        int price = tables[tableAmount].getOrder().getRecords()[orderAmount].getPrice();//计算记录的价格
                                        tables[tableAmount].setInitialSum2(tables[tableAmount].getInitialSum2() + price);
                                        System.out.println(tables[tableAmount].getOrder().getRecords()[orderAmount].getOrderNum() + " " + dish.getName() + " " + price);
                                        price = (int) (price * tables[tableAmount].getTDiscount() + 0.5);
                                        tables[tableAmount].setSum2(tables[tableAmount].getSum2() + price);//把该记录的价格加到该桌子的总价格中
                                    }
                                    flag2[tableAmount] ++;
                                    tables[tableAmount].setTotalAcidity(tables[tableAmount].getTotalAcidity() + a4 * a6);
                                    tables[tableAmount].setAcidityPortion(tables[tableAmount].getAcidityPortion() + a6);
                                } else if (flavour != null && flavour.equals("晋菜")) {
                                    System.out.println("acidity num out of range :" + a4);
                                } else if (flavour != null && flavour.equals("浙菜") && a4 <= 3 && a4 >= 0) {
                                    tables[tableAmount].getOrder().getRecords()[orderAmount].setD(dish);//让记录的菜等于dish,以方便获得菜的价钱
                                    if (tables[tableAmount].getOrder().getRecords()[orderAmount].getD() != null && flag[tableAmount] != 1) {
                                        int price = tables[tableAmount].getOrder().getRecords()[orderAmount].getPrice();//计算记录的价格
                                        tables[tableAmount].setInitialSum2(tables[tableAmount].getInitialSum2() + price);
                                        System.out.println(tables[tableAmount].getOrder().getRecords()[orderAmount].getOrderNum() + " " + dish.getName() + " " + price);
                                        price = (int) (price * tables[tableAmount].getTDiscount() + 0.5);
                                        tables[tableAmount].setSum2(tables[tableAmount].getSum2() + price);//把该记录的价格加到该桌子的总价格中
                                    }
                                    flag3[tableAmount] ++;
                                    tables[tableAmount].setTotalSweetness(tables[tableAmount].getTotalSweetness() + a4 * a6);
                                    tables[tableAmount].setSweetnessPortion(tables[tableAmount].getSweetnessPortion() + a6);
                                } else if (flavour != null && flavour.equals("浙菜")) {
                                    System.out.println("sweetness num out of range :" + a4);
                                }
                            }
                            orderAmount++;
                        } else {//代点菜
                            a1 = Integer.parseInt(str2[0]);//序号
                            a2 = Integer.parseInt(str2[3]);//份额
                            a3 = Integer.parseInt(str2[4]);//份数
                            tables[tableAmount].getOrder().addARecord(a1, str2[2], a2, a3);//使用函数给代点菜记录赋予相关的序号、菜名、份额、份数,将该条记录添加到总记录中
                            dish = menu.searthDish(str2[2]);//找点菜记录的菜名,存在菜名,返回dish,否则返回null
                            if (dish == null && flag[tableAmount] != 1) {
                                System.out.println(str2[2] + " does not exist");
                            } else {
                                tables[tableAmount].getOrder().getRecords()[orderAmount].setD(dish);//让记录的菜等于dish,以方便获得菜的价钱
                                if (tables[tableAmount].getOrder().getRecords()[orderAmount].getD() != null) {
                                    int price = tables[tableAmount].getOrder().getRecords()[orderAmount].getPrice();////计算记录的价格
                                    if (flag[tableAmount] != 1)
                                        System.out.println(str2[1] + " table " + tables[tableAmount].getTableNum() + " pay for table " + str2[0] + " " + price);
                                    tables[tableAmount].setInitialSum2(tables[tableAmount].getInitialSum2() + price);
                                    price = (int) (price * tables[tableAmount].getDiscount() + 0.5);
                                    tables[tableAmount].setSum1(tables[tableAmount].getSum1() + price);//把该记录的价格加到该桌子的总价格中
                                }
                            }
                        }
                    }
                } else if (count == 4) {
                    if (!str2[0].matches("[1-9]")) {
                        String flavour = str2[1];
                        a2 = Integer.parseInt(str2[2]);
                        menu.getDishes()[dishAmount] = menu.addTDish(str2[0], flavour, a2);//添加新的菜到菜单里面
                        dishAmount++;
                    } else {
                        a1 = Integer.parseInt(str2[0]);//序号
                        a2 = Integer.parseInt(str2[2]);//份额
                        a3 = Integer.parseInt(str2[3]);//份数
                        tables[tableAmount].getOrder().addARecord(a1, str2[2], a2, a3);//使用函数给代点菜记录赋予相关的序号、菜名、份额、份数,将该条记录添加到总记录中
                        dish = menu.searthDish(str2[1]);//找点菜记录的菜名,存在菜名,返回dish,否则返回null
                        if (dish == null && flag[tableAmount] != 1) {
                            System.out.println(str2[1] + " does not exist");
                        } else {
                            tables[tableAmount].getOrder().getRecords()[orderAmount].setD(dish);//让记录的菜等于dish,以方便获得菜的价钱
                            if (tables[tableAmount].getOrder().getRecords()[orderAmount].getD() != null && flag[tableAmount] != 1) {
                                int price = tables[tableAmount].getOrder().getRecords()[orderAmount].getPrice();////计算记录的价格
                                tables[tableAmount].setInitialSum1(tables[tableAmount].getInitialSum1() + price);
                                System.out.println(tables[tableAmount].getOrder().getRecords()[orderAmount].getOrderNum() + " " + dish.getName() + " " + price);
                                price = (int) (price * tables[tableAmount].getDiscount() + 0.5);
                                //System.out.println(str2[1] + " table " + tables[tableAmount].getTableNum() + " pay for table " + str2[0] + " " + price);
                                tables[tableAmount].setSum1(tables[tableAmount].getSum1() + price);//把该记录的价格加到该桌子的总价格中
                            }
                        }
                        orderAmount++;//点菜记录加一
                    }
                } else if (count == 6) {
                    if (flag0[tableAmount] == 0) {
                        if (str2[1].matches("[1-9][\\d]*")) {
                            a3 = Integer.parseInt(str2[1]);//序号
                            a4 = Integer.parseInt(str2[3]);//口味度值
                            a5 = Integer.parseInt(str2[4]);//份额
                            a6 = Integer.parseInt(str2[5]);//份数
                            a7 = Integer.parseInt(str2[0]);//桌号
                            tables[tableAmount].getOrder().addTARecord(a3, a4, str2[2], a5, a6);//使用函数给点菜记录赋予相关的序号、菜名、份额、份数,将该条记录添加到总记录中
                            dish = menu.searthTDish(str2[2]);//找点菜记录的菜名,存在菜名,返回dish,否则返回null
                            if (dish == null && flag[tableAmount] != 1) {
                                System.out.println(str2[1] + " does not exist");
                            } else {
                                String flavour = menu.searthDish(str2[2]).getFlavour();
                                if (flavour != null && flavour.equals("川菜") && a4 <= 5 && a4 >= 0) {
                                    tables[tableAmount].getOrder().getRecords()[orderAmount].setD(dish);//让记录的菜等于dish,以方便获得菜的价钱
                                    if (tables[tableAmount].getOrder().getRecords()[orderAmount].getD() != null && flag[tableAmount] != 1) {
                                        int price = tables[tableAmount].getOrder().getRecords()[orderAmount].getPrice();//计算记录的价格
                                        tables[tableAmount].setInitialSum2(tables[tableAmount].getInitialSum2() + price);
                                        System.out.println(a7 + " table " + tableAmount + " pay for table " + a7 + " " + price);
                                        price = (int) (price * tables[tableAmount].getTDiscount() + 0.5);
                                        tables[tableAmount].setSum2(tables[tableAmount].getSum2() + price);//把该记录的价格加到该桌子的总价格中
                                    }
                                    flag1[a7]  ++;
                                    tables[a7].setTotalSpicy(tables[a7].getTotalSpicy() + a4 * a6);
                                    tables[a7].setSpicyPortion(tables[a7].getSpicyPortion() + a6);
                                } else if (flavour != null && flavour.equals("川菜")) {
                                    System.out.println("spicy num out of range :" + a4);
                                } else if (flavour != null && flavour.equals("晋菜") && a4 <= 4 && a4 >= 0) {
                                    tables[tableAmount].getOrder().getRecords()[orderAmount].setD(dish);//让记录的菜等于dish,以方便获得菜的价钱
                                    if (tables[tableAmount].getOrder().getRecords()[orderAmount].getD() != null && flag[tableAmount] != 1) {
                                        int price = tables[tableAmount].getOrder().getRecords()[orderAmount].getPrice();//计算记录的价格
                                        tables[tableAmount].setInitialSum2(tables[tableAmount].getInitialSum2() + price);
                                        System.out.println(a7 + " table " + tableAmount + " pay for table " + a7 + " " + price);
                                        price = (int) (price * tables[tableAmount].getTDiscount() + 0.5);
                                        tables[tableAmount].setSum2(tables[tableAmount].getSum2() + price);//把该记录的价格加到该桌子的总价格中
                                    }
                                    flag2[a7] ++;
                                    tables[a7].setTotalAcidity(tables[a7].getTotalAcidity() + a4 * a6);
                                    tables[a7].setAcidityPortion(tables[a7].getAcidityPortion() + a6);
                                } else if (flavour != null && flavour.equals("晋菜")) {
                                    System.out.println("acidity num out of range :" + a4);
                                } else if (flavour != null && flavour.equals("浙菜") && a4 <= 3 && a4 >= 0) {
                                    tables[tableAmount].getOrder().getRecords()[orderAmount].setD(dish);//让记录的菜等于dish,以方便获得菜的价钱
                                    if (tables[tableAmount].getOrder().getRecords()[orderAmount].getD() != null && flag[tableAmount] != 1) {
                                        int price = tables[tableAmount].getOrder().getRecords()[orderAmount].getPrice();//计算记录的价格
                                        tables[tableAmount].setInitialSum2(tables[tableAmount].getInitialSum2() + price);
                                        System.out.println(a7 + " table " + tableAmount + " pay for table " + a7 + " " + price);
                                        price = (int) (price * tables[tableAmount].getTDiscount() + 0.5);
                                        tables[tableAmount].setSum2(tables[tableAmount].getSum2() + price);//把该记录的价格加到该桌子的总价格中
                                    }
                                    flag3[a7] ++;
                                    tables[a7].setTotalSweetness(tables[a7].getTotalSweetness() + a4 * a6);
                                    tables[a7].setSweetnessPortion(tables[a7].getSweetnessPortion() + a6);
                                } else if (flavour != null && flavour.equals("浙菜")) {
                                    System.out.println("sweetness num out of range :" + a4);
                                }
                            }
                            orderAmount++;
                        }
                    }
                } else if (count == 7) {
                    tableAmount++;
                    clientAmount++;
                    if (str2[3].length() > 11)
                        flag0[tableAmount] = 1;
                    if (str2[4].length() == 11) {
                        String str = str2[4].substring(0, 3);
                        if (!str.matches("1(8|3)(0|1|9|3|5|6)"))
                            flag0[tableAmount] = 1;
                    }
                    if (flag0[tableAmount] == 1) {
                        string = input.nextLine();
                        str2 = string.split(" ");
                        while (str2.length != 7) {
                            string = input.nextLine();
                            str2 = string.split(" ");
                        }
                        System.out.println("wrong format");
                    }
                    if (flag0[tableAmount] == 0) {
                        orderAmount = 0;//每个桌子的点菜记录数目不同,创建一个新的类时需要重置数目
                        if (!clientName.contains(str2[3])) {
                            clientName.add(str2[3]);
                        } else
                            clientAmount--;
                        clients[clientAmount] = new Client(str2[3], str2[4]);
                        tables[tableAmount] = new Table(str2[1], str2[3], str2[4], str2[5], str2[6]);
                        if (tables[tableAmount].getTDiscount() < 0 || tables[tableAmount].getDiscount() < 0) {
                            System.out.println("table " + tableAmount + " out of opening hours");
                            flag[tableAmount] = 1;
                        } else
                            System.out.println("table " + str2[1] + ": ");
                    }
                }

            }
        for (int i = 1; i < tableAmount + 1; i++) {
            if (flag[i] != 1 && flag0[i] == 0) {
                System.out.print("table " + tables[i].getTableNum() + ": " + (tables[i].getInitialSum1() + tables[i].getInitialSum2()) + " " + (tables[i].getSum1() + tables[i].getSum2()) + " ");
                if (flag1[i] > 0)
                    System.out.print("川菜 " + tables[i].getSpicyPortion() + " " + tables[i].getSpicy());
                if (flag2[i] > 0){
                    if(flag1[i] > 0)
                        System.out.print(" ");
                    System.out.print("晋菜 " + tables[i].getAcidityPortion() + " " + tables[i].getAcidity());
                }
                if (flag3[i] > 0){
                    if(flag1[i] > 0 || flag2[i] > 0)
                        System.out.print(" ");
                    System.out.print("浙菜 " + tables[i].getSweetnessPortion() + " " + tables[i].getSweetness());
                }
                System.out.print("\n");

            }
        }
            for (int i = 1; i < clientAmount + 1; i++) {
                for (int j = 1; j < tableAmount + 1; j++) {
                    if (tables[j] != null && clients[i] != null) {
                        if (tables[j].getName().equals(clients[i].getName()))
                            clients[i].setSum(clients[i].getSum() + tables[j].getSum2() + tables[j].getSum1());
                    }
                }
            }
            for (int i = 1; i < clientAmount + 1; i++)
                clientArrayList.add(clients[i]);
            Collections.sort(clientArrayList);
            for (int i = 0; i < clientAmount; i++) {
                if (clientArrayList.get(i) != null && flag[i + 1] != 1 && flag0[i] == 0)
                    System.out.println(clientArrayList.get(i).getName() + " " + clientArrayList.get(i).getTelephone() + " " + clientArrayList.get(i).getSum());
            }
        }
}
class Dish {//菜品类:对应菜谱上一道菜的信息。
    private String name;//菜品名称
    private int unit_price; //单价
    private String flavour;//口味
    public Dish(){

    }

    public String getFlavour() {
        return flavour;
    }

    public void setFlavour(String flavour) {
        this.flavour = flavour;
    }

    public String getName() {
        return name;
    }

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

    public int getUnit_price() {
        return unit_price;
    }

    public void setUnit_price(int unit_price) {
        this.unit_price = unit_price;
    }

    public int getPrice(int portion){//计算菜品价格的方法,输入参数是点菜的份额(输入数据只能是1/2/3,代表小/中/大份)
        if (portion == 1)
            return this.unit_price;
        else if (portion == 2)
            return (int)(this.unit_price * 1.5 + 0.5);
        return this.unit_price * 2;
    }
}
class Menu {//菜谱类:对应菜谱,包含饭店提供的所有菜的信息
    private Dish[] dishes = new Dish[10];//菜品数组,保存所有菜品信息
    int dishAmount = 0;
    public Menu() {
        dishes[0] = new Dish();
    }
    public Menu(Dish[] dishes) {
        this.dishes = dishes;
    }

    public Dish[] getDishes() {
        return dishes;
    }

    public void setDishes(Dish[] dishes) {
        this.dishes = dishes;
    }

    public Dish searthDish(String dishName) {//根据菜名在菜谱中查找菜品信息,返回Dish对象。
        int i;
        for(i = 0; i < dishes.length; i++)
            if (dishes[i] != null && dishName.equals(dishes[i].getName()))
                return dishes[i];
        return null;
    }
    public Dish searthTDish(String dishName) {
        int i;
        for(i = 0; i < dishes.length; i++)
            if (dishes[i] != null && dishName.equals(dishes[i].getName()))
                return dishes[i];
        return null;
    }
    public Dish addDish(String dishName, int unit_price) {//添加一道菜品信息
        Dish dish = new Dish();
        dish.setName(dishName);
        dish.setUnit_price(unit_price);
        dishAmount ++;
        return dish;
    }
    public Dish addTDish(String dishName, String flavour, int unit_price) {
        Dish dish = new Dish();
        dish.setName(dishName);
        dish.setFlavour(flavour);
        dish.setUnit_price(unit_price);
        dishAmount ++;
        return dish;
    }


}
class Record {//点菜记录类:保存订单上的一道菜品记录
    private int orderNum;//序号
    private Dish d = new Dish();//菜品
    private int portion;//份额(1/2/3代表小/中/大份)
    private int num;//份数
    private int taste;//口味度
    public Record(){

    }
    public Record(int orderNum, Dish d, int portion, int num) {
        this.orderNum = orderNum;
        this.d = d;
        this.portion = portion;
        this.num = num;
    }

    public int getOrderNum() {
        return orderNum;
    }

    public void setOrderNum(int orderNum) {
        this.orderNum = orderNum;
    }

    public Dish getD() {
        return d;
    }

    public void setD(Dish d) {
        this.d = d;
    }
    public int getPortion() {
        return portion;
    }
    public void setPortion(int portion) {
        this.portion = portion;
    }

    public int getNum() {
        return num;
    }

    public void setNum(int num) {
        this.num = num;
    }
    public int getPrice() {//计价,计算本条记录的价格
        return d.getPrice(portion) * num;
    }

    public int getTaste() {
        return taste;
    }

    public void setTaste(int taste) {
        this.taste = taste;
    }
}
class Order {//订单类:保存用户点的所有菜的信息。
    private Record[] records = new Record[5];//保存订单上每一道的记录
    int recordAmount = 0;
    public Order(){

    }

    public Order(Record[] records) {
        this.records = records;
    }

    public Record[] getRecords() {
        return records;
    }

    public void setRecords(Record[] records) {
        this.records = records;
    }

    public int getTotalPrice() {//计算非特色菜订单的总价
        int i;
        int sum = 0;
        for (i = 0; i < records.length; i++)
            if (records[i] != null)
                sum += records[i].getPrice();
        return sum;
    }
    public int getTTotalPrice() {
        int i;
        int sum = 0;
        for (i = 0; i < records.length; i++)
            if (records[i] != null)
                sum += records[i].getPrice();
        return sum;
    }

    public void addARecord(int orderNum, String dishName, int portion, int num) {//添加一条菜品信息到订单中。
        records[recordAmount] = new Record();
        records[recordAmount].setOrderNum(orderNum);
        records[recordAmount].getD().setName(dishName);
        records[recordAmount].setPortion(portion);
        records[recordAmount].setNum(num);
        recordAmount ++;
    }
    public void addTARecord(int orderNum, int taste, String dishName, int portion, int num) {//添加一条菜品信息到订单中。
        records[recordAmount] = new Record();
        records[recordAmount].setOrderNum(orderNum);
        records[recordAmount].setTaste(taste);
        records[recordAmount].getD().setName(dishName);
        records[recordAmount].setPortion(portion);
        records[recordAmount].setNum(num);
        recordAmount ++;
    }
    public int delARecordByOrderNum(int orderNum) {//根据序号删除一条记录
        for (int i = 1; i < recordAmount + 1; i++){
            if (orderNum == i){
                return orderNum;
            }
        }
        return -1;//找到records对应的编码,不输出
    }
    public boolean findRecordByNum(int orderNum) {//根据序号查找一条记录
        for (int i = recordAmount - 1; i >= 0; i--) {
            if (orderNum == records[i].getOrderNum()) {
                return true;
            }
        }
        return false;
    }
}
class Table{
    private Order order = new Order();
    private String name;
    private String telephone;
    private int tableNum;
    private String date;
    private String tableTime;
    private String spicy;//辣度
    private String acidity;
    private String sweetness;
    private int totalSpicy = 0;//总辣度值
    private int totalAcidity = 0;
    private int totalSweetness = 0;
    private int spicyPortion = 0;//总份数
    private int acidityPortion = 0;
    private int sweetnessPortion = 0;
    private int sum1 = 0;
    private int sum2 = 0;
    private int initialSum1 = 0;
    private int initialSum2 = 0;
    int hh;
    int mm;
    int ss;
    public Table() {

    }
    public Table(String tableNum, String name, String telephone, String date, String tableTime) {
        this.tableNum = Integer.parseInt(tableNum);
        this.name = name;
        this.telephone = telephone;
        this.date = date;
        this.tableTime = tableTime;
    }
    public void deal(){
        String[] str2 = tableTime.split("/");
        hh = Integer.parseInt(str2[0]);
        mm = Integer.parseInt(str2[1]);
        ss = Integer.parseInt(str2[2]);
    }
    public int getWeek(){
        deal();
        String[] str1 = date.split("/");
        int YY = Integer.parseInt(str1[0]);
        int MM = Integer.parseInt(str1[1]);
        int DD = Integer.parseInt(str1[2]);
        LocalDateTime Date = LocalDateTime.of(YY, MM, DD, hh, mm, ss);
        return Date.getDayOfWeek().getValue();//获得当前日期是第几周
    }
    public int getTableNum() {
        return tableNum;
    }

    public Order getOrder() {
        return order;
    }
    public void setSum1(int sum1) {
        this.sum1 = sum1;
    }
    public int getSum1(){
        return sum1;
    }
    public void setSum2(int sum2) {
        this.sum2 = sum2;
    }
    public int getSum2(){
        return sum2;
    }

    public int getInitialSum1() {
        return initialSum1;
    }

    public void setInitialSum1(int initialSum1) {
        this.initialSum1 = initialSum1;
    }

    public int getInitialSum2() {
        return initialSum2;
    }

    public void setInitialSum2(int initialSum2) {
        this.initialSum2 = initialSum2;
    }

    public int getTotalSpicy() {
        return totalSpicy;
    }

    public void setTotalSpicy(int totalSpicy) {
        this.totalSpicy = totalSpicy;
    }

    public int getTotalAcidity() {
        return totalAcidity;
    }

    public void setTotalAcidity(int totalAcidity) {
        this.totalAcidity = totalAcidity;
    }

    public int getTotalSweetness() {
        return totalSweetness;
    }

    public void setTotalSweetness(int totalSweetness) {
        this.totalSweetness = totalSweetness;
    }

    public int getSpicyPortion() {
        return spicyPortion;
    }

    public void setSpicyPortion(int spicyPortion) {
        this.spicyPortion = spicyPortion;
    }

    public int getAcidityPortion() {
        return acidityPortion;
    }

    public void setAcidityPortion(int acidityPortion) {
        this.acidityPortion = acidityPortion;
    }

    public int getSweetnessPortion() {
        return sweetnessPortion;
    }
    public void setSweetnessPortion(int sweetnessPortion) {
        this.sweetnessPortion = sweetnessPortion;
    }
    public void setSpicy() {
        if ((int)((getTotalSpicy() * 1.0) / getSpicyPortion() + 0.5) == 0)
            this.spicy = "不辣";
        else if ((int)((getTotalSpicy() * 1.0) / getSpicyPortion() + 0.5) == 1)
            this.spicy = "微辣";
        else if ((int)((getTotalSpicy() * 1.0) / getSpicyPortion() + 0.5) == 2)
            this.spicy = "稍辣";
        else if ((int)((getTotalSpicy() * 1.0) / getSpicyPortion() + 0.5) == 3)
            this.spicy = "辣";
        else if ((int)((getTotalSpicy() * 1.0) / getSpicyPortion() + 0.5) == 4)
            this.spicy = "很辣";
        else if ((int)((getTotalSpicy() * 1.0) / getSpicyPortion() + 0.5) == 5)
            this.spicy = "爆辣";
    }
    public String getSpicy() {
        setSpicy();
        return spicy;
    }


    public void setAcidity() {
        if ((int)((getTotalAcidity() * 1.0) / getAcidityPortion() + 0.5) == 0)
            this.acidity = "不酸";
        else if ((int)((getTotalAcidity() * 1.0) / getAcidityPortion() + 0.5) == 1)
            this.acidity = "微酸";
        else if ((int)((getTotalAcidity() * 1.0) / getAcidityPortion() + 0.5) == 2)
            this.acidity = "稍酸";
        else if ((int)((getTotalAcidity() * 1.0) / getAcidityPortion() + 0.5) == 3)
            this.acidity = "酸";
        else if ((int)((getTotalAcidity() * 1.0) / getAcidityPortion() + 0.5) == 4)
            this.acidity = "很酸";

    }
    public String getAcidity() {
        setAcidity();
        return acidity;
    }


    public void setSweetness() {
        if ((int)((getTotalSweetness() * 1.0) / getSweetnessPortion() + 0.5) == 0)
            this.sweetness = "不甜";
        else if ((int)((getTotalSweetness() * 1.0) / getSweetnessPortion() + 0.5) == 1)
            this.sweetness = "微甜";
        else if ((int)((getTotalSweetness() * 1.0) / getSweetnessPortion() + 0.5) == 2)
            this.sweetness = "稍甜";
        else if ((int)((getTotalSweetness() * 1.0) / getSweetnessPortion() + 0.5) == 3)
            this.sweetness = "甜";
    }
    public String getSweetness() {
        setSweetness();
        return sweetness;
    }

    public String getName() {
        return name;
    }

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

    public String getTelephone() {
        return telephone;
    }

    public void setTelephone(String telephone) {
        this.telephone = telephone;
    }

    public void setOrder(Order order) {
        this.order = order;
    }


    public double getDiscount(){
        int week = getWeek();
        if (week >= 1 && week <= 5){
            if((hh >= 17 && hh < 20) || (hh ==20 && (mm < 30 || (mm == 30 && ss == 0))))
                return 0.8;
            else if((hh ==10 && mm >= 30) || (hh > 10 && hh < 14) || (hh == 14 && (mm < 30 || (mm == 30 && ss == 0))))
                return 0.6;
        }
        else{
            if ((hh == 9 && mm >= 30) || (hh > 9 && hh < 21) || (hh == 21 && (mm < 30 || (mm == 30 && ss == 0))))
                return 1.0;
        }
        return -1;
    }
    public double getTDiscount(){
        if (getWeek() >=1 && getWeek() <= 5){
            if ((hh == 9 && mm >= 30) || (hh > 9 && hh < 21) || (hh == 21 && (mm < 30 || (mm == 30 && ss == 0))))
                return 0.7;
        }
        else
            return 1.0;
        return -1;
    }
}
class Client implements Comparable<Object> {
    private String name;
    private String telephone;
    private int sum;

    public Client() {

    }

    public Client(String name, String telephone) {
        this.name = name;
        this.telephone = telephone;
    }

    public Client(String name, String telephone, int sum) {
        this.name = name;
        this.telephone = telephone;
        this.sum = sum;
    }

    public String getName() {
        return name;
    }

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

    public String getTelephone() {
        return telephone;
    }

    public void setTelephone(String telephone) {
        this.telephone = telephone;
    }


    public int getSum() {
        return sum;
    }

    public void setSum(int sum) {
        this.sum = sum;
    }


    @Override
    public int compareTo(Object o) {
        return  this.getName().compareTo(((Client) o).getName());
    }
}

小结

按照题目要求一步步分析问题即可

题目集8、10

7-1、7-3

题目分析

处理信息
信息长度为3:
(1)若课程名称大于10,输出wrong format;
(2)若课程名称小于10,判断课程性质和考察方式是否匹配,不匹配,则输出:课程名称+:+course type & access mode mismatch;若匹配,增加课程信息和课程数量
信息长度为4:
分数、姓名、学号符合标准,创建班级,
判断课程名称是否存在,存在,若课程性质和考察方式匹配,则增加该门课程的分数和数量,增加班级成绩;若课程性质和考察方式不匹配,输出:学号+姓名+ access mode mismatch;若不存在,输出:课程名称+does not exist
分数、姓名、学号符合标准,输出wrong format
信息长度为5、6与信息长度为4的处理类似,主要在于算分数的权重和平均分上

源码分析

类图

源码

点击查看代码
import java.text.Collator;
import java.util.*;

public class Main {
    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        Course[] courses = new Course[10];
        Class[] classes = new Class[10];
        classes[0] = new Class();
        ArrayList<String> classList = new ArrayList<>();
        ArrayList<Class> classroomList = new ArrayList<>();
        ArrayList<Course> courseArrayList = new ArrayList<>();
        ArrayList<Student> studentArrayList = new ArrayList<>();
        ArrayList<String> studentNum = new ArrayList<>();
        int coursesNum = 0;
        String classroom = "0";
        String[] str1;
        int count = 0;//记录字段长度
        while (true) {
            String string = input.nextLine();
            str1 = string.split(" ");
            if (string.equals("end"))
                break;
            count = str1.length;
            if (count == 3) {

                if (str1[0].length() > 10)
                    System.out.println("wrong format");
                else {
                    courses[coursesNum] = new Course();
                    if ((str1[1].equals("必修") && str1[2].equals("考察")) || (!str1[1].equals("实验") && str1[2].equals("实验"))) {
                        System.out.println(str1[0] + " : course type & access mode mismatch");
                    } else {
                        if (searchCourse1(courses, str1[0]) == null) {
                            courses[coursesNum].setCourseName(str1[0]);
                            courses[coursesNum].setCurriculum(str1[1]);
                            courses[coursesNum].setAssessment(str1[2]);
                            courseArrayList.add(courses[coursesNum]);
                            coursesNum++;
                        }
                    }
                }

            }
            else if (count == 4) {
                int score = Integer.parseInt(str1[3]);
                if ((score >= 0 && score <= 100) && str1[0].length() == 8 && str1[1].length() <= 10 && str1[2].length() <= 10) {
                    classroom = str1[0].substring(0, 6);
                    newClass(classroom, classList, classes);
                    int a = searchCourse(courses, str1[2]);
                    int b = searchClassroom(classes, classroom);
                    int c = classes[b].getStudentNum();
                    newStudent(classroom, str1, classes, studentNum, studentArrayList, b, c);
                    if (searchCourse(courses, str1[2]) != -1) {
                        if (courses[a].getAssessment().equals("考察")) {
                            courses[a].getScore().setTotalScore(courses[a].getScore().getTotalScore() + score);
                            courses[a].setNum(courses[a].getNum() + 1);
                            if (searchNum(classes[b].getStudent(), str1[0]) != null) {
                                searchNum(classes[b].getStudent(), str1[0]).setTotalScore(searchNum(classes[b].getStudent(), str1[0]).getTotalScore() + score);
                                searchNum(classes[b].getStudent(), str1[0]).setCourseNum(searchNum(classes[b].getStudent(), str1[0]).getCourseNum() + 1);
                            }
                            classes[b].setAverage(classes[b].getAverage() + score);
                            classes[b].setNum(classes[b].getNum() + 1);
                        } else
                            System.out.println(str1[0] + " " + str1[1] + " : access mode mismatch");
                    } else {
                        System.out.println(str1[2] + " does not exist");
                    }
                }else
                    System.out.println("wrong format");

            }
            else if (count == 5) {
                int score1 = Integer.parseInt(str1[3]);
                int score2 = Integer.parseInt(str1[4]);
                if (score1 >= 0 && score1 <= 100 && score2 >= 0 && score2 <= 100  && str1[0].length() == 8 && str1[1].length() <= 10 && str1[2].length() <= 10) {
                    classroom = str1[0].substring(0, 6);
                    newClass(classroom, classList,classes);
                    int a = searchCourse(courses, str1[2]);
                    int b = searchClassroom(classes, classroom);
                    int c = classes[b].getStudentNum();
                    newStudent(classroom, str1, classes, studentNum, studentArrayList, b, c);
                    if (searchCourse(courses, str1[2]) != -1) {
                        if (courses[a].getAssessment().equals("考试")) {
                            courses[a].getScore().setDailyPerformance(courses[a].getScore().getDailyPerformance() + score1);
                            courses[a].getScore().setFinalGrade(courses[a].getScore().getFinalGrade() + score2);
                            courses[a].getScore().setTotalScore(courses[a].getScore().getTotalScore() + (int) (score1 * 0.3 + score2 * 0.7));
                            courses[a].setNum(courses[a].getNum() + 1);
                            if (searchNum(classes[b].getStudent(), str1[0]) != null) {
                                searchNum(classes[b].getStudent(), str1[0]).setTotalScore(searchNum(classes[b].getStudent(), str1[0]).getTotalScore() + (int) (score1 * 0.3 + score2 * 0.7));
                                searchNum(classes[b].getStudent(), str1[0]).setCourseNum(searchNum(classes[b].getStudent(), str1[0]).getCourseNum() + 1);
                            }
                            classes[b].setAverage(classes[b].getAverage() + (int) (score1 * 0.3 + score2 * 0.7));
                            classes[b].setNum(classes[b].getNum() + 1);
                        } else
                            System.out.println(str1[0] + " " + str1[1] + " : access mode mismatch");
                    } else
                        System.out.println(str1[2] + " does not exist");
                }
                else
                    System.out.println("wrong format");
            }
            else {
                int experiment = Integer.parseInt(str1[3]);
                if (experiment >= 4 && experiment <= 9) {
                    if (((experiment + 4) == str1.length)) {
                        int s1 = Integer.parseInt(str1[4]);
                        int s2 = Integer.parseInt(str1[5]);
                        int s3 = Integer.parseInt(str1[6]);
                        int s4 = Integer.parseInt(str1[7]);
                        if (s1 >= 0 && s1 <= 100 && s2 >= 0 && s2 <= 100 && s3 >= 0 && s3 <= 100 && s4 >= 0 && s4 <= 100  && str1[0].length() == 8 && str1[1].length() <= 10 && str1[2].length() <= 10) {
                            if (experiment == 4) {
                                classroom = str1[0].substring(0, 6);
                                newClass(classroom, classList, classes);
                                int a = searchCourse(courses, str1[2]);
                                int b = searchClassroom(classes, classroom);
                                int c = classes[b].getStudentNum();
                                newStudent(classroom, str1, classes, studentNum, studentArrayList, b, c);
                                int s = (s1 + s2 + s3 + s4) / 4;
                                judge(courses, str1, s, a, b, classes);
                            }
                            else if (experiment == 5) {
                                int s5 = Integer.parseInt(str1[8]);
                                if (s5 >= 0 && s5 <= 100) {
                                    classroom = str1[0].substring(0, 6);
                                    newClass(classroom, classList, classes);
                                    int a = searchCourse(courses, str1[2]);
                                    int b = searchClassroom(classes, classroom);
                                    int c = classes[b].getStudentNum();
                                    newStudent(classroom, str1, classes, studentNum, studentArrayList, b, c);
                                    int s = (s1 + s2 + s3 + s4 + s5) / 5;
                                    judge(courses, str1, s, a, b, classes);
                                } else
                                    System.out.println("wrong format");
                            } else if (experiment == 6) {
                                int s5 = Integer.parseInt(str1[8]);
                                int s6 = Integer.parseInt(str1[9]);
                                if (s5 >= 0 && s5 <= 100 && s6 >= 0 && s6 <= 100) {
                                    classroom = str1[0].substring(0, 6);
                                    newClass(classroom, classList, classes);
                                    int a = searchCourse(courses, str1[2]);
                                    int b = searchClassroom(classes, classroom);
                                    int c = classes[b].getStudentNum();
                                    newStudent(classroom, str1, classes, studentNum, studentArrayList, b, c);
                                    int s = (s1 + s2 + s3 + s4 + s5 + s6) / 6;
                                    judge(courses, str1, s, a, b, classes);

                                } else
                                    System.out.println("wrong format");
                            } else if (experiment == 7) {
                                int s5 = Integer.parseInt(str1[8]);
                                int s6 = Integer.parseInt(str1[9]);
                                int s7 = Integer.parseInt(str1[10]);
                                if (s5 >= 0 && s5 <= 100 && s6 >= 0 && s6 <= 100 && s7 >= 0 && s7 <= 100) {
                                    classroom = str1[0].substring(0, 6);
                                    newClass(classroom, classList, classes);
                                    int a = searchCourse(courses, str1[2]);
                                    int b = searchClassroom(classes, classroom);
                                    int c = classes[b].getStudentNum();
                                    newStudent(classroom, str1, classes, studentNum, studentArrayList, b, c);
                                    int s = (s1 + s2 + s3 + s4 + s5 + s6 + s7) / 7;
                                    judge(courses, str1, s, a, b, classes);
                                } else
                                    System.out.println("wrong format");
                            } else if (experiment == 8) {
                                int s5 = Integer.parseInt(str1[8]);
                                int s6 = Integer.parseInt(str1[9]);
                                int s7 = Integer.parseInt(str1[10]);
                                int s8 = Integer.parseInt(str1[11]);
                                if (s5 >= 0 && s5 <= 100 && s6 >= 0 && s6 <= 100 && s7 >= 0 && s7 <= 100 && s8 >= 0 && s8 <= 100) {
                                    classroom = str1[0].substring(0, 6);
                                    newClass(classroom, classList, classes);
                                    int a = searchCourse(courses, str1[2]);
                                    int b = searchClassroom(classes, classroom);
                                    int c = classes[b].getStudentNum();
                                    newStudent(classroom, str1, classes, studentNum, studentArrayList, b, c);
                                    int s = (s1 + s2 + s3 + s4 + s5 + s6 + s7 + s8) / 8;
                                    judge(courses, str1, s, a, b, classes);
                                } else
                                    System.out.println("wrong format");
                            } else if (experiment == 9) {
                                int s5 = Integer.parseInt(str1[8]);
                                int s6 = Integer.parseInt(str1[9]);
                                int s7 = Integer.parseInt(str1[10]);
                                int s8 = Integer.parseInt(str1[11]);
                                int s9 = Integer.parseInt(str1[12]);
                                if (s5 >= 0 && s5 <= 100 && s6 >= 0 && s6 <= 100 && s7 >= 0 && s7 <= 100 && s8 >= 0 && s8 <= 100 && s9 >= 0 && s9 <= 100) {
                                    classroom = str1[0].substring(0, 6);
                                    newClass(classroom, classList, classes);
                                    int a = searchCourse(courses, str1[2]);
                                    int b = searchClassroom(classes, classroom);
                                    int c = classes[b].getStudentNum();
                                    newStudent(classroom, str1, classes, studentNum, studentArrayList, b, c);
                                    int s = (s1 + s2 + s3 + s4 + s5 + s6 + s7 + s8 + s9) / 9;
                                    judge(courses, str1, s, a, b, classes);

                                } else
                                    System.out.println("wrong format");
                            }
                        }
                        else 
                            System.out.println("wrong format");
                    }
                    else {
                        if ((str1.length - 4) == 3) {
                            int s1 = Integer.parseInt(str1[4]);
                            int s2 = Integer.parseInt(str1[5]);
                            int s3 = Integer.parseInt(str1[6]);
                            if (s1 >= 0 && s1 <= 100 && s2 >= 0 && s2 <= 100 && s3 >= 0 && s3 <= 100 && str1[0].length() == 8 && str1[1].length() <= 10 && str1[2].length() <= 10) {
                                classroom = str1[0].substring(0, 6);
                                newClass(classroom, classList, classes);
                                int b = searchClassroom(classes, classroom);
                                int c = classes[b].getStudentNum();
                                newStudent(classroom, str1, classes, studentNum, studentArrayList, b, c);
                                System.out.println(str1[0] + " " + str1[1] + " : access mode mismatch");
                            } else
                                System.out.println("wrong format");
                        }
                        else if (str1.length - 4 == 4) {
                            int s1 = Integer.parseInt(str1[4]);
                            int s2 = Integer.parseInt(str1[5]);
                            int s3 = Integer.parseInt(str1[6]);
                            int s4 = Integer.parseInt(str1[7]);
                            if (s1 >= 0 && s1 <= 100 && s2 >= 0 && s2 <= 100 && s3 >= 0 && s3 <= 100 && s4 >= 0 && s4 <= 100 && str1[0].length() == 8 && str1[1].length() <= 10 && str1[2].length() <= 10) {
                                classroom = str1[0].substring(0, 6);
                                newClass(classroom, classList, classes);
                                int a = searchCourse(courses, str1[2]);
                                int b = searchClassroom(classes, classroom);
                                int c = classes[b].getStudentNum();
                                newStudent(classroom, str1, classes, studentNum, studentArrayList, b, c);
                                System.out.println(str1[0] + " " + str1[1] + " : access mode mismatch");
                            } else
                                System.out.println("wrong format");
                        }
                    }
                }else
                    System.out.println("wrong format");

            }
        }
        Collections.sort(courseArrayList, new Comparator<Course>() {
            @Override
            public int compare(Course o1, Course o2) {
                Comparator<Object> comparator = Collator.getInstance(Locale.CHINA);
                return comparator.compare(o1.getCourseName(), o2.getCourseName());
            }
        });
        for (int i = 0; i < classList.size(); i ++)
            classroomList.add(classes[i]);
        Collections.sort(classroomList);
        for (int i = 0; i < classList.size(); i ++) {
            for (int j = 0; j < classroomList.get(i).getStudentNum() ; j ++) {
                if (classroomList.get(i).getStudent()[j].getCourseNum() != 0)
                    classroomList.get(i).getStudent()[j].setAverage(classroomList.get(i).getStudent()[j].getTotalScore() / classroomList.get(i).getStudent()[j].getCourseNum());
            }
        }
        Collections.sort(studentArrayList);
        for (Student student : studentArrayList) {
            if (student.getTotalScore() != 0)
                System.out.println(student.getNum() + " " + student.getName() + " " + student.getAverage());
            else
                System.out.println(student.getNum() + " " + student.getName() + " did not take any exams");
        }
        for (int i = 0; i < coursesNum; i ++) {
            if (courseArrayList.get(i).getAssessment().equals("考试")) {
                if (courseArrayList.get(i).getNum() != 0)
                    System.out.println(courseArrayList.get(i).getCourseName() + " " + courseArrayList.get(i).getScore().getDailyPerformance() / courseArrayList.get(i).getNum() + " " + courseArrayList.get(i).getScore().getFinalGrade() / courseArrayList.get(i).getNum() + " " + courseArrayList.get(i).getScore().getTotalScore() / courseArrayList.get(i).getNum());
                else
                    System.out.println(courseArrayList.get(i).getCourseName() + " has no grades yet");
            } else if (courseArrayList.get(i).getAssessment().equals("考察")){
                if (courseArrayList.get(i).getNum() != 0)
                    System.out.println(courseArrayList.get(i).getCourseName() + " " + courseArrayList.get(i).getScore().getTotalScore() / courseArrayList.get(i).getNum() + " " + courseArrayList.get(i).getScore().getTotalScore() / courseArrayList.get(i).getNum());
                else
                    System.out.println(courseArrayList.get(i).getCourseName() + " has no grades yet");
            }
            else {
                if (courseArrayList.get(i).getNum() != 0)
                    System.out.println(courseArrayList.get(i).getCourseName() + " " + courseArrayList.get(i).getScore().getTotalScore() / courseArrayList.get(i).getNum());
                else
                    System.out.println(courseArrayList.get(i).getCourseName() + " has no grades yet");

            }
        }
        for (Class aClass : classroomList) {
            if (aClass.getAverage() != 0)
                System.out.println(aClass.getClassroom() + " " + aClass.getAverage() / aClass.getNum());
            else
                System.out.println(aClass.getClassroom() + " has no grades yet");
        }
    }
    public static int searchCourse(Course[] courses, String courseName) {
        for (int i = 0; i < courses.length; i ++) {
            if (courses[i] != null && courseName.equals(courses[i].getCourseName()))
                return i;
        }
        return -1;
    }
    public static Course searchCourse1(Course[] courses, String courseName) {
        for (int i = 0; i < courses.length; i ++) {
            if (courses[i] != null && courseName.equals(courses[i].getCourseName()))
                return courses[i];
        }
        return null;
    }
    public static int searchClassroom(Class[] classes, String classroom) {
        for (int i = 0; i < classes.length; i ++) {
            if (classes[i] != null && classroom.equals(classes[i].getClassroom()))
                return i;
        }
        return -1;
    }
    public static Student searchNum(Student[] students, String num) {
        for (Student student : students) {
            if (student != null && num.equals(student.getNum()))
                return student;
        }
        return null;
    }
    public static void judge (Course[] courses, String[] str1, int s, int a, int b, Class[] classes) {
        if (searchCourse(courses, str1[2]) != -1) {
            if (courses[a].getAssessment().equals("实验")) {
                courses[a].getScore().setTotalScore(courses[a].getScore().getTotalScore() + s);
                courses[a].setNum(courses[a].getNum() + 1);
                if (searchNum(classes[b].getStudent(), str1[0]) != null) {
                    searchNum(classes[b].getStudent(), str1[0]).setTotalScore(searchNum(classes[b].getStudent(), str1[0]).getTotalScore() + s);
                    searchNum(classes[b].getStudent(), str1[0]).setCourseNum(searchNum(classes[b].getStudent(), str1[0]).getCourseNum() + 1);
                }
                classes[b].setAverage(classes[b].getAverage() + s);
                classes[b].setNum(classes[b].getNum() + 1);
            } else
                System.out.println(str1[0] + " " + str1[1] + " : access mode mismatch");
        } else
            System.out.println(str1[2] + " does not exist");
    }
    public static void newStudent(String classroom, String[] str1, Class[] classes, ArrayList<String> studentNum, ArrayList<Student> studentArrayList, int b, int c) {

        if (searchClassroom(classes, classroom) != -1) {
            if (!studentNum.contains(str1[0])) {//查询是否为同一个学号的学生成绩
                classes[b].getStudent()[c] = new Student();
                studentNum.add(str1[0]);
                classes[b].getStudent()[c].setNum(str1[0]);
                classes[b].getStudent()[c].setName(str1[1]);
                studentArrayList.add(classes[b].getStudent()[c]);
                classes[b].setStudentNum(c + 1);
            }
        }
    }
    public static void newClass(String classroom,ArrayList<String> classList,Class[] classes) {
        if (!classList.contains(classroom)) {
            int c = classList.size();
            classes[classList.size()] = new Class();
            classList.add(classroom);
            classes[c].setClassroom(classroom);
        }
    }
}
class Score {
    private int dailyPerformance;
    private int finalGrade;
    private int totalScore;
    public Score() {}
    public int getTotalScore() {
        return totalScore;
    }
    public void setTotalScore(int totalScore) {
        this.totalScore = totalScore;
    }
    public int getDailyPerformance() {
        return dailyPerformance;
    }
    public void setDailyPerformance(int dailyPerformance) {
        this.dailyPerformance = dailyPerformance;
    }
    public int getFinalGrade() {
        return finalGrade;
    }
    public void setFinalGrade(int finalGrade) {
        this.finalGrade = finalGrade;
    }
}
class Course {
    private String courseName;
    private String curriculum;
    private String assessment;
    private Score score = new Score();
    private int num;
    public Course() {}
    public String getCourseName() {
        return courseName;
    }
    public void setCourseName(String courseName) {
        this.courseName = courseName;
    }
    public String getCurriculum() {
        return curriculum;
    }
    public void setCurriculum(String curriculum) {
        this.curriculum = curriculum;
    }
    public String getAssessment() {
        return assessment;
    }
    public void setAssessment(String assessment) {
        this.assessment = assessment;
    }
    public Score getScore() {
        return score;
    }
    public void setScore(Score score) {
        this.score = score;
    }
    public int getNum() {
        return num;
    }
    public void setNum(int num) {
        this.num = num;
    }
}
class Student implements Comparable<Student>{
    private String num;
    private String name;
    private Course course = new Course();
    private int totalScore = 0;
    private int courseNum = 0;
    private int average  = 0;
    public Student() {}
    public String getNum() {
        return num;
    }
    public void setNum(String num) {
        this.num = num;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public Course getCourse() {
        return course;
    }
    public void setCourse(Course course) {
        this.course = course;
    }
    public int getTotalScore() {
        return totalScore;
    }
    public void setTotalScore(int totalScore) {
        this.totalScore = totalScore;
    }
    public int getCourseNum() {
        return courseNum;
    }
    public void setCourseNum(int courseNum) {
        this.courseNum = courseNum;
    }
    public int getAverage() {
        return average;
    }
    public void setAverage(int average) {
        this.average = average;
    }
    @Override
    public int compareTo(Student o) {
        if (Integer.parseInt(this.num)> Integer.parseInt(o.num))
            return 1;
        else if (Integer.parseInt(this.num) < Integer.parseInt(o.num))
            return -1;
        return 0;
    }
}
class Class implements Comparable<Class>{
    private String classroom;
    private Student[] student = new Student[20];
    private int average;
    private int num = 0;//总课程长度
    private int studentNum = 0;//学生数量
    public Class() {}
    public String getClassroom() {
        return classroom;
    }
    public void setClassroom(String classroom) {
        this.classroom = classroom;
    }
    public Student[] getStudent() {
        return student;
    }
    public void setStudent(Student[] student) {
        this.student = student;
    }
    public int getAverage() {
        return average;
    }
    public void setAverage(int average) {
        this.average = average;
    }
    public int getNum() {
        return num;
    }
    public void setNum(int num) {
        this.num = num;
    }
    public int getStudentNum() {
        return studentNum;
    }
    public void setStudentNum(int studentNum) {
        this.studentNum = studentNum;
    }
    @Override
    public int compareTo(Class o) {
        if (Integer.parseInt(classroom) > Integer.parseInt(o.classroom)){
            return 1;
        }
        else if (Integer.parseInt(classroom) == Integer.parseInt(o.classroom)){
            return 0;
        }
        else{
            return -1;
        }
    }
}

小结

因为题目有代码长度限制,所以很多时候可能是自己写得比较复杂,不要出现重复代码,可以将某个过程写成一个或几个方法实现功能

题目集9

7-1

题目分析

查找关键字,并记录关键字的个数,可以利用map,进行键值对方式存储,存储关键字,而且题目需要按照关键字升序排列,所以可以用TreeMap。读取字符串,把不需要的部分去掉,并且要注意删去或改变一些字符时,如new_Bag,删除_,而不是把_改成空格,最后再按空格分隔提取单词。

源码分析

源码

点击查看代码
import java.util.*;

public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        TreeMap<String, Integer> keyWords = new TreeMap<>();
        LinkedList<String> list = new LinkedList<>();
        int flag = 0;
        String[] key = { "abstract", "assert", "boolean", "break", "byte", "case", "catch", "char", "class", "const",
                "continue", "default", "do", "double", "else", "enum", "extends", "false", "final", "finally", "float",
                "for", "goto", "if", "implements", "import", "instanceof", "int", "interface", "long", "native", "new",
                "null", "package", "private", "protected", "public", "return", "short", "static", "strictfp", "super",
                "switch", "synchronized", "this", "throw", "throws", "transient", "true", "try", "void", "volatile",
                "while" };
        StringBuffer a = new StringBuffer();
        String s = in.nextLine();
        while( !s.equals("exit")) {
            a.append(s.replaceAll("//.*", " ").replaceAll("\".*\"", " "));//去掉"//"后和的内容以及双引号里的内容
            s = in.nextLine();
            flag ++;
        }
        String b = a.toString().replaceAll("/\\*\\s*.*\\s*\\*/", " ");//去掉"/* */"里的内容,放入字符串b中
        b = b.replaceAll("=", "a");
        b = b.replaceAll("_", "a");
        b = b.replaceAll("\\+", "a");
        b = b.replaceAll("-", "a");
        b = b.replaceAll("\\*", "a"); //出现了“*”,就把它换成“a”
        b = b.replaceAll("/", "a");
        b = b.replaceAll("=", "a");
        b = b.replaceAll(":", "a");
        b = b.replaceAll("!", "a");
        b = b.replaceAll("\\\\", "a");
        b = b.replaceAll(">", "a");
        b = b.replaceAll("\\[", " "); //比如出现了“[”,就把它换成空格
        b = b.replaceAll("]", " ");
        b = b.replaceAll("[^a-zA-Z]", " "); //除了小写a到z、大写A-Z字母,其他字符全换成空格
        String[] c = b.split(" ");
        for (int i = 0; i < c.length; i++) {  //两个循环,用于核对是否出现关键字
            for (int j = 0; j < key.length; j++) {
                if (c[i].equals(key[j])) {  //如果出现了key[]中的某个关键字
                    keyWords.put(key[j], 0);//把出现的关键字添加到hashMap里,第一个参数为key,第二个为value,即第一个为出现的(接下一行)
                    //关键字,第二个值为出现的次数,在这里先置为0,(这个部分好像也可以改进)
                    list.add(key[j]);
                }
            }
        }
        Iterator iterator = keyWords.keySet().iterator();
        for (int i = 0; i < keyWords.size(); i++) {
            if (iterator.hasNext()) {
                String s2 = (String) iterator.next();
                for (int j = 0; j < list.size(); j ++) {
                    if (list.get(j).equals(s2)) {
                        int sum = keyWords.get(s2) + 1;
                        keyWords.put(s2, sum);
                    }
                }
            }
        }
        if (flag == 0)
            System.out.println("Wrong Format");
        else {
            iterator = keyWords.keySet().iterator();
            for (int i = 0; i < keyWords.size(); i++) {
                String s1 = (String) iterator.next();
                System.out.println(keyWords.get(s1) + "\t" + s1);
            }
        }
    }
}

小结

主要就是在处理单词上面,利用正则表达式过滤掉无用信息

三、踩坑心得

第七次作业

7-1

错误点

错误代码

点击查看代码

import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Scanner;
public class Main {
    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        Menu menu = new Menu();
        Table[] tables = new Table[10];
        Client[] clients = new Client[10];
        int[] flag = new int[10];//判断是否在营业时间内
        int[] flag0 = new int[10];//判断顾客信息是否正确
        int[] flag1 = new int[10];//判断点菜记录中是否含有川菜
        int[] flag2 = new int[10];
        int[] flag3 = new int[10];
        int[] flag4 = new int[10];//判断菜单是否有误
        ArrayList<String> clientName = new ArrayList<>();
        int count = 0;
        int dishAmount = 0;//菜品数
        int orderAmount = 0;//点菜记录的数目
        int clientAmount = 0;//客户数量
        Dish dish;
        int tableAmount = 0;//桌数
        int a1, a2, a3, a4, a5, a6, a7;
        String[] str2;
        while (true) {
            String string = input.nextLine();
            str2 = string.split(" ");
            if (string.equals("end"))
                break;
            count = str2.length;
            if (count == 2) {
                if (flag0[tableAmount] == 0) {
                    if (!str2[1].equals("delete")) {
                        a2 = Integer.parseInt(str2[1]);
                        menu.getDishes()[dishAmount] = menu.addDish(str2[0], a2);//添加新的菜到菜单里面
                        dishAmount++;
                    } else {
                        a1 = Integer.parseInt(str2[0]);
                        if (tables[tableAmount].getOrder().delARecordByOrderNum(a1) == -1 && flag[tableAmount] != 1) {
                            System.out.println("delete error;");
                        } else {
                            if (tables[tableAmount].getOrder().getRecords()[orderAmount].getD() != null) {
                                int price = tables[tableAmount].getOrder().getRecords()[a1 - 1].getPrice();//要删除序号的点菜记录的价格
                                tables[tableAmount].setSum1(tables[tableAmount].getSum1() - price);//删除记录后那桌的未打折的总价格
                            }
                        }
                    }
                }
            } else if (count == 3) {
                System.out.println("wrong format");
            } else if (count == 5) {
                if (flag0[tableAmount] == 0) {
                    if (!str2[1].matches("[1-9][\\d]*")) {
                        a3 = Integer.parseInt(str2[0]);//序号
                        a4 = Integer.parseInt(str2[2]);//口味度值
                        a5 = Integer.parseInt(str2[3]);//份额
                        a6 = Integer.parseInt(str2[4]);//份数
                        tables[tableAmount].getOrder().addTARecord(a3, a4, str2[1], a5, a6);//使用函数给点菜记录赋予相关的序号、菜名、份额、份数,将该条记录添加到总记录中
                        dish = menu.searthTDish(str2[1]);//找点菜记录的菜名,存在菜名,返回dish,否则返回null
                        if (dish == null && flag[tableAmount] != 1) {
                            System.out.println(str2[1] + " does not exist");
                        } else {
                            String flavour = menu.searthDish(str2[1]).getFlavour();
                            if (flavour != null && flavour.equals("川菜") && a4 <= 5 && a4 >= 0) {
                                tables[tableAmount].getOrder().getRecords()[orderAmount].setD(dish);//让记录的菜等于dish,以方便获得菜的价钱
                                if (tables[tableAmount].getOrder().getRecords()[orderAmount].getD() != null && flag[tableAmount] != 1) {
                                    int price = tables[tableAmount].getOrder().getRecords()[orderAmount].getPrice();//计算记录的价格
                                    tables[tableAmount].setInitialSum2(tables[tableAmount].getInitialSum2() + price);
                                    System.out.println(tables[tableAmount].getOrder().getRecords()[orderAmount].getOrderNum() + " " + dish.getName() + " " + price);
                                    price = (int) (price * tables[tableAmount].getTDiscount() + 0.5);
                                    tables[tableAmount].setSum2(tables[tableAmount].getSum2() + price);//把该记录的价格加到该桌子的总价格中
                                }
                                flag1[tableAmount] = 1;
                                tables[tableAmount].setTotalSpicy(tables[tableAmount].getTotalSpicy() + a4);
                                tables[tableAmount].setSpicyPortion(tables[tableAmount].getSpicyPortion() + a6);
                                tables[tableAmount].setSpicyCount(tables[tableAmount].getSpicyCount() + 1);
                            } else if (flavour != null && flavour.equals("川菜")) {
                                System.out.println("spicy num out of range :" + a4);
                            } else if (flavour != null && flavour.equals("晋菜") && a4 <= 4 && a4 >= 0) {
                                tables[tableAmount].getOrder().getRecords()[orderAmount].setD(dish);//让记录的菜等于dish,以方便获得菜的价钱
                                if (tables[tableAmount].getOrder().getRecords()[orderAmount].getD() != null && flag[tableAmount] != 1) {
                                    int price = tables[tableAmount].getOrder().getRecords()[orderAmount].getPrice();//计算记录的价格
                                    tables[tableAmount].setInitialSum2(tables[tableAmount].getInitialSum2() + price);
                                    System.out.println(tables[tableAmount].getOrder().getRecords()[orderAmount].getOrderNum() + " " + dish.getName() + " " + price);
                                    price = (int) (price * tables[tableAmount].getTDiscount() + 0.5);
                                    tables[tableAmount].setSum2(tables[tableAmount].getSum2() + price);//把该记录的价格加到该桌子的总价格中
                                }
                                flag2[tableAmount] = 1;
                                tables[tableAmount].setTotalAcidity(tables[tableAmount].getTotalAcidity() + a4);
                                tables[tableAmount].setAcidityPortion(tables[tableAmount].getAcidityPortion() + a6);
                                tables[tableAmount].setAcidityCount(tables[tableAmount].getAcidityCount() + 1);
                            } else if (flavour != null && flavour.equals("晋菜")) {
                                System.out.println("acidity num out of range :" + a4);
                            } else if (flavour != null && flavour.equals("浙菜") && a4 <= 3 && a4 >= 0) {
                                tables[tableAmount].getOrder().getRecords()[orderAmount].setD(dish);//让记录的菜等于dish,以方便获得菜的价钱
                                if (tables[tableAmount].getOrder().getRecords()[orderAmount].getD() != null && flag[tableAmount] != 1) {
                                    int price = tables[tableAmount].getOrder().getRecords()[orderAmount].getPrice();//计算记录的价格
                                    tables[tableAmount].setInitialSum2(tables[tableAmount].getInitialSum2() + price);
                                    System.out.println(tables[tableAmount].getOrder().getRecords()[orderAmount].getOrderNum() + " " + dish.getName() + " " + price);
                                    price = (int) (price * tables[tableAmount].getTDiscount() + 0.5);
                                    tables[tableAmount].setSum2(tables[tableAmount].getSum2() + price);//把该记录的价格加到该桌子的总价格中
                                }
                                flag3[tableAmount] = 1;
                                tables[tableAmount].setTotalSweetness(tables[tableAmount].getTotalSweetness() + a4);
                                tables[tableAmount].setSweetnessPortion(tables[tableAmount].getSweetnessPortion() + a6);
                                tables[tableAmount].setSweetnessCount(tables[tableAmount].getSweetnessCount() + 1);
                            } else if (flavour != null && flavour.equals("浙菜")) {
                                System.out.println("sweetness num out of range :" + a4);
                            }
                        }
                        orderAmount++;
                    } else {//代点菜
                        a1 = Integer.parseInt(str2[0]);//序号
                        a2 = Integer.parseInt(str2[3]);//份额
                        a3 = Integer.parseInt(str2[4]);//份数
                        tables[tableAmount].getOrder().addARecord(a1, str2[2], a2, a3);//使用函数给代点菜记录赋予相关的序号、菜名、份额、份数,将该条记录添加到总记录中
                        dish = menu.searthDish(str2[2]);//找点菜记录的菜名,存在菜名,返回dish,否则返回null
                        if (dish == null && flag[tableAmount] != 1) {
                            System.out.println(str2[2] + " does not exist");
                        } else {
                            tables[tableAmount].getOrder().getRecords()[orderAmount].setD(dish);//让记录的菜等于dish,以方便获得菜的价钱
                            if (tables[tableAmount].getOrder().getRecords()[orderAmount].getD() != null) {
                                int price = tables[tableAmount].getOrder().getRecords()[orderAmount].getPrice();////计算记录的价格
                                if (flag[tableAmount] != 1)
                                    System.out.println(str2[1] + " table " + tables[tableAmount].getTableNum() + " pay for table " + str2[0] + " " + price);
                                tables[tableAmount].setInitialSum2(tables[tableAmount].getInitialSum2() + price);
                                price = (int) (price * tables[tableAmount].getDiscount() + 0.5);
                                tables[tableAmount].setSum1(tables[tableAmount].getSum1() + price);//把该记录的价格加到该桌子的总价格中
                            }
                        }
                    }
                }
            } else if (count == 4) {
                if (!str2[0].matches("[1-9]")) {
                    String flavour = str2[1];
                    a2 = Integer.parseInt(str2[2]);
                    menu.getDishes()[dishAmount] = menu.addTDish(str2[0], flavour, a2);//添加新的菜到菜单里面
                    dishAmount++;
                } else {
                    a1 = Integer.parseInt(str2[0]);//序号
                    a2 = Integer.parseInt(str2[2]);//份额
                    a3 = Integer.parseInt(str2[3]);//份数
                    tables[tableAmount].getOrder().addARecord(a1, str2[2], a2, a3);//使用函数给代点菜记录赋予相关的序号、菜名、份额、份数,将该条记录添加到总记录中
                    dish = menu.searthDish(str2[1]);//找点菜记录的菜名,存在菜名,返回dish,否则返回null
                    if (dish == null && flag[tableAmount] != 1) {
                        System.out.println(str2[1] + " does not exist");
                    } else {
                        tables[tableAmount].getOrder().getRecords()[orderAmount].setD(dish);//让记录的菜等于dish,以方便获得菜的价钱
                        if (tables[tableAmount].getOrder().getRecords()[orderAmount].getD() != null && flag[tableAmount] != 1) {
                            int price = tables[tableAmount].getOrder().getRecords()[orderAmount].getPrice();////计算记录的价格
                            tables[tableAmount].setInitialSum1(tables[tableAmount].getInitialSum1() + price);
                            System.out.println(tables[tableAmount].getOrder().getRecords()[orderAmount].getOrderNum() + " " + dish.getName() + " " + price);
                            price = (int) (price * tables[tableAmount].getDiscount() + 0.5);
                            //System.out.println(str2[1] + " table " + tables[tableAmount].getTableNum() + " pay for table " + str2[0] + " " + price);
                            tables[tableAmount].setSum1(tables[tableAmount].getSum1() + price);//把该记录的价格加到该桌子的总价格中
                        }
                    }
                    orderAmount++;//点菜记录加一
                }
            } else if (count == 6) {
                if (flag0[tableAmount] == 0) {
                    if (str2[1].matches("[1-9][\\d]*")) {
                        a3 = Integer.parseInt(str2[1]);//序号
                        a4 = Integer.parseInt(str2[3]);//口味度值
                        a5 = Integer.parseInt(str2[4]);//份额
                        a6 = Integer.parseInt(str2[5]);//份数
                        a7 = Integer.parseInt(str2[0]);//桌号
                        tables[tableAmount].getOrder().addTARecord(a3, a4, str2[2], a5, a6);//使用函数给点菜记录赋予相关的序号、菜名、份额、份数,将该条记录添加到总记录中
                        dish = menu.searthTDish(str2[2]);//找点菜记录的菜名,存在菜名,返回dish,否则返回null
                        if (dish == null && flag[tableAmount] != 1) {
                            System.out.println(str2[1] + " does not exist");
                        } else {
                            String flavour = menu.searthDish(str2[2]).getFlavour();
                            if (flavour != null && flavour.equals("川菜") && a4 <= 5 && a4 >= 0) {
                                tables[tableAmount].getOrder().getRecords()[orderAmount].setD(dish);//让记录的菜等于dish,以方便获得菜的价钱
                                if (tables[tableAmount].getOrder().getRecords()[orderAmount].getD() != null && flag[tableAmount] != 1) {
                                    int price = tables[tableAmount].getOrder().getRecords()[orderAmount].getPrice();//计算记录的价格
                                    tables[tableAmount].setInitialSum2(tables[tableAmount].getInitialSum2() + price);
                                    System.out.println(a7 + " table " + tables[tableAmount].getOrder().getRecords()[orderAmount].getOrderNum() + " pay for table " + a7 + " " + price);
                                    price = (int) (price * tables[tableAmount].getTDiscount() + 0.5);
                                    tables[tableAmount].setSum2(tables[tableAmount].getSum2() + price);//把该记录的价格加到该桌子的总价格中
                                }
                                flag1[a7] = 1;
                                tables[a7].setTotalSpicy(tables[a7].getTotalSpicy() + a4);
                                tables[a7].setSpicyPortion(tables[a7].getSpicyPortion() + a6);
                                tables[a7].setSpicyCount(tables[a7].getSpicyCount() + 1);
                            } else if (flavour != null && flavour.equals("川菜")) {
                                System.out.println("spicy num out of range :" + a4);
                            } else if (flavour != null && flavour.equals("晋菜") && a4 <= 4 && a4 >= 0) {
                                tables[tableAmount].getOrder().getRecords()[orderAmount].setD(dish);//让记录的菜等于dish,以方便获得菜的价钱
                                if (tables[tableAmount].getOrder().getRecords()[orderAmount].getD() != null && flag[tableAmount] != 1) {
                                    int price = tables[tableAmount].getOrder().getRecords()[orderAmount].getPrice();//计算记录的价格
                                    tables[tableAmount].setInitialSum2(tables[tableAmount].getInitialSum2() + price);
                                    System.out.println(a7 + " table " + tables[tableAmount].getOrder().getRecords()[orderAmount].getOrderNum() + " pay for table " + a7 + " "  + price);
                                    price = (int) (price * tables[tableAmount].getTDiscount() + 0.5);
                                    tables[tableAmount].setSum2(tables[tableAmount].getSum2() + price);//把该记录的价格加到该桌子的总价格中
                                }
                                flag2[a7] = 1;
                                tables[a7].setTotalAcidity(tables[a7].getTotalAcidity() + a4);
                                tables[a7].setAcidityPortion(tables[a7].getAcidityPortion() + a6);
                                tables[a7].setAcidityCount(tables[a7].getAcidityCount() + 1);
                            } else if (flavour != null && flavour.equals("晋菜")) {
                                System.out.println("acidity num out of range :" + a4);
                            } else if (flavour != null && flavour.equals("浙菜") && a4 <= 3 && a4 >= 0) {
                                tables[tableAmount].getOrder().getRecords()[orderAmount].setD(dish);//让记录的菜等于dish,以方便获得菜的价钱
                                if (tables[tableAmount].getOrder().getRecords()[orderAmount].getD() != null && flag[tableAmount] != 1) {
                                    int price = tables[tableAmount].getOrder().getRecords()[orderAmount].getPrice();//计算记录的价格
                                    tables[tableAmount].setInitialSum2(tables[tableAmount].getInitialSum2() + price);
                                    System.out.println(a7 + " table " + tables[tableAmount].getOrder().getRecords()[orderAmount].getOrderNum() + " pay for table " + a7 + " "  + price);
                                    price = (int) (price * tables[tableAmount].getTDiscount() + 0.5);
                                    tables[tableAmount].setSum2(tables[tableAmount].getSum2() + price);//把该记录的价格加到该桌子的总价格中
                                }
                                flag3[a7] = 1;
                                tables[a7].setTotalSweetness(tables[a7].getTotalSweetness() + a4);
                                tables[a7].setSweetnessPortion(tables[a7].getSweetnessPortion() + a6);
                                tables[a7].setSweetnessCount(tables[a7].getSweetnessCount() + 1);
                            } else if (flavour != null && flavour.equals("浙菜")) {
                                System.out.println("sweetness num out of range :" + a4);
                            }
                        }
                        orderAmount++;
                    }
                }
            }
            else if (count == 7) {
                    tableAmount++;
                    clientAmount++;
                    if (str2[3].length() > 11)
                        flag0[tableAmount] = 1;
                    if (str2[4].length() == 11) {
                        String str = str2[4].substring(0, 3);
                        if (!str.matches("1(8|3)(0|1|9|3|5|6)"))
                            flag0[tableAmount] = 1;
                    }
                    if (flag0[tableAmount] == 1) {
                        string = input.nextLine();
                        str2 = string.split(" ");
                        while (str2.length != 7) {
                            string = input.nextLine();
                            str2 = string.split(" ");
                        }
                        System.out.println("wrong format");
                    }
                    if (flag0[tableAmount] == 0) {
                        orderAmount = 0;//每个桌子的点菜记录数目不同,创建一个新的类时需要重置数目
                        if (!clientName.contains(str2[3])) {
                            clientName.add(str2[3]);
                        } else
                            clientAmount--;
                        clients[clientAmount] = new Client(str2[3], str2[4]);
                        tables[tableAmount] = new Table(str2[1], str2[3], str2[4], str2[5], str2[6]);
                        if (tables[tableAmount].getTDiscount() < 0 || tables[tableAmount].getDiscount() < 0) {
                            System.out.println("table " + tableAmount + " out of opening hours");
                            flag[tableAmount] = 1;
                        } else
                            System.out.println("table " + str2[1] + ": ");
                    }
                }

            }
            for (int i = 1; i < tableAmount + 1; i++) {
                if (flag[i] != 1 && flag0[i] == 0) {
                    System.out.print("table " + tables[i].getTableNum() + ": " + (tables[i].getInitialSum1() + tables[i].getInitialSum2()) + " " + (tables[i].getSum1() + tables[i].getSum2()));
                    if (flag1[i] == 1)
                        System.out.print(" 川菜 " + tables[i].getSpicyPortion() + " " + tables[i].getSpicy());
                    if (flag2[i] == 1)
                        System.out.print(" 晋菜 " + tables[i].getAcidityPortion() + " " + tables[i].getAcidity());
                    if (flag3[i] == 1)
                        System.out.print(" 浙菜 " + tables[i].getSweetnessPortion() + " " + tables[i].getSweetness());
                    System.out.print("\n");

                }
            }
            for (int i = 1; i < clientAmount + 1; i++) {
                for (int j = 1; j < tableAmount + 1; j++) {
                    if (tables[j] != null && clients[i] != null) {
                        if (tables[j].getName().equals(clients[i].getName()))
                            clients[i].setSum(clients[i].getSum() + tables[j].getSum2() + tables[j].getSum1());
                    }
                }
            }

            for (int i = 1; i < clientAmount + 1; i++) {
                if (clients[i] != null && flag[i] != 1 && flag0[i] == 0)
                    System.out.println(clients[i].getName() + " " + clients[i].getTelephone() + " " + clients[i].getSum());
            }
        }

}

正确代码

点击查看代码
for (int i = 1; i < tableAmount + 1; i++) {
            if (flag[i] != 1 && flag0[i] == 0) {
                System.out.print("table " + tables[i].getTableNum() + ": " + (tables[i].getInitialSum1() + tables[i].getInitialSum2()) + " " + (tables[i].getSum1() + tables[i].getSum2()) + " ");
                if (flag1[i] > 0)
                    System.out.print("川菜 " + tables[i].getSpicyPortion() + " " + tables[i].getSpicy());
                if (flag2[i] > 0){
                    if(flag1[i] > 0)
                        System.out.print(" ");
                    System.out.print("晋菜 " + tables[i].getAcidityPortion() + " " + tables[i].getAcidity());
                }
                if (flag3[i] > 0){
                    if(flag1[i] > 0 || flag2[i] > 0)
                        System.out.print(" ");
                    System.out.print("浙菜 " + tables[i].getSweetnessPortion() + " " + tables[i].getSweetness());
                }
                System.out.print("\n");

            }
        }

第八次作业

7-1

错误点

错误代码

点击查看代码
if (count == 3) {
                if (str1[0].length() > 10)
                    System.out.println("wrong format");
                else {
                    courses[coursesNum] = new Course();
                    if ((str1[1].equals("必修") && str1[2].equals("考察"))) {
                        System.out.println(str1[0] + " : course type & access mode mismatch");
                    } else {
                        courses[coursesNum].setCourseName(str1[0]);
                        courses[coursesNum].setCurriculum(str1[1]);
                        courses[coursesNum].setAssessment(str1[2]);
                        courseArrayList.add(courses[coursesNum]);
                        coursesNum++;
                    }
                }
            }

正确代码

点击查看代码
if (count == 3) {

                if (str1[0].length() > 10)
                    System.out.println("wrong format");
                else {
                    courses[coursesNum] = new Course();
                    if ((str1[1].equals("必修") && str1[2].equals("考察")) || (!str1[1].equals("实验") && str1[2].equals("实验"))) {
                        System.out.println(str1[0] + " : course type & access mode mismatch");
                    } else {
                        if (searchCourse1(courses, str1[0]) == null) {
                            courses[coursesNum].setCourseName(str1[0]);
                            courses[coursesNum].setCurriculum(str1[1]);
                            courses[coursesNum].setAssessment(str1[2]);
                            courseArrayList.add(courses[coursesNum]);
                            coursesNum++;
                        }
                    }
                }

            }

第九次作业

7-1

错误点

错误代码

点击查看代码
StringBuffer a = new StringBuffer();
        String s = in.nextLine();
        String regex1 = "(.*)//(.*)";
        String regex2 = "\"(.*?)\"";
        while( !s.equals("exit")) {
            a.append(s.replaceAll("//.*", " ").replaceAll("\".*\"", " "));//去掉"//"后和的内容以及双引号里的内容
            s = in.nextLine();
            flag=1;
        }
        String b = a.toString().replaceAll("/\\*\\s*.*\\s*\\*/", " ");//去掉"/* */"里的内容,放入字符串b中
        b.replaceAll("(\r\n|\r|\n|\n\r)", "<br>");
        b = b.replaceAll("[^a-zA-Z]", " "); //除了小写a到z、大写A-Z字母,其他字符全换成空格
        String[] c = b.split(" ");

正确代码

点击查看代码
String b = a.toString().replaceAll("/\\*\\s*.*\\s*\\*/", " ");//去掉"/* */"里的内容,放入字符串b中
        b = b.replaceAll("=", "a");
        b = b.replaceAll("_", "a");
        b = b.replaceAll("[^a-zA-Z]", " "); //除了小写a到z、大写A-Z字母,其他字符全换成空格
        String[] c = b.split(" ");

课堂检测

7-1

错误点

若在input.nextInt()和input.nextDouble()后使用input.nextLine(),是可能出现问题的,会出现nextLine()识别上一个输入的回车

错误代码

点击查看代码
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        int num = input.nextInt();
        int sum = 0;
        for (int i = 0; i < num; i ++){
            String s = input.nextLine();
            String[] s1 = s.split(" ");
            if (s1[0].equals("SL")) {
                SLExpress sl = new SLExpress(Integer.parseInt(s1[1]));
                sum += sl.getTotal();
            }
            else {
                DDExpress dd = new DDExpress(Integer.parseInt(s1[1]));
                sum += dd.getTotal();
            }

        }
        System.out.println(sum);
    }
}
abstract class Express {
    private int weight;

    public Express(int weight) {
        this.weight = weight;
    }

    public int getWeight() {
        return weight;
    }

    public void setWeight(int weight) {
        this.weight = weight;
    }
    public abstract int getTotal();
}
class SLExpress extends Express{

    public SLExpress(int weight) {
        super(weight);
    }

    @Override
    public int getTotal() {
        if (getWeight() == 1)
            return 12;
        else if (getWeight() > 1) {
            return 12 + (getWeight() - 1) * 2;
        }
        return 0;
    }
}
class DDExpress extends Express{


    public DDExpress(int weight) {
        super(weight);
    }

    @Override
    public int getTotal() {
        if (getWeight() == 1)
            return 5;
        else if (getWeight() > 1) {
            return 5 + (getWeight() - 1);

        }
        return 0;
    }
}

正确代码

点击查看代码
import java.util.Scanner;
public class Main {
    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        int num = input.nextInt();
        int sum = 0;
        for (int i = 0; i < num; i ++){
            String s = input.next();
            String[] s1 = s.split(" ");
            if (s1[0].equals("SL")) {
                SLExpress sl = new SLExpress(Integer.parseInt(input.next()));
                sum += sl.getTotal();
            }
            else {
                DDExpress dd = new DDExpress(Integer.parseInt(input.next()));
                sum += dd.getTotal();
            }

        }
        System.out.println(sum);
    }
}

abstract class Express {
    private int weight;

    public Express(int weight) {
        this.weight = weight;
    }

    public int getWeight() {
        return weight;
    }

    public void setWeight(int weight) {
        this.weight = weight;
    }
    public abstract int getTotal();
}
class SLExpress extends Express{

    public SLExpress(int weight) {
        super(weight);
    }

    @Override
    public int getTotal() {
        if (getWeight() == 1)
            return 12;
        else if (getWeight() > 1) {
            return 12 + (getWeight() - 1) * 2;
        }
        return 0;
    }
}
class DDExpress extends Express{


    public DDExpress(int weight) {
        super(weight);
    }

    @Override
    public int getTotal() {
        if (getWeight() == 1)
            return 5;
        else if (getWeight() > 1) {
            return 5 + (getWeight() - 1);

        }
        return 0;
    }
}
点击查看代码
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        int num = input.nextInt();
        int sum = 0;
        input.nextLine();
        for (int i = 0; i < num; i ++){
            String s = input.nextLine();
            String[] s1 = s.split(" ");
            if (s1[0].equals("SL")) {
                SLExpress sl = new SLExpress(Integer.parseInt(s1[1]));
                sum += sl.getTotal();
            }
            else {
                DDExpress dd = new DDExpress(Integer.parseInt(s1[1]));
                sum += dd.getTotal();
            }

        }
        System.out.println(sum);
    }
}
abstract class Express {
    private int weight;

    public Express(int weight) {
        this.weight = weight;
    }

    public int getWeight() {
        return weight;
    }

    public void setWeight(int weight) {
        this.weight = weight;
    }
    public abstract int getTotal();
}
class SLExpress extends Express{

    public SLExpress(int weight) {
        super(weight);
    }

    @Override
    public int getTotal() {
        if (getWeight() == 1)
            return 12;
        else if (getWeight() > 1) {
            return 12 + (getWeight() - 1) * 2;
        }
        return 0;
    }
}
class DDExpress extends Express{


    public DDExpress(int weight) {
        super(weight);
    }

    @Override
    public int getTotal() {
        if (getWeight() == 1)
            return 5;
        else if (getWeight() > 1) {
            return 5 + (getWeight() - 1);

        }
        return 0;
    }
}

第十一次作业

7-1

错误点

错误代码

点击查看代码

import java.util.Arrays;
import java.util.Scanner;
import java.util.Stack;

public class Main {
    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        int n = input.nextInt();
        ArrayIntegerStack arrayIntegerStack = new ArrayIntegerStack(n);
        int m = input.nextInt();
        for (int i = 0; i < m; i ++) {
            String s = input.next();
            if (!s.equals("null")) {
                int a = Integer.parseInt(s);
                arrayIntegerStack.push(a);
                System.out.println(a);
            }
        }
        System.out.println(arrayIntegerStack.peek() + "," + arrayIntegerStack.empty() + "," + arrayIntegerStack.size());
        String s = Arrays.toString(arrayIntegerStack.getArr());
        System.out.println(s);
        int x = input.nextInt();
        for (int i = 0; i < x; i ++)
            System.out.println(arrayIntegerStack.pop());
        System.out.println(arrayIntegerStack.peek() + "," + arrayIntegerStack.empty() + "," + arrayIntegerStack.size());
        s = Arrays.toString(arrayIntegerStack.getArr());
        System.out.println(s);
    }
}
interface IntegerStack {
    public Integer push(Integer item);
//如果item为null,则不入栈直接返回null。如果栈满,也返回null。如果插入成功,返回item。

    public Integer pop();   //出栈,如果为空,则返回null。出栈时只移动栈顶指针,相应位置不置为null
    public Integer peek();  //获得栈顶元素,如果为空,则返回null.
    public boolean empty(); //如果为空返回true
    public int size();      //返回栈中元素个数
}
class ArrayIntegerStack implements IntegerStack {
    private int maxSize;
    private Integer[] arr;
    private int size = 0;

    public ArrayIntegerStack() {
    }

    public ArrayIntegerStack(int maxSize) {
        this.maxSize = maxSize;
        arr = new Integer[maxSize];
    }

    public int getMaxSize() {
        return maxSize;
    }

    public void setMaxSize(int maxSize) {
        this.maxSize = maxSize;
    }

    public Integer[] getArr() {
        return arr;
    }

    public void setArr(Integer[] arr) {
        this.arr = arr;
    }

    @Override
    public Integer push(Integer item) {
        if (item == null)
            return null;
        if (size > maxSize)
            return null;
        arr[size] = item;
        size += 1;
        return item;
    }

    @Override
    public Integer pop() {
        if (size != 0) {
            Integer i = arr[size - 1];
            size -= 1;
            return i;
        }
        return null;
    }

    @Override
    public Integer peek() {
        if (size != 0)
            return arr[size - 1];
        return null;
    }

    @Override
    public boolean empty() {
        if (size == 0)
            return true;
        return false;
    }

    @Override
    public int size() {
        return size;
    }
}


正确代码

点击查看代码

import java.util.Arrays;
import java.util.Scanner;
import java.util.Stack;

public class Main {
    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        int n = input.nextInt();
        ArrayIntegerStack arrayIntegerStack = new ArrayIntegerStack(n);
        int m = input.nextInt();
        for (int i = 0; i < m; i ++) {
            String s = input.next();
            if (!s.equals("null")) {
                int a = Integer.parseInt(s);
                Integer a1 = arrayIntegerStack.push(a);
                System.out.println(a1);
            }
            if (s.equals("null"))
                i -= 1;
        }
        System.out.println(arrayIntegerStack.peek() + "," + arrayIntegerStack.empty() + "," + arrayIntegerStack.size());
        String s = Arrays.toString(arrayIntegerStack.getArr());
        System.out.println(s);
        int x = input.nextInt();
        for (int i = 0; i < x; i ++)
            System.out.println(arrayIntegerStack.pop());
        System.out.println(arrayIntegerStack.peek() + "," + arrayIntegerStack.empty() + "," + arrayIntegerStack.size());
        s = Arrays.toString(arrayIntegerStack.getArr());
        System.out.println(s);
    }
}
interface IntegerStack {
    public Integer push(Integer item);
//如果item为null,则不入栈直接返回null。如果栈满,也返回null。如果插入成功,返回item。

    public Integer pop();   //出栈,如果为空,则返回null。出栈时只移动栈顶指针,相应位置不置为null
    public Integer peek();  //获得栈顶元素,如果为空,则返回null.
    public boolean empty(); //如果为空返回true
    public int size();      //返回栈中元素个数
}
class ArrayIntegerStack implements IntegerStack {
    private int maxSize;
    private Integer[] arr;
    private int size = 0;

    public ArrayIntegerStack() {
    }

    public ArrayIntegerStack(int maxSize) {
        this.maxSize = maxSize;
        arr = new Integer[maxSize];
    }

    public int getMaxSize() {
        return maxSize;
    }

    public void setMaxSize(int maxSize) {
        this.maxSize = maxSize;
    }

    public Integer[] getArr() {
        return arr;
    }

    public void setArr(Integer[] arr) {
        this.arr = arr;
    }

    @Override
    public Integer push(Integer item) {
        if (item == null)
            return null;
        if (size == maxSize)
            return null;
        arr[size] = item;
        size += 1;
        return item;
    }

    @Override
    public Integer pop() {
        if (size != 0) {
            Integer i = arr[size - 1];
            size -= 1;
            return i;
        }
        return null;
    }

    @Override
    public Integer peek() {
        if (size != 0)
            return arr[size - 1];
        return null;
    }

    @Override
    public boolean empty() {
        if (size == 0)
            return true;
        return false;
    }

    @Override
    public int size() {
        return size;
    }
}


四、改进建议

第十次作业

7-3

把重复代码改成方法来实现功能,减少代码量,更加简洁,且做到更好地划分职责。

五、总结

学到的知识

灵活使用HashSet,TreeMap等帮助解决问题,使用接口Comparable进行排序,构造迭代器,队列和栈的一些基本使用方法。
教学方法多样,尤其是翻转课堂部分,让同学们有机会上台展现自己的小组成果,锻炼了团队合作能力以及面对很多人从容不迫的能力。
在pta上练习课后题目确实是比较有用处的,就是pta上的一些测试点还是有点死,有的测试点又不是很成熟,一些错了好像也会出现能过的状态。

需要改进的地方

碰到一些难的题目容易放弃,还是得坚持一下,还有就是题目一开始的构思就要很好,才不容易在迭代的时候耗费很大的力气,就是一开始写的比较乱,后面改起来就很麻烦。

建议

没什么建议的

posted @ 2023-06-27 15:56  xujingyi01  阅读(19)  评论(0)    收藏  举报