最新要闻
- 金融类都有什么-金融类都有什么专业 天天即时看
- 蔚来五一换电量创历史新高 车主高速薅免费电池4万块_世界今日报
- 《王者荣耀》妲己九尾“收割”女玩家:实体手办1199元
- 苹果树桃树缓控修剪新技术_关于苹果树桃树缓控修剪新技术的简介 环球微动态
- 宁波地铁全天免费坐 五一延长1小时 有站点人流暴涨200%|世界快看
- 今年的五一“疯”了吗?网友:走不动 根本走不动
- 太科幻!比亚迪深圳云巴开通:全自动运行、刷脸进站、无感支付
- AMD Yes!一文了解锐龙Z1处理器:为掌机而生 天天热头条
- 天天热头条丨让AI画“边打游戏边吃意面” AI毅然让玩家啃了手柄
- 《饥荒联机版》在线人数破纪录 Steam史低只要4.8元
- 评论区被疯狂玩梗 抖音网红女骑手:何必恶语相对
- 通讯!经典超烂游戏《Ancient Roman》引热议 日本4成女性居然都知道
- 环球关注:亚美尼亚飞一航空:未预先通知,土耳其对其关闭了领空
- 苏宁易购一季度亏损1亿元:大幅减亏90% 核心家电3C业务盈利 全球微速讯
- 快讯:景区回应“上厕所要花55元买门票”:园外无公厕
- 直线过抛物线焦点公式(抛物线焦点公式)-环球关注
手机
iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?
警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案
- iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?
- 警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案
- 男子被关545天申国赔:获赔18万多 驳回精神抚慰金
- 3天内26名本土感染者,辽宁确诊人数已超安徽
- 广西柳州一男子因纠纷杀害三人后自首
- 洱海坠机4名机组人员被批准为烈士 数千干部群众悼念
家电
PTA题目集4~6总结
一前言
题目集四主要考察的是对LocalDate,ArrayList,HashSet等Java自带类的使用
(资料图)
题目集五主要考察的是对正则表达式的使用,以及对其题目集三的时间题目的进行类结构的改变
题目集六只有一道题,主要是对题目集四的第一题进行加大难度
总的来说这几次的题目量比前面几次都要少,但是题目难度开始加深。
二设计与分析
由于部分题目过于简单,所以这里主要是对题目集四的7-1,题目集五的7-5,7-6,题目集六的7-1进行分析
题目集四7-1:当时见到这道题时认为难度较大且复杂,所以在这次题目集时放弃了写这道题,但由于题目集六的7-1题目是在此基础上的加深所以主要在后面分析
题目集五7-5:此题目主要是我们将前面题目集三的7-3的进行如下类图的类结构更改
所以我们主要是对类图进行分析,我们发现各个类之间是聚合的关系,每一个类与类之间聚合,所以我们按照此类图设计类时应该由year到month到day到DateUtil之间一个个写。最后的题目要求的主要功能则在DateUtil这里实现,因为这里是最后一个聚合。
代码如下:
1 import java.util.Scanner; 2 public class Main { 3 public static void main(String[] args) { 4 Scanner input = new Scanner(System.in); 5 int year = 0; 6 int month = 0; 7 int day = 0; 8 9 int choice = input.nextInt(); 10 11 if (choice == 1) { // test getNextNDays method 12 int m = 0; 13 year = Integer.parseInt(input.next()); 14 month = Integer.parseInt(input.next()); 15 day = Integer.parseInt(input.next()); 16 17 DateUtil date = new DateUtil(year, month, day); 18 19 if (!date.checkInputValidity()) { 20 System.out.println("Wrong Format"); 21 System.exit(0); 22 } 23 24 m = input.nextInt(); 25 26 if (m < 0) { 27 System.out.println("Wrong Format"); 28 System.exit(0); 29 } 30 System.out.println(date.getNextNDays(m).showDate()); 31 } else if (choice == 2) { // test getPreviousNDays method 32 int n = 0; 33 year = Integer.parseInt(input.next()); 34 month = Integer.parseInt(input.next()); 35 day = Integer.parseInt(input.next()); 36 37 DateUtil date = new DateUtil(year, month, day); 38 39 if (!date.checkInputValidity()) { 40 System.out.println("Wrong Format"); 41 System.exit(0); 42 } 43 44 n = input.nextInt(); 45 46 if (n < 0) { 47 System.out.println("Wrong Format"); 48 System.exit(0); 49 } 50 System.out.println(date.getPreviousNDays(n).showDate()); 51 } else if (choice == 3) { //test getDaysofDates method 52 year = Integer.parseInt(input.next()); 53 month = Integer.parseInt(input.next()); 54 day = Integer.parseInt(input.next()); 55 56 int anotherYear = Integer.parseInt(input.next()); 57 int anotherMonth = Integer.parseInt(input.next()); 58 int anotherDay = Integer.parseInt(input.next()); 59 60 DateUtil fromDate = new DateUtil(year, month, day); 61 DateUtil toDate = new DateUtil(anotherYear, anotherMonth, anotherDay); 62 63 if (fromDate.checkInputValidity() && toDate.checkInputValidity()) { 64 System.out.println(fromDate.getDaysofDates(toDate)); 65 } else { 66 System.out.println("Wrong Format"); 67 System.exit(0); 68 } 69 } 70 else{ 71 System.out.println("Wrong Format"); 72 System.exit(0); 73 } 74 } 75 public static class Day { 76 int value; 77 int mon_maxnum[]= new int[]{0,31,28,31,30,31,30,31,31,30,31,30,31};//数组储存各月份天数 78 Month month = new Month(); 79 Day(){ 80 81 } 82 Day(int yearValue,int monthValue,int dayValue){ 83 value = dayValue; 84 month = new Month( yearValue, monthValue); 85 } 86 87 public void setValue(int value) { 88 this.value = value; 89 } 90 91 public int getValue() { 92 return value; 93 } 94 95 public Month getMonth() { 96 return month; 97 } 98 99 public void setMonth(Month month) {100 this.month = month;101 }102 public void resetMin(){103 value = 1;104 }105 public void resetMax(){106 if(month.year.isLeapYear()){107 mon_maxnum[2]=29;108 }else{109 mon_maxnum[2]=28;110 }111 value = mon_maxnum[month.value];112 }113 boolean validate(){114 if(value>mon_maxnum[month.value]||value<1){115 return false;116 }else{117 return true;118 }119 }120 public void dayIncrement(){121 value++;122 }123 public void dayReduction(){124 value--;125 }126 }127 public static class Month {128 int value;129 Year year = new Year();130 Month(){131 132 }133 Month(int yearValue,int monthValue){134 value = monthValue;135 year.setValue(yearValue);136 }137 138 public void setValue(int value) {139 this.value = value;140 }141 142 public int getValue() {143 return value;144 }145 146 public Year getYear() {147 return year;148 }149 150 public void setYear(Year year) {151 this.year = year;152 }153 public void resetMin(){154 value = 1;155 }156 public void resetMax(){157 value = 12;158 }159 boolean validate(){160 if(value>12||value<1){161 return false;162 }else{163 return true;164 }165 }166 public void monthIncrement(){167 value++;168 }169 public void montReduction(){170 value--;171 }172 }173 public static class Year {174 int value;175 Year(){176 177 }178 Year(int value){179 this.value = value;180 }181 182 public int getValue() {183 return value;184 }185 186 public void setValue(int value) {187 this.value = value;188 }189 boolean validate(){190 if(value>2050||value<1900){191 return false;192 }else{193 return true;194 }195 }196 boolean isLeapYear(){197 if((value%4==0&&value%100!=0)||value%400==0){198 return true;199 }200 return false;201 }202 void yearIncrement(){203 value++;204 }205 void yearReduction(){206 value--;207 }208 }209 public static class DateUtil {210 Day day = new Day();211 DateUtil(){212 213 }214 DateUtil(int y,int m,int d){215 day = new Day(y,m,d);216 }217 218 public Day getDay() {219 return day;220 }221 222 public void setDay(Day day) {223 this.day = day;224 }225 boolean checkInputValidity(){226 if(day.month.year.isLeapYear()){227 day.mon_maxnum[2]=29;228 }229 if(day.month.year.value<1900||day.month.year.value>2050||day.month.value<1||day.month.value>12||day.value<1||day.value>day.mon_maxnum[day.month.value]){230 return false;231 }232 else{233 return true;234 }235 }236 boolean compareDates(DateUtil date){237 if(this.day.month.year.value>date.day.month.year.value){238 return true;239 }else if(this.day.month.year.value==date.day.month.year.value){240 if(this.day.month.value>date.day.month.value){241 return true;242 }else if(this.day.month.value==date.day.month.value){243 if(this.day.value>date.day.value){244 return true;245 }else{246 return false;247 }248 }249 }else if(this.day.month.year.value题目集五7-6
这题与前面题目相差不多主要是按照题目要求的类图结构进行更改
我们对类图进行分析,我们发现这题与前面的题目相似的是:类之间的关系仍然是聚合,不一样的是:类聚合不在是一个类一个类的聚合而是别的类聚合一个主要菜单实现功能的类。
代码如下:
1 import java.util.Scanner; 2 public class Main { 3 public static void main(String[] args) { 4 Scanner input = new Scanner(System.in); 5 int year = 0; 6 int month = 0; 7 int day = 0; 8 9 int choice = input.nextInt(); 10 11 if (choice == 1) { // test getNextNDays method 12 int m = 0; 13 year = Integer.parseInt(input.next()); 14 month = Integer.parseInt(input.next()); 15 day = Integer.parseInt(input.next()); 16 17 DateUtil date = new DateUtil(year, month, day); 18 19 if (!date.checkInputValidity()) { 20 System.out.println("Wrong Format"); 21 System.exit(0); 22 } 23 24 m = input.nextInt(); 25 26 if (m < 0) { 27 System.out.println("Wrong Format"); 28 System.exit(0); 29 } 30 31 System.out.print(date.year.value + "-" + date.month.value + "-" + date.day.value + " next " + m + " days is:"); 32 System.out.println(date.getNextNDays(m).showDate()); 33 } else if (choice == 2) { // test getPreviousNDays method 34 int n = 0; 35 year = Integer.parseInt(input.next()); 36 month = Integer.parseInt(input.next()); 37 day = Integer.parseInt(input.next()); 38 39 DateUtil date = new DateUtil(year, month, day); 40 41 if (!date.checkInputValidity()) { 42 System.out.println("Wrong Format"); 43 System.exit(0); 44 } 45 46 n = input.nextInt(); 47 48 if (n < 0) { 49 System.out.println("Wrong Format"); 50 System.exit(0); 51 } 52 53 System.out.print( 54 date.year.value + "-" + date.month.value + "-" + date.day.value + " previous " + n + " days is:"); 55 System.out.println(date.getPreviousNDays(n).showDate()); 56 } else if (choice == 3) { //test getDaysofDates method 57 year = Integer.parseInt(input.next()); 58 month = Integer.parseInt(input.next()); 59 day = Integer.parseInt(input.next()); 60 61 int anotherYear = Integer.parseInt(input.next()); 62 int anotherMonth = Integer.parseInt(input.next()); 63 int anotherDay = Integer.parseInt(input.next()); 64 65 DateUtil fromDate = new DateUtil(year, month, day); 66 DateUtil toDate = new DateUtil(anotherYear, anotherMonth, anotherDay); 67 68 if (fromDate.checkInputValidity() && toDate.checkInputValidity()) { 69 System.out.println("The days between " + fromDate.showDate() + 70 " and " + toDate.showDate() + " are:" 71 + fromDate.getDaysofDates(toDate)); 72 } else { 73 System.out.println("Wrong Format"); 74 System.exit(0); 75 } 76 } 77 else{ 78 System.out.println("Wrong Format"); 79 System.exit(0); 80 } 81 } 82 public static class Day { 83 Day(){ 84 85 } 86 Day(int value){ 87 88 } 89 int value; 90 91 public void setValue(int value) { 92 this.value = value; 93 } 94 95 public int getValue() { 96 return value; 97 } 98 void dayIncrement(){ 99 value++;100 }101 void dayReduction(){102 value--;103 }104 }105 public static class Year {106 int value;107 Year(){108 109 }110 Year(int value){111 this.value = value;112 }113 114 public int getValue() {115 return value;116 }117 118 public void setValue(int value) {119 this.value = value;120 }121 boolean validate(){122 if(value>2020||value<1820){123 return false;124 }else{125 return true;126 }127 }128 boolean isLeapYear(){129 if((value%4==0&&value%100!=0)||value%400==0){130 return true;131 }132 return false;133 }134 void yearIncrement(){135 value++;136 }137 void yearReduction(){138 value--;139 }140 }141 public static class Month {142 Month(){143 144 }145 Month(int value){146 this.value = value;147 }148 int value;149 150 public int getValue() {151 return value;152 }153 154 public void setValue(int value) {155 this.value = value;156 }157 boolean validate(){158 if(value>12||value<1){159 return false;160 }else{161 return true;162 }163 }164 public void monthIncrement(){165 value++;166 }167 public void montReduction(){168 value--;169 }170 public void resetMin(){171 value = 1;172 }173 public void resetMax(){174 value = 12;175 }176 }177 public static class DateUtil {178 Day day = new Day();179 Month month = new Month();180 Year year = new Year();181 int mon_maxnum[]= new int[]{0,31,28,31,30,31,30,31,31,30,31,30,31};//数组储存各月份天数182 DateUtil(){183 184 }185 DateUtil(int y, int m,int d){186 this.day.value = d;187 this.month.value = m;188 this.year.value = y;189 }190 191 public Year getYear() {192 return year;193 }194 195 public void setYear(Year year) {196 this.year = year;197 }198 199 public Month getMonth() {200 return month;201 }202 203 public void setMonth(Month month) {204 this.month = month;205 }206 207 public Day getDay() {208 return day;209 }210 211 public void setDay(Day day) {212 this.day = day;213 }214 public void setDayMin(){215 day.value = 1;216 }217 public void setDayMax(){218 if(year.isLeapYear()){219 mon_maxnum[2] = 29;220 }else{221 mon_maxnum[2] = 28;222 }223 day.value = mon_maxnum[month.value];224 }225 public boolean checkInputValidity(){226 if(year.isLeapYear()){227 mon_maxnum[2] = 29;228 }else{229 mon_maxnum[2] = 28;230 }231 if(year.validate()&&month.validate()&&day.value>=1&&day.value<=mon_maxnum[month.value]){232 return true;233 }else {234 return false;235 }236 }237 DateUtil getNextNDays(int n){238 int i;239 for(i=0;idate.year.value)287 return true;288 else if (this.year.value == date.year.value) {289 if (this.month.value > date.month.value)290 return true;291 else if (this.month.value == date.month.value) {292 if (this.day.value > date.day.value)293 return true;294 else295 return false;296 }297 } else if (this.year.value < date.year.value)298 return false;299 return false;300 }301 boolean equalTwoDates(DateUtil date){302 if(this.year.value==date.year.value&&this.month.value==date.month.value&&this.day.value==date.day.value){303 return true;304 }else{305 return false;306 }307 }308 int getDaysofDates(DateUtil date){309 int i,n=0;310 int j=365,k=366;311 if(this.compareDates(date)){//比较两个日期判断是否进行进行更换操作312 if(this.year.value==date.year.value){313 if(this.year.isLeapYear()){314 mon_maxnum[2]=29;315 }else{316 mon_maxnum[2]=28;317 }318 for(i=date.month.value+1;i 题目集六 7-1
此题与前面的题目集四7-1的大体相同,但是加入了带点菜功能,特色菜和各种异常情况处理,所以这道题是及其复杂的,但是我们首先明白一个程序的运行离不开的是输入,进行运行,输出。所以我们一步一步慢慢来就行。
首先我们对题目进行分析我们发现这个题目的输入方式为直到输入end才会结束,所以显而易见的我们这里要用一个循环输入,且要判断输入end的时候结束循环,所以我们要以end为标识符作为首要判断,根据题目的空格输入我们就应该明白这里我们要使用split方法,进行去空格产生字符数组,根据数组的大小内容进行判断进行相应方法。
代码如下:
while (true){ String s1 = input.nextLine(); s = s1.split(" "); if(s1.equals("end")){ break; } flag = s.length; if(flag == 2){ if(s[1].equals("delete")){ a1 = Integer.parseInt(s[0]); if (table[a4].order.findRecordByNum(a1)!=null) { if(table[a4].order.findRecordByNum(a1).portion != 0) { a6 = table[a4].order.findRecordByNum(a1).getPrice(); table[a4].order.findRecordByNum(a1).portion = 0; if(table[a4].order.findRecordByNum(a1).d.flag!=0) { table[a4].sum = table[a4].sum - a6; table[a4].order.findRecordByNum(a1).portion = 0; }else { float h = a6*0.7f; table[a4].sum = table[a4].sum - Math.round(h); } }else { System.out.println("deduplication "+a1); } }else { System.out.println("delete error"); } }else{ if(table[a4] == null) { dishName = s[0]; if( s[1].matches(ruller)) { a1 = Integer.parseInt(s[1]); menu.dishs[a5] = menu.addDish(dishName, a1); a5++; }else { System.out.println("wrong format"); } }else { System.out.println("invalid dish"); } } } else if (flag == 3){ if(s[2].equals("T")){ dishName = s[0]; a1 = Integer.parseInt(s[1]); menu.dishs[a5] = menu.addDish(dishName,a1); menu.dishs[a5].flag = 0; a5++; } } else if (flag == 4) { if(s[0].equals("table")){ if( s[1].matches(ruller)) { a4 = Integer.parseInt(s[1]); if(a4<=55&&a4>=1) { table[a4] = new Table(a4); table[a4].Doing(s[2], s[3]); if (table[a4].checkTime()) { System.out.println("table" + " " + table[a4].tableNum + ":" + " "); } else { System.out.println(a4 + " date error"); } }else { System.out.println(s[1]+" table num out of range"); } }else { System.out.println("wrong format"); } }else { a1 = Integer.parseInt(s[0]); dishName = s[1]; a2 = Integer.parseInt(s[2]); a3 = Integer.parseInt(s[3]); if (table[a4] != null) { if (a2 >= 1 && a2 <= 3 && a3 > 0 && a3 <= 15) { Dish otherDish = menu.searthDish(dishName); if (otherDish != null) { table[a4].order.addARecord(a1, dishName, a2, a3); table[a4].order.findRecordByNum(a1).d = otherDish; a7 = table[a4].order.findRecordByNum(a1).getPrice(); if (table[a4].order.findRecordByNum(a1).d.flag == -1) { float k = a7 * table[a4].discount; int t = Math.round(k); table[a4].sum += t; } else { if (table[a4].week <= 5 && table[a4].week >= 1) { float v = a7 * 0.7f; table[a4].sum += Math.round(v); } else if (table[a4].week == 6 || table[a4].week == 7) { table[a4].sum += a7; } } System.out.println(a1 + " " + dishName + " " + table[a4].order.findRecordByNum(a1).getPrice()); } else { } } else if (a2 < 1 || a2 > 3 && a3 > 0 && a3 <= 15) { System.out.println(a1 + " portion out of range " + a2); } else if (a3 < 0 || a3 > 15) { System.out.println(a1 + " num out of range " + a3); } }else { } } } else if (flag ==5) { }else { System.out.println("wrong format"); } }我们对输入数据进行判断后我们应该要进行对主要方法的实现,所以我们要开始对其他类的设计,如dish,tabale等类
我们首先判断类与类之间的关系,我们可以知道各个类之间的关系为依赖,所以可以开始对各个类进行实现,代码如下
1 class Dish { 2 String name = " " ;//菜品名称 3 4 int unit_price = 0; //单价 5 int flag = -1; 6 int portion; 7 Dish(){ 8 9 } 10 Dish(String name,int unit_price){ 11 this.name = name; 12 this.unit_price = unit_price; 13 } 14 int getPrice(int portion){ 15 int p2 = 0; 16 if(portion == 1){ 17 p2 = this.unit_price; 18 }else if (portion == 2){ 19 float p1 = (float) (this.unit_price * 1.5); 20 p2 = Math.round(p1); 21 }else if (portion == 3){ 22 float p1 = this.unit_price * 2; 23 p2 = Math.round(p1); 24 }else { 25 26 } 27 return p2; 28 }//计算菜品价格的方法,输入参数是点菜的份额(输入数据只能是1/2/3,代表小/中/大份) 29 30 public void setName(String name) { 31 this.name = name; 32 } 33 34 public String getName() { 35 return name; 36 } 37 38 public int getUnit_price() { 39 return unit_price; 40 } 41 42 public void setUnit_price(int unit_price) { 43 this.unit_price = unit_price; 44 } 45 } 46 class Menu { 47 Dish[] dishs = new Dish[10];//菜品数组,保存所有菜品信息 48 int count = 0; 49 Dish searthDish(String dishName){ 50 Dish temd = null; 51 for(int i=count-1;i>=0;i--){ 52 if(dishName.equals(dishs[i].name)){ 53 temd = dishs[i]; 54 break; 55 } 56 } 57 if(temd==null){ 58 System.out.println(dishName+" does not exist"); 59 } 60 return temd; 61 }//根据菜名在菜谱中查找菜品信息,返回Dish对象。 62 Dish addDish(String dishName,int unit_price){ 63 Dish dh = new Dish(); 64 dh.name = dishName; 65 dh.unit_price = unit_price; 66 count++; 67 return dh; 68 }//添加一道菜品信息 69 } 70 class Record { 71 int orderNum;//序号 72 int Num = 1;//份额 73 Dish d = new Dish();//菜品\\ 74 int portion = 0;//份额(1/2/3代表小/中/大份) 75 Record(){ 76 77 } 78 Record(int orderNum,int num,int portion){ 79 80 this.orderNum = orderNum; 81 this.Num = num; 82 this.portion = portion; 83 } 84 85 86 87 int getPrice(){ 88 return d.getPrice(portion)*Num; 89 }//计价,计算本条记录的价格 90 91 public Dish getD() { 92 return d; 93 } 94 95 public int getNum() { 96 return Num; 97 } 98 99 public int getOrderNum() {100 return orderNum;101 }102 103 public int getPortion() {104 return portion;105 }106 107 public void setD(Dish d) {108 d = new Dish();109 this.d = d;110 }111 112 public void setNum(int num) {113 Num = num;114 }115 116 public void setOrderNum(int orderNum) {117 this.orderNum = orderNum;118 }119 120 public void setPortion(int portion) {121 this.portion = portion;122 }123 124 }125 class Table {126 int mon_maxnum[]= new int[]{0,31,28,31,30,31,30,31,31,30,31,30,31};//数组储存各月份天数127 Table(){128 129 }130 Table(int tableNum){131 this.tableNum = tableNum;132 }133 Table(Order order){134 this.order = order;135 }136 Order order = new Order();137 String time;138 int week;139 int hour,minute,second,year,month,day;140 float discount = -1;141 int sum = 0;142 int tableNum = -1;143 //处理时间144 public void processTime(String time1,String time2){145 DateTimeFormatter JEFormatter = DateTimeFormatter.ofPattern("yyyy/M/d");146 LocalDate l1 = LocalDate.parse(time1,JEFormatter);147 week = l1.getDayOfWeek().getValue();148 String[] time3 = time2.split("/");149 hour = Integer.parseInt(time3[0]);150 minute = Integer.parseInt(time3[1]);151 second = Integer.parseInt(time3[2]);152 String[] time4 = time1.split("/");153 year = Integer.parseInt(time4[0]);154 month = Integer.parseInt(time4[1]);155 day = Integer.parseInt(time4[2]);156 }157 public void setDiscount(){158 if(week<=5&&week>=1){159 if(hour>=17&&hour<20)160 discount=0.8F;161 else if(hour==20&&minute<30)162 discount=0.8F;163 else if(hour==20&&minute==30&&second==0)164 discount=0.8F;165 else if(hour>=11&&hour<=13||hour==10&&minute>=30)166 discount=0.6F;167 else if(hour==14&&minute<30)168 discount=0.6F;169 else if(hour==14&&minute==30&&second==0)170 discount=0.6F;171 }else{172 if(hour>=10&&hour<=20)173 discount= 1.0F;174 else if(hour==9&&minute>=30)175 discount= 1.0F;176 else if(hour==21&&minute<30||hour==21&&minute==30&&second==0)177 discount= 1.0F;178 }179 }180 public int getMoney(){181 return Math.round(sum * discount);182 }183 public void Doing(String time1,String time2){184 processTime(time1,time2);185 setDiscount();186 187 }188 189 public void setTableNum(int tableNum) {190 this.tableNum = tableNum;191 }192 193 public void setOrder(Order order) {194 this.order = order;195 }196 197 public Order getOrder() {198 return order;199 }200 public void setSum(){201 sum = this.order.getTotalPrice();202 }203 void Gettottalprice(){204 if(discount>0){205 System.out.println("table " + tableNum + ": " + this.order.getTotalPrice()+" "+ sum);206 }else {207 System.out.println("table " + tableNum + " out of opening hours");208 }209 }210 boolean checkTime(){211 if(year<1000||month<1||month>12||day<0||day>mon_maxnum[month]||hour<1||hour>24||minute<0||minute>60||second<0||second>60){212 return false;213 }else {214 return true;215 }216 }217 boolean checkTimeRange(){218 if(year<2022||year>2023){219 return false;220 }else {221 return true;222 }223 }224 public int getWeek() {225 return week;226 }227 }228 class Order {229 private Listrecords = new ArrayList<>(); //保存订单上每一道的记录230 int totalPrice;231 int tableNum;232 Menu menu = new Menu();233 int getTotalPrice(){234 for(Record record : records){235 totalPrice = record.getPrice()+totalPrice;236 }237 return totalPrice;238 }//计算订单的总价239 240 Record addARecord(int orderNum,String dishName,int portion,int num){241 Record record = new Record(orderNum,num,portion);242 record.d.setName(dishName);243 records.add(record);244 return record;245 }//添加一条菜品信息到订单中。246 247 void delARecordByOrderNum(int orderNum){248 for(Record record : records){249 if(record.getOrderNum() == orderNum){250 records.remove(record);251 }252 }253 }//根据序号删除一条记录254 255 Record findRecordByNum(int orderNum){256 for(Record record : records){257 if(record.getOrderNum() == orderNum){258 return record;259 }260 }261 return null;262 }//根据序号查找一条记录263 264 public int getTableNum() {265 return tableNum;266 }267 268 public void setRecords(ArrayList records) {269 this.records = records;270 }271 272 public void setTableNum(int tableNum) {273 this.tableNum = tableNum;274 }275 276 public List getRecords() {277 return records;278 }279 280 public void setMenu(Menu menu) {281 this.menu = menu;282 } 在各个类中我设置了各个类数组,有用Arreylist数组可以简单的实现添加删除功能,以及对输入的时间处理时用的时间类LocalDate处理得到星期数,对时间的处理,和对价格的具体处理则这里不进行赘述请观察代码。
最后我们对题目在进一步深入剖解,发现我们这道题可以一个个输出,及每输入一个内容就输出一个结果,因为每个部分正好切合,感觉是出题老师的降低难度,不然应该是保存每一个输入再进行输出,这里由于我想着简单点所以就使用一个个输出,代码请观察上面的循环输入代码。
这题的算法并不难,主要考察的是我们对题目的剖析能力,能不能理解题目的意思以及考虑全面,对各个情况的分析,这道题由于自己过于放松导致时间不足只拿到了36分,并没有实现带点菜功能和部分异常情况使得我有点后悔,因为在后面看来这道题目的难度真的不是做不出来的地步,主要是自己不愿意花时间不说满分,但是80分肯定是可以拿到的。
三 踩坑心得
这里对题目集五的7-5和7-6题不进行说明,因为主要是对类结构的更改,并没有出现错误。
题目集六7-1:
1 出现空指针的情况:
进行相关错误查找发现是在设置menu类的数组时发现menu类中的dish数组有时并没有设置,即为空,这里我就把使用arrylist数组改为使用正常数组
更改前:
1 public static class Menu { 2 private ArrayListdishs = new ArrayList<>();//菜品数组,保存所有菜品信息 3 4 Dish searthDish(String dishName){ 5 for(Dish dish : dishs){ 6 if(dish.getName() == dishName){ 7 return dish; 8 } 9 }10 return null;11 }//根据菜名在菜谱中查找菜品信息,返回Dish对象。12 13 Dish addDish(String dishName,int unit_price){14 for(Dish dish : dishs){15 if(dish.getName() == dishName){16 dish.setUnit_price(unit_price);17 }18 return dish;19 }20 Dish dish = new Dish(dishName,unit_price);21 dishs.add(dish);22 return dish;23 }//添加一道菜品信息24 } 更改后:
1 class Menu { 2 Dish[] dishs = new Dish[10];//菜品数组,保存所有菜品信息 3 int count = 0; 4 Dish searthDish(String dishName){ 5 Dish temd = null; 6 for(int i=count-1;i>=0;i--){ 7 if(dishName.equals(dishs[i].name)){ 8 temd = dishs[i]; 9 break;10 }11 }12 if(temd==null){13 System.out.println(dishName+" does not exist");14 }15 return temd;16 }//根据菜名在菜谱中查找菜品信息,返回Dish对象。17 Dish addDish(String dishName,int unit_price){18 Dish dh = new Dish();19 dh.name = dishName;20 dh.unit_price = unit_price;21 count++;22 return dh;23 }//添加一道菜品信息24 }2 计算的算法出现错误
经过测试计算每个桌的价格都是错的,对代码查看,发现是我在得出价格的方法里直接乘以了折扣,但是特色菜的折扣不一样,所以应该在循环中进行折扣的计算而不是在table类里直接乘以折扣
更改前的价格计算:
1 void Gettottalprice(){2 if(discount>0){3 System.out.println("table " + tableNum + ": " + this.order.getTotalPrice()+" "+ Math.round(sum*discount));4 }else {5 System.out.println("table " + tableNum + " out of opening hours");6 }7 }更改后的价格计算:
1 if (a2 >= 1 && a2 <= 3 && a3 > 0 && a3 <= 15) { 2 Dish otherDish = menu.searthDish(dishName); 3 if (otherDish != null) { 4 table[a4].order.addARecord(a1, dishName, a2, a3); 5 table[a4].order.findRecordByNum(a1).d = otherDish; 6 a7 = table[a4].order.findRecordByNum(a1).getPrice(); 7 if (table[a4].order.findRecordByNum(a1).d.flag == -1) { 8 float k = a7 * table[a4].discount; 9 int t = Math.round(k);10 table[a4].sum += t;11 } else {12 if (table[a4].week <= 5 && table[a4].week >= 1) {13 float v = a7 * 0.7f;14 table[a4].sum += Math.round(v);15 } else if (table[a4].week == 6 || table[a4].week == 7) {16 table[a4].sum += a7;17 }18 }四 改进建议
对于题目集五的两道题,我的算法过于简单导致代码行数冗杂,可以对算法部分进行更改使代码量减少。对于题目集六的这道题,我的主函数里的代码过多,应该使用MVC模式进行更改使主函数里不这么复杂,且应该使用存储输入的方式进行输出,这样更加高效且错误率低。
五 总结
对于本三次题目集,我学会了对正则表达式的使用,学会了对类结构进一步认识,对聚合的使用。最重要的是体会到了不要对一道看起来难的题目放弃,只要逐渐剖析付出时间这道难题也会解决,在日后的学习中我要不能这么容易退缩,对于题目要多付出时间,来解决相应问题。
关键词:
PTA题目集4~6总结
全球热点评!详细的BoltDB学习记录文档
看点:OO题目集4-6总结
金融类都有什么-金融类都有什么专业 天天即时看
“五一”迎来客流高峰 各部门全力保障旅客出行
蔚来五一换电量创历史新高 车主高速薅免费电池4万块_世界今日报
《王者荣耀》妲己九尾“收割”女玩家:实体手办1199元
苹果树桃树缓控修剪新技术_关于苹果树桃树缓控修剪新技术的简介 环球微动态
宁波地铁全天免费坐 五一延长1小时 有站点人流暴涨200%|世界快看
今年的五一“疯”了吗?网友:走不动 根本走不动
太科幻!比亚迪深圳云巴开通:全自动运行、刷脸进站、无感支付
AMD Yes!一文了解锐龙Z1处理器:为掌机而生 天天热头条
天天热头条丨让AI画“边打游戏边吃意面” AI毅然让玩家啃了手柄
要闻速递:性能_1 Jmeter脚本编写
《饥荒联机版》在线人数破纪录 Steam史低只要4.8元
评论区被疯狂玩梗 抖音网红女骑手:何必恶语相对
通讯!经典超烂游戏《Ancient Roman》引热议 日本4成女性居然都知道
环球关注:亚美尼亚飞一航空:未预先通知,土耳其对其关闭了领空
stable-diffusion-webui 环境设置过程记录 每日速读
苏宁易购一季度亏损1亿元:大幅减亏90% 核心家电3C业务盈利 全球微速讯
快讯:景区回应“上厕所要花55元买门票”:园外无公厕
直线过抛物线焦点公式(抛物线焦点公式)-环球关注
九年不屈!贾跃亭的FF 91量产下线 FF:工艺品质媲美豪华车制造商
探索“研学+”模式助力乡村振兴 张家港乐余镇启动乡村研学旅游季 当前最新
世界焦点!关于Linux操作系统使用lastlog命令对OS账号最后一次登录时间的审计
【世界独家】如何彻底关闭 Windows 10 自动更新
AITO问界卖的多亏得多?赛力斯:2022年净亏损超38亿元
微软690亿美元收购案被阻 动视暴雪CEO:必须合并才能跟腾讯、字节竞争|焦点滚动
西湖边最美人墙2.0版来了:为大家出行保驾护航_报资讯
视讯!中欧班列(武汉)连续4个月单月开行百列以上 同比增长近200%
赵长江:清华经管EMBA校友 一次下单超过20台腾势D9 动态
玩家建议微软推出自己的掌机:性能和XSS一样就行
你知道吗?火星上有22个中国地名:西柏坡、古田、窑店等
电影《长空之王》票房破2亿 王一博肩膀出血也不吭声:被赞爷们气 天天热闻
【全球热闻】襄阳公安这场推进会透出妥妥“安全感”
商务部:“五一”假期首日消费市场大幅升温
天天要闻:鲁绣、丝绸织染等山东非遗“炫技”海南
焦点快报!这价格疯了!24寸显示器仅279元:还是三微边设计
让《灌篮高手》电影被喷的“三渲二”技术 可以做到多牛X?_报道
CPU处理器价格越来越贵 笔记本除外:大跌9% 全球观热点
环球今热点:五一旅游闹心 115元买4.6斤水果少一斤后续:情况属实 顶格处罚
1999元起卖爆!Redmi Note 12 Turbo首销月三个销量第一:打破行业记录|全球快资讯
.Net Core Console&Cache 当前动态
共赴数字之约 描绘数字未来
当前观察:RTX 4070为何会破发?背后原因揭开
热门看点:ChatGPT一炮而红 OpenAI再度融资:估值已达2000亿
冲击30℃!五一假期北方多地开启升温模式 南方降雨在路上 世界今亮点
聊聊拍照那些事:五一外出你更喜欢用相机还是手机?_每日速读
越级影像旗舰真我11即将发布 realme徐起:五一大家休息 节后爆猛料|全球即时看
全球微资讯!“五一”档10余部新片集中上映
住客称入住网红酒店发现死尸打1星“差评” 涉事酒店回应_微头条
每日热讯!外观大变 首增插混!全新广汽本田雅阁开启11元盲订
曝Redmi K60 Ultra下半年登场:天玑9200+加持 安卓CPU性能之王
比NAS更好用!华为家庭存储便宜了:2699元起 最大16TB 环球热讯
两款《古墓丽影》游戏将登陆Switch!跟着劳拉去破坏“文物”
学系统集成项目管理工程师(中项)系列15_质量管理 世界视讯
热门5G手机市占率排名:华为P40 Pro国产机第一 5G平分天下 天天观速讯
承认车辆侧面碰撞试验“造假” 丰田章男道歉:我们错了
世界实时:五一2.4亿人次出游 酒店民宿价格5-7倍上涨 经济日报:违约应赔偿
离离原上谱!求职者:6000工资太高 只要2000可以吗?|世界时快讯
五一假期首日服务区充电站排队时长榜来了:充电要等2.7小时你接受吗?
驻村故事(逐梦)
【全球聚看点】好评率近100%!Redmi Note 12 Turbo把竞品甩在后面:1TB版太受欢迎
Markdown表格-换行、合并单元格
消息!关于方正证券的一些信息
《死或生:女神假期》新女神艾米登场:身材出众的18岁研究生 焦点要闻
超大额优惠券手慢无:植贝名朵防晒小光圈到手19.9元/瓶
聚焦产业建圈强链 成都市温江区举行校地合作交流会
【焦点热闻】退市三板行情_退市三板股票代码
启动“三年共富行动计划”,以“三拼”之势打造“六个乾潭”|微动态
蓝牙为啥叫“蓝”牙?就不能叫白牙吗?-全球微速讯
高速上44辆车被扎胎!初查结果:系货车铁屑散落
PC玩家很受伤!今年翻车的大作太多了
世界快看点丨【模板方法设计模式详解】C/Java/JS/Go/Python/TS不同语言实现
全球观热点:工程建设的范围是什么_工程建设的范围
海底捞一门店睡满人导致无法用餐:全是“特种兵”式大学生
[0基础学R语言] 软件下载与环境配置_天天热点
焦点!15 设备类型与设备驱动
万物皆有灵下一句是什么_万物皆有灵 全球百事通
每日快看:对标《原神》!《王者荣耀世界》新实机画面:蓝BUFF化身寒冰之王
Uzi老对手官宣转型!LOL“欧成”Rekkles改打辅助
快资讯丨苏教版二年级上册数学期中试卷含答案_苏教版二年级上册数学期中试卷
当前动态:4999元 荣耀MagicBook 14 GT版上架:RTX 2050独显
世界短讯!USB:终于一统江湖
视频会议的免费时代:宣告结束了 环球观热点
环球新动态:世界第八大奇迹!放假第一天兵马俑游客突破五万人:秦俑打上了保湿抗皱针
世界资讯:ssti注入
简讯:椰子怎么喝 椰子怎么喝最好
《角斗士》旧情人欣然返场
主机用质量模式玩《星球大战绝地》更好?起码可稳30帧 全球热门
MySQL常用数据库语句 天天观天下
穿小椰子怎么搭配衣服 穿小椰子鞋如何搭配_全球今日讯
最新:男子服务区买15元汉堡只有2片面包 老板:你不要我退钱
九号平衡车L8奥特曼定制版发布:首发1799元 可触发彩蛋
赛力斯2022年营收翻倍:问界M5/M7立大功
当前滚动:xss-labs靶场
男人对你说子非鱼是什么意思_子非鱼是什么意思
飞利浦推出新款24.5寸游戏显示器:280Hz高刷、0.5ms极速响应|全球观速讯
速读:14 进程的等待与唤醒机制
【环球新视野】基于python实现将AWS-ElastiCache-的Reserved_Cache_Nodes-预留节点及费用的信息统计