1)前言
第一次作业:7-1主要是从控制台输入问题,和嵌套循环。7-2的要点是数据的精确度,严格的输出。7-3是数组的调用,循环的使用。7-4要点在与if和else的使用和标准的输入和输出。7-5主要是switch方法的使用7-6主要是substring的调用和字符串长度的判断length()和.equals()的使用7-7主要是精确度的问题,一个容错double·error·=·1E-7;循环嵌套的问题。7-8要点是if和else的使用以及Math.abs的使(Math.abs(lastGuessnextGuess)>=1E-5)。7-9考察对输入数据(字符串)的分析substring(0,end)和charAt(i)和contains("-1")和indexOf("-1")方法的使用。
第二次作业:7-1,7-2考察了类和对象的使用,类的声明和对象的创建,数组列表的使用(private static List<Record> records = new ArrayList<>();//保存订单上每一道的记录),(int·orderNum·=·Integer.parseInt(lineArray[0]);)不同数据类型的转换,类类型的方法,this的使用,Math方法的使用(Math.round((unit_price·*·b[portion·-·1]));),split("·");方法的使用,7-3考察了Date类的相关用法,以及判断是否是闰月的逻辑,split("\\-");的相关用法,.调用parseDate方法解析第一行日期字符串,调用parseDate方法解析开始日期和结束日期字符串,调用Java 8中的ChronoUnit类的静态方法between计算开始日期和结束日期相差的天数、月数、年数,并输出结果,7-4考察快读快写,和数据类型的转换(int orderNum = Integer.parseInt(lineArray[0]);)和split("·");方法的调用。
第三次作业:7-1要点是异常类,SimpleDateFormat类,time类中的Instant类和LocalDateTime类,ZoneI类getHour()和getMinute()和Math.round(sum*0.8)和time.getDayOfWeek()和LocalDateTime.ofInstant(instant, zone)方法Date类。7-2考察哈希表,7-3考察Set·<Integer>·hs·=new·LinkedHashSet<>();7-4考察字符串列表,和正则表达式,和排序方法。7-5要点是对数据进行封装,7-6要点是输出的格式标准化,7-7考察Scanner类中nextLine()等方法、String类中split()等方法、Integer类中parseInt()等方法的用法,了解LocalDate类中of()、isAfter()、isBefore()、until()等方法的使用规则,了解ChronoUnit类中DAYS、WEEKS、MONTHS等单位的用法。
三次题目集总体题目量还算比较正常,题量和难度成反比,在日期的相关方法的调用比较难,以及数组列表的使用上有难度,以及各个类之间的相互调用,有难度。除了菜单系列的题目集还算简单的。
2)
设计与分析:
第一次作业
二进制数值提取:
首先判断输入,将其用split()进行分隔,利用if和else判断是否字符为-1,是即为结束
三角形类型:
首先得分析是否是三角形,如果是再判断直角关系和两边是否相等的关系将三角形的范畴压缩,再判断是否是等腰直角三角形,和等边即可。这里在判断三角形采用if和else时,需注意,return.
第二次作业
jmu-java-日期类的基本使用分析:
首先可以通过split方法将日期分隔为时分秒,然后根据年来判断是否是闰年,日期是否合法可以采用日历类来写。也可以通过Date类来写代码
小明走格子时分析:
import java.io.*; public class Main{ public static void main(String[] args)throws IOException{ BufferedReader re = new BufferedReader(new InputStreamReader(System.in)); StreamTokenizer r = new StreamTokenizer(re); StreamTokenizer r1 = new StreamTokenizer(re); r.nextToken();int m = (int)r.nval; int line[]=new int[m]; int sum[]=new int[32]; for(int j = 0;j< m;j++) { r1.nextToken(); line[j] = (int)r1.nval; } for(int i = 0;i<32;i++) { if(i==0) sum[i] = 1; else if(i==1) sum[i] = 2; else if(i==2) sum[i] = 4; else if(i==3) sum[i] = 8; else sum[i] = sum[i-1]+sum[i-2]+sum[i-3]+sum[i-4]; } for(int j = 0;j<m;j++) { System.out.println(sum[line[j]-1]); } } }
可以通过递归来写,但是经过实操发现运行超时,只能通过动态规划来写,然后数据的输入使用快读快写继续减少运行时间。
心得:可以通过多种方法来写代码,但是符合要求的可能需要更加充足的知识储备了。
第三次作业:
7-1,7-2都是利用哈希表对重复数据的处理,在面对数据输入效率上使用快读快写。
7-3中利用正则表达式将字符串分析后利用排序算法实现功能7-4对成员进行封装。普通成员方法:提供setXxx和getXxx方法。(注意:setAge()方法中需要对年龄进行判定)
菜单程序设计-1设计:有以下四个类菜品类:Dish对应菜谱上一道菜的信息,有计算菜品价格的方法int getPrice(int portion),有菜品名,单价两个数据成员,Menu菜谱类:对应菜谱,包含饭店提供的所有菜的信息。存在查找菜品信息的方法Dish searthDish(String dishName),Dish[] dishs ;//菜品数组,保存所有菜品信息;Record点菜记录类:保存订单上的一道菜品记录,有int getPrice()//计价,计算本条记录的价格方法订单类:Order保存用户点的所有菜的信息。int getTotalPrice()//计算订单的总价,Record addARecord(String dishName,int portion)的方法,根据所输入的订单计算出价格。
解释与心得:第一次代码还算简单,不需要太多的只是,只需要掌握基本类的相互调用即可利用类来调用各个个对象,可以让意思更为明确,订单中创建了菜品的相关数据,将点餐数据存储与记录实现。
菜单程序设计-2设计:任然创建了dish,menu,record,order,四个类,但是在Dish类中怎加了Dish addDish(String dishName,int unit_price)//添加一道菜品信息方法 Order类增加了delARecordByOrderNum(int orderNum)//根据序号删除一条记录 findRecordByNum(int orderNum)//根据序号查找一条记录提供记录的增删,让记录更加完备。心得:通过增加,减少订单,顾客可以在后续的点餐中更为的方便。还要考虑输出如果订单中包含不能识别的菜名,则输出“** does not exist”,**是不能识别的菜名如果删除记录的序号不存在,则输出“delete error”最后输出订单上所有菜品的总价(整数数值)。
菜单程序设计-3设计再原来基础上怎加了带点菜信息,代点菜信息包含:桌号 序号 菜品名称 份额 分数代点菜是当前桌为另外一桌点菜,信息中的桌号是另一桌的桌号,带点菜的价格计算在当前这一桌。还怎加了折扣时间段,周一至周五营业时间与折扣:晚上(17:00-20:30)8折,周一至周五中午(10:30--14:30)6折,其余时间不营业。周末全价,营业时间:9:30-21:30订单分:桌号标识、点菜记录和删除信息、代点菜信息。
分析:通过输入的时间段,可以判定该时间段是否营业,是否打折,先通过 SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd HH/mm/ss");将时间规范化,将营业时间的判断写成一个方法boolean isOpen()(需要调用时间类和date类方法)来调用。tables[table_count].od(menu,menu_count,str1,str2,portion,quota);用该方法对删除后桌号的修改。
for(i=0;i<table_count;i++) { if(tables[i].isOpen()) { System.out.println("table "+(i+1)+": "+tables[i].sum); } else System.out.println("table " + (i+1)+ " out of opening hours"); }
诸多代码实现输出格式的标准化。
增加订单
for(i=0;i<menu_count;i++){ if(menu.dishs[i].name.equals(str1)){menu.dishs[i].unit_price=Integer.parseInt(str2); flag++; break; } } if(flag==0){menu.dishs[menu_count] = new Dish(); menu.dishs[menu_count] = menu.addDish(str1,Integer.parseInt(str2)); menu_count++; } flag=0;
心得:这次的难度比前两次要难得多,首先在判断输入时间段是否符合折扣段有难度,再删减订单时,排号也要进行相应的改变。在实现帮他人点单时,计算价格也要发生相应的改变。也变得复杂了。
3)采坑心得
在第一次作业7-2,7-4时输出没有进行强制转换,导致代码一直无法通过测试 ,应该System.out.print((float)(quality2)+" "+(float)(length2));
·System.out.print((float)deedTax+"·"+(float)stampTax+"·"+(float)transactionFee+"·"+(float)mappFee);
在7-6
if(studentNum.length()!=8||(!college.equals("01")&&!college.equals("02")&&!college.equals("03")&&!college.equals("20"))) { System.out.println("Wrong Format"); return; }
没有加return,一直答案错误。在7-7中没有进行误差的判断导致精度出现了问题(应补充·double·error·=·1E-7;)
在第二次作业:
菜单第一次在增加订单的时候出现了不懂的地方
public Record addARecord(String dishName, int portion) { Menu menu = new Menu(); Dish dish = menu.searchDish(dishName); if (dish == null) { System.out.println(dishName + " does not exist"); return null; } Record record = new Record(dish, portion); records[count++] = record; return record; }
每每运行一直报错。
7-4中使用scanner输入一直运行超时,在使用下述才得以解决
BufferedReader·re·=·new·BufferedReader(new·InputStreamReader(System.in));
StreamTokenizer·r·=·new·StreamTokenizer(re);
········StreamTokenizer·r1·=·new·StreamTokenizer(re);
········r.nextToken();int·m·=·(int)r
4)主要困难以及改进建议
我发现自己在理解题意时有时候会出现偏差,导致最终的编码结果与题目要求不符。其次,我在编码时有时候会出现逻辑错误,导致程序无法正常运行。最后,我发现自己在处理一些复杂的算法时,会出现思路不清晰的情况,导致编码效率低下。
例如:在面对小明走格子这一个问题中,当时并没有第一时间想到使用快读,快写,和动态规划。
为了改进这些问题,我认为可以采取以下措施。首先,我需要更加仔细地阅读题目,理解题意,确保自己对题目的理解与要求一致。其次,我需要更加仔细地审查自己的代码,避免逻辑错误的出现。最后,我需要更加深入地学习一些复杂的算法,加强自己的编码能力。
5)总结
在完成本阶段的三次题目集后,我深刻地认识到了编程的重要性和必要性。首先要掌握最简单if,else,循环的使用,了解一些特殊类的相关方法的使用。通过这些题目的编程实践,我不仅掌握了基本的编程语法和算法,也提升了自己的逻辑思维和解决问题的能力。同时,我也发现了自己在编程过程中的不足之处,需要进一步学习和研究。
首先,我认为需要进一步学习和研究的是算法和数据结构方面的知识。在完成题目集的过程中,我发现自己对于一些复杂的算法和数据结构的理解还不够深入,需要加强学习和练习。其次,我也需要更加熟练地掌握编程语言的使用,特别是一些常用的库和框架的使用。
对于教师、课程、作业、实验、课上及课下组织方式等方面的改进建议及意见,我认为可以从以下几个方面进行改进。首先,可以增加一些实际应用场景的案例,帮助学生更好地理解和掌握编程知识。其次,可以加强编程实践的环节,让学生更多地进行实际的编程练习。最后,可以增加一些与编程相关的讨论和交流活动,促进学生之间的交流和合作
标签:总结性,调用,int,菜品,Blog,oop,使用,new,方法 From: https://www.cnblogs.com/lycbk6/p/17429654.html