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
对set迭代
Iterator
对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上的一些测试点还是有点死,有的测试点又不是很成熟,一些错了好像也会出现能过的状态。
需要改进的地方
碰到一些难的题目容易放弃,还是得坚持一下,还有就是题目一开始的构思就要很好,才不容易在迭代的时候耗费很大的力气,就是一开始写的比较乱,后面改起来就很麻烦。
建议
没什么建议的
浙公网安备 33010602011771号