是这份爱赞美诗歌曲_是这份爱 环球速看料
1、圣经里面好像没有。2、《是这份爱》是这份爱,主你走向十架,是这份情,主你甘愿舍命,是这份爱,主你默
从本次题目集开始,正式开始了菜单类设计,并熟悉了字符串各常用语法的运用,及运用封装性进行面向对象编程。七道题目,菜单3难度稍高,其他中等。
本次题目集集中训练了正则表达式,以及日期问题的面向对象聚合设计。总体难度不大,题量也只有六道,不多,主要是熟悉正则的用法以及如何实现聚合。
(资料图片仅供参考)
在这次题目集中仅一道菜单类题目,是题目集四菜单类的再次迭代,虽然题目量少,但相较于其他题目集花费时间却更多,题目代码量更多,类与类之间的设计也更加复杂难以下手。
1、题目
(1) 题目集4-1
(2) 题目集6-1
2、分析:
题目集4-1是菜单类题目的第三次迭代,刚开始的时候,由于没有写过菜单1和菜单2,看到这么长的题目还是挺手足无措的,不知道从哪里开始下手,总是会有一点逃避心理的,再加上在题目集3中并不是只有这一道题目,一开始就先打算完成其他题目再来慢慢写,没想到在其他题目上也被卡了很久,导致最后在设计分析这道题的时候,时间也不多了,类间关系混乱,很多地方都没有考虑到,最后也没有写完。
在编写本次blog时,是已经经历过题目集6-1的菜单4了,现在一对比菜单4,菜单3的条件等等都相对非常简化版本的了,现在反思当时的小小逃避心理真的是非常后悔的(欠下的债总是要还的),而由于当时的我对于菜单3并没有好好的分析,使我在菜单4的更复杂的题目中花费了大量时间来抽离主干、分析设计。
由上面的图片可以看到,菜单类设计主要是分为两个板块,一个是输入菜谱,一个是输入订单,而菜单4则比菜单3增加了十几条异常情况判断和一种功能增加。在菜单类的设计中,我也在和同学讨论如何改进菜单各个情况的处理的过程中收获了许多。
(1) 比如说菜单4的输入格式等方面判断,一开始我使用的是字符串输入,split分割成字符串数组再来一一判断,但是这样就会漏掉比如多个空格等错误情况,后来在交流中,发现可以用正则表达来判断会更加全面;
原来的:
改进后:
(2) 还有格式错误这些小细节,在写代码中,输出基本是自己按照题目去写格式,由于各个地方的判断输出都比较多,输入时不可能所有的内容直接复制格式在一起输入,那么一些小细节的地方就会完全发现不了,比如:
在这里的冒号后面其实是有一个空格的,但是如果是自己对照着一个个写格式,这里是绝对不会发现不了还有一个空格,这个点也是我在同学的提醒下才发现的。
(3)在菜单类4中,由于异常判断较多,时常会出现各种问题。比如在这里判断后,是直接输出吗,还是要延迟输出;是先判断这个,还是先判断哪个等等,由于我的各个方法是在对应的类中实现,并不能说是非常直观的在代码中看到功能以及效果,导致了许多混乱,后来在与同学的复盘中也提到了,说我的代码看起来就像在不停的打补丁一样,这里缺了一点就补一下,那里缺了一点再补一下,程序结构非常混乱,PTA的提交分数也是飘忽不定,这是需要改正的。
关于菜单的类与类的设计,现在最后的版本相比较于最初的想法基本上可以说是毫不相干了,在逐渐完成代码的时候,一步步加上各种功能,发现现在的类不能满足需求,又重新设计,添加上新的类,不断修改修改,在这次题目集中,确实是感觉到自己成长了许多。
对于本次题目集中的菜单类问题,后期发现确实是在算法上没有什么难点,在我看来它更多地是在考验逻辑思维,细心程度,分析解决问题能力以及和同学伙伴间的交流能力,而不是要自己闭门造车。
最后的类图如下:
设计了Dish菜品类,Menu菜谱类,TableNumberIdentification桌号类,Record单条点菜记录类,Order单条订单类,BlanketOrder总订单类。Menu -> Dish,BlanketOrder ->Order ->Record和TableNumberIdentification。
数据分析如下:
这两道题是在上次总结中也有写过的日期问题的两种不同的聚合关系的写法,虽然大体上算法大差不差,但是在类的结构,内容上随着类间关系的变化也是导致代码产生了许多变化。
类图如下:
(1) 题目集5-5
(2) 题目集5-6
在5-5中,是按照中介 -> 年 -> 月 -> 日的聚合方式,是一级比一级要大的,而在5-6中,则是中介 -> 年,月,日的聚合方式,在中介的下面,年月日是同样的地位,这是两种聚合的主要不同。那么随着变化,类内的方法和属性肯定也是不同的。
这两道题难度都不大,我认为主要是想让我们熟悉并运用聚合关系。
最后代码如下:
(1) 题目集5-5
import java.util.Scanner;import java.util.regex.Matcher;import java.util.regex.Pattern;public class Main { public static void main(String[] args) { Scanner in = new Scanner(System.in); int choice = in.nextInt(); if(choice == 1){//求下n天 int y = in.nextInt(); int m = in.nextInt(); int d = in.nextInt(); DateUtil dateUtil = new DateUtil(y,m,d); int n = in.nextInt(); if (!dateUtil.checkInputValidity() || n < 0) { System.out.println("Wrong Format"); System.exit(0); } dateUtil.getNextDays(n); System.out.println(dateUtil.showDate()); } else if(choice == 2){//求前n天 int y = in.nextInt(); int m = in.nextInt(); int d = in.nextInt(); DateUtil dateUtil = new DateUtil(y,m,d); int n = in.nextInt(); if (!dateUtil.checkInputValidity() || n < 0) { System.out.println("Wrong Format"); System.exit(0); } dateUtil.getPreviousDays(n); System.out.println(dateUtil.showDate()); } else if(choice == 3){//求相差天数 int y = in.nextInt(); int m = in.nextInt(); int d = in.nextInt(); DateUtil dateUtil1 = new DateUtil(y,m,d); int yy = in.nextInt(); int mm = in.nextInt(); int dd = in.nextInt(); DateUtil dateUtil2 = new DateUtil(yy,mm,dd); if (!dateUtil1.checkInputValidity() || !dateUtil2.checkInputValidity()) { System.out.println("Wrong Format"); System.exit(0); } System.out.println(dateUtil1.getDaysofDates(dateUtil2)); } else { System.out.println("Wrong Format"); System.exit(0); } }}class Year{//年 private int value; public Year(){ } public Year(int value){ this.value = value; } public void setValue(int value) { this.value = value; } public int getValue() { return value; } public boolean isLeapYear(){//判断闰年 if(value % 400 == 0 || (value % 100 != 0 && value % 4 == 0)) return true; return false; } public boolean validate(){//判断输入是否合法 if(value >= 1900 && value <= 2050) return true; return false; } public void yearIncrement(){ value ++; } public void yearReduction(){ value --; }}class Month{ private int value; private Year year; public Month(){ } public Month(int yearValue,int monthValue){ this.value = monthValue; year = new Year(yearValue); } public void setValue(int value) { this.value = value; } public int getValue() { return value; } public void setYear(Year year) { this.year = year; } public Year getYear() { return year; } public void resetMin() { value = 1; } public void resetMax() { value = 12; } public boolean validate(){//判断输入是否合法 if(value >= 1 && value <= 12) return true; return false; } public void monthIncrement(){ value ++; } public void monthReduction(){ value --; }}class Day{ private int value; private Month month; private int[] mon_maxnum = {31,28,31,30,31,30,31,31,30,31,30,31}; public Day(){ } public Day(int yearValue,int monthValue,int dayValue){ this.value = dayValue; month = new Month(yearValue,monthValue); } public void setValue(int value) { this.value = value; } public int getValue() { return value; } public void setMonth(Month month) { this.month = month; } public Month getMonth() { return month; } public void resetMin() { value = 1; } public void resetMax() { value = mon_maxnum[month.getValue()]; } public boolean validate(){//判断输入是否合法 if(month.getYear().isLeapYear() && month.getValue() == 2){ if(value >= 1 && value <= 29) return true; } if(value >= 1 && value <= mon_maxnum[month.getValue() - 1]) return true; return false; } public void dayIncrement(){ value ++; } public void dayReduction(){ value --; }}class DateUtil{ private Day day; public DateUtil(){ } public DateUtil(int y,int m,int d) { day = new Day(y,m,d); } public Day getDay() { return day; } public void setDay(Day d) { this.day = day; } public boolean checkInputValidity(){ if(day.getMonth().getYear().validate()) if(day.getMonth().validate()) if(day.validate()) return true; return false; } public boolean compareDates(DateUtil date){//比较大小 if(day.getMonth().getYear().getValue() < date.getDay().getMonth().getYear().getValue()) return true;//年小 if(day.getMonth().getYear().getValue() == date.getDay().getMonth().getYear().getValue()) if(day.getMonth().getValue() < date.getDay().getMonth().getValue()) return true;//年等,月小 if(day.getMonth().getYear().getValue() == date.getDay().getMonth().getYear().getValue()) if(day.getMonth().getValue() == date.getDay().getMonth().getValue()) if(day.getValue() <= date.getDay().getValue()) return true;//年等月等,日小 return false; } public boolean equalTwoDates(DateUtil date){//比较是否相等 if(day.getMonth().getYear().getValue() == date.getDay().getMonth().getYear().getValue()) if(day.getMonth().getValue() == date.getDay().getMonth().getValue()) if(day.getValue() == date.getDay().getValue()) return true;//年等月等日等 return false; } public String showDate(){//格式化日期 return day.getMonth().getYear().getValue() + "-" + day.getMonth().getValue() + "-" + day.getValue(); } public DateUtil getNextDays(int n){//求下n天 Day temp; long num = 0; int YearNum = 365; if(day.getMonth().getYear().isLeapYear()) YearNum = 366; for(int i = 0;i < day.getMonth().getValue() - 1;i ++){ temp = new Day(0,0,0);//设立一个新的Day类,用来累加 temp.getMonth().setValue(i);//把当前要加上的月份赋给他 temp.resetMax();//把本月的最大天数赋值 if(day.getMonth().getYear().isLeapYear() && i == 1) num = num + temp.getValue() + 1; else num += temp.getValue(); } num += day.getValue(); num += n; //跨年了,有可能跨了不止一年 while(num > YearNum){ day.getMonth().getYear().yearIncrement();//年份加一 num -= YearNum; if(day.getMonth().getYear().isLeapYear()) YearNum = 366; else YearNum = 365; } day.setValue(0); day.getMonth().setValue(1); int i = 0; temp = new Day(0,0,31); while(num > temp.getValue()){ if(day.getMonth().getYear().isLeapYear() && i == 1)//闰年的二月 num = num - temp.getValue() - 1; else num-= temp.getValue(); temp.getMonth().monthIncrement(); day.getMonth().monthIncrement(); i ++; temp.getMonth().setValue(i); temp.resetMax(); } day.setValue((int)num); return this; } public DateUtil getPreviousDays(int n){//求前n天 Day temp; long num = 0; int YearNum = 365; if(day.getMonth().getYear().isLeapYear()) YearNum = 366; for(int i = 0;i < day.getMonth().getValue() - 1;i ++){ temp = new Day(0,0,0);//设立一个新的Day类,用来累加 temp.getMonth().setValue(i);//把当前要加上的月份赋给他 temp.resetMax();//把本月的最大天数赋值 if(day.getMonth().getYear().isLeapYear() && i == 1) num = num + temp.getValue() + 1; else num += temp.getValue(); } num += day.getValue(); num -= n; //跨年了,有可能跨了不止一年 while(num <= 0){ day.getMonth().getYear().yearReduction();//年份减一 if(day.getMonth().getYear().isLeapYear()) YearNum = 366; else YearNum = 365; num += YearNum; } day.setValue(0); day.getMonth().setValue(1); int i = 0; temp = new Day(0,0,31); while(num > temp.getValue()){ num -= temp.getValue(); temp.getMonth().monthIncrement(); day.getMonth().monthIncrement(); i ++; temp.getMonth().setValue(i); temp.resetMax(); if(day.getMonth().getYear().isLeapYear() && i == 1)//闰年的二月 temp.setValue(29); } day.setValue((int)num); return this; } public int getDaysofDates(DateUtil date){//求相差天数 int yearMin,yearMax; int numMin = 0,numMax = 0; Day temp,dayMax,dayMin; int YearNum = 365; if(day.getMonth().getYear().isLeapYear()) YearNum = 366; if(this.compareDates(date)) {//this <= date yearMax = date.getDay().getMonth().getYear().getValue(); yearMin = this.getDay().getMonth().getYear().getValue(); dayMax = new Day(date.getDay().getMonth().getYear().getValue(),date.getDay().getMonth().getValue(),date.getDay().getValue()); dayMin = new Day(day.getMonth().getYear().getValue(),day.getMonth().getValue(),day.getValue()); } else{ yearMax = this.getDay().getMonth().getYear().getValue(); yearMin = date.getDay().getMonth().getYear().getValue(); dayMax = new Day(day.getMonth().getYear().getValue(),day.getMonth().getValue(),day.getValue()); dayMin = new Day(date.getDay().getMonth().getYear().getValue(),date.getDay().getMonth().getValue(),date.getDay().getValue()); } //以小的年份为基准,用大的来-- //计算小的年份在本年的天数 for(int i = 0;i < dayMin.getMonth().getValue() - 1;i ++){ temp = new Day(0,0,0);//设立一个新的Day类,用来累加 temp.getMonth().setValue(i);//把当前要加上的月份赋给他 temp.resetMax();//把本月的最大天数赋值 if(dayMin.getMonth().getYear().isLeapYear() && i == 1) numMin = numMin + temp.getValue() + 1; else numMin += temp.getValue(); } numMin += dayMin.getValue(); //计算大的年份在本年的天数 for(int i = 0;i < dayMax.getMonth().getValue() - 1;i ++){ temp = new Day(0,0,0);//设立一个新的Day类,用来累加 temp.getMonth().setValue(i);//把当前要加上的月份赋给他 temp.resetMax();//把本月的最大天数赋值 if(dayMax.getMonth().getYear().isLeapYear() && i == 1) numMax = numMax + temp.getValue() + 1; else numMax += temp.getValue(); } numMax += dayMax.getValue(); //再加上差的每一年的天数 while(yearMin != yearMax){ yearMax --; if((yearMax % 400 == 0)||(yearMax % 100 != 0 && yearMax % 4 == 0)) numMax += 366; else numMax += 365; } numMax -= numMin; return numMax; }}
(2) 5-6
import java.util.Scanner;import java.util.regex.Matcher;import java.util.regex.Pattern;public class Main { public static void main(String[] args) { Scanner in = new Scanner(System.in); int choice = in.nextInt(); if(choice == 1){//求下n天 int y = in.nextInt(); int m = in.nextInt(); int d = in.nextInt(); DateUtil dateUtil = new DateUtil(y,m,d); int n = in.nextInt(); if (!dateUtil.checkInputValidity() || n < 0) { System.out.println("Wrong Format"); System.exit(0); } System.out.print(dateUtil.showDate() + " next " + n + " days is:"); dateUtil.getNextDays(n); System.out.println(dateUtil.showDate()); } else if(choice == 2){//求前n天 int y = in.nextInt(); int m = in.nextInt(); int d = in.nextInt(); DateUtil dateUtil = new DateUtil(y,m,d); int n = in.nextInt(); if (!dateUtil.checkInputValidity() || n < 0) { System.out.println("Wrong Format"); System.exit(0); } System.out.print(dateUtil.showDate() + " previous " + n + " days is:"); dateUtil.getPreviousDays(n); System.out.println(dateUtil.showDate()); } else if(choice == 3){//求相差天数 int y = in.nextInt(); int m = in.nextInt(); int d = in.nextInt(); DateUtil dateUtil1 = new DateUtil(y,m,d); int yy = in.nextInt(); int mm = in.nextInt(); int dd = in.nextInt(); DateUtil dateUtil2 = new DateUtil(yy,mm,dd); if (!dateUtil1.checkInputValidity() || !dateUtil2.checkInputValidity()) { System.out.println("Wrong Format"); System.exit(0); } System.out.print("The days between " + dateUtil1.showDate() + " and " + dateUtil2.showDate() + " are:"); System.out.println(dateUtil1.getDaysofDates(dateUtil2)); } else { System.out.println("Wrong Format"); System.exit(0); } }}class Year{//年 private int value; public Year(){ } public Year(int value){ this.value = value; } public void setValue(int value) { this.value = value; } public int getValue() { return value; } public boolean isLeapYear(){//判断闰年 if(value % 400 == 0 || (value % 100 != 0 && value % 4 == 0)) return true; return false; } public boolean validate(){//判断输入是否合法 if(value >= 1820 && value <= 2020) return true; return false; } public void yearIncrement(){ value ++; } public void yearReduction(){ value --; }}class Month{ private int value; public Month(){ } public Month(int value){ this.value = value; } public void setValue(int value) { this.value = value; } public int getValue() { return value; } public void resetMin() { value = 1; } public void resetMax() { value = 12; } public boolean validate(){//判断输入是否合法 if(value >= 1 && value <= 12) return true; return false; } public void monthIncrement(){ value ++; } public void monthReduction(){ value --; }}class Day{ private int value; public Day(){ } public Day(int value){ this.value = value; } public void setValue(int value) { this.value = value; } public int getValue() { return value; } public void dayIncrement(){ value ++; } public void dayReduction(){ value --; }}class DateUtil{ private Day day; private Month month; private Year year; private int[] mon_maxnum = {31,28,31,30,31,30,31,31,30,31,30,31}; public DateUtil(){ } public DateUtil(int y,int m,int d) { day = new Day(d); month = new Month(m); year = new Year(y); } public Day getDay() { return day; } public void setDay(Day d) { this.day = d; } public Month getMonth() { return month; } public void setMonth(Month month) { this.month = month; } public Year getYear() { return year; } public void setYear(Year year) { this.year = year; } public void setDayMax(){ //if(month.getValue() >= 1) day.setValue(mon_maxnum[month.getValue()]); } public void setDayMin(){ day.setValue(1); } public boolean checkInputValidity(){ int d; if(year.validate()) if(month.validate()){ d = mon_maxnum[month.getValue() - 1]; if(day.getValue() >= 1 && day.getValue() <= d) return true; } return false; } public boolean compareDates(DateUtil date){//比较大小 if(year.getValue() < date.getYear().getValue()) return true;//年小 if(year.getValue() == date.getYear().getValue()) if(month.getValue() < date.getMonth().getValue()) return true;//年等,月小 if(year.getValue() == date.getYear().getValue()) if(month.getValue() == date.getMonth().getValue()) if(day.getValue() <= date.getDay().getValue()) return true;//年等月等,日小 return false; } public boolean equalTwoDates(DateUtil date){//比较是否相等 if(year.getValue() == date.getYear().getValue()) if(month.getValue() == date.getMonth().getValue()) if(day.getValue() == date.getDay().getValue()) return true;//年等月等日等 return false; } public String showDate(){//格式化日期 return year.getValue() + "-" + month.getValue() + "-" + day.getValue(); } public DateUtil getNextDays(int n){//求下n天 DateUtil temp = new DateUtil(0,0,0);//设立一个新的Day类,用来累加; long num = 0; int YearNum = 365; if(year.isLeapYear()) YearNum = 366; for(int i = 0;i < month.getValue() - 1;i ++){ temp.getMonth().setValue(i);//把当前要加上的月份赋给他 temp.setDayMax();//把本月的最大天数赋值 if(year.isLeapYear() && i == 1) num = num + temp.getDay().getValue() + 1; else num += temp.getDay().getValue(); } num += day.getValue(); num += n; //跨年了,有可能跨了不止一年 while(num > YearNum){ year.yearIncrement();//年份加一 num -= YearNum; if(year.isLeapYear()) YearNum = 366; else YearNum = 365; } day.setValue(0); month.setValue(1); int i = 0; temp = new DateUtil(0,0,31); while(num > temp.getDay().getValue()){ if(year.isLeapYear() && i == 1)//闰年的二月 num = num - temp.getDay().getValue() - 1; else num -= temp.getDay().getValue(); temp.getMonth().monthIncrement(); month.monthIncrement(); i ++; temp.getMonth().setValue(i); temp.setDayMax(); } day.setValue((int)num); return this; } public DateUtil getPreviousDays(int n){//求前n天 DateUtil temp = new DateUtil(0,0,0);//设立一个新的Day类,用来累加; long num = 0; int YearNum = 365; if(year.isLeapYear()) YearNum = 366; for(int i = 0;i < month.getValue() - 1;i ++){ temp.getMonth().setValue(i);//把当前要加上的月份赋给他 temp.setDayMax();//把本月的最大天数赋值 if(year.isLeapYear() && i == 1) num = num + temp.getDay().getValue() + 1; else num += temp.getDay().getValue(); } num += day.getValue(); num -= n; //跨年了,有可能跨了不止一年 while(num <= 0){ year.yearReduction();//年份减一 if(year.isLeapYear()) YearNum = 366; else YearNum = 365; num += YearNum; } day.setValue(0); month.setValue(1); int i = 0; temp = new DateUtil(0,0,31); while(num > temp.getDay().getValue()){ num -= temp.getDay().getValue(); temp.getMonth().monthIncrement(); month.monthIncrement(); i ++; temp.getMonth().setValue(i); temp.setDayMax(); if(year.isLeapYear() && i == 1)//闰年的二月 temp.getDay().setValue(29); } day.setValue((int)num); return this; } public int getDaysofDates(DateUtil date){//求相差天数 int yearMin,yearMax; long numMin = 0,numMax = 0; DateUtil temp,dayMax,dayMin; int YearNum = 365; if(year.isLeapYear()) YearNum = 366; if(this.compareDates(date)) {//this <= date yearMax = date.getYear().getValue(); yearMin = this.getYear().getValue(); dayMax = new DateUtil(date.getYear().getValue(),date.getMonth().getValue(),date.getDay().getValue()); dayMin = new DateUtil(year.getValue(),month.getValue(),day.getValue()); } else { yearMax = this.getYear().getValue(); yearMin = date.getYear().getValue(); dayMax = new DateUtil(year.getValue(),month.getValue(),day.getValue()); dayMin = new DateUtil(date.getYear().getValue(), date.getMonth().getValue(), date.getDay().getValue()); } //以小的年份为基准,用大的来-- //计算小的年份在本年的天数 for(int i = 0;i < dayMin.getMonth().getValue() - 1;i ++){ temp = new DateUtil(0,0,0);//设立一个新的Day类,用来累加 temp.getMonth().setValue(i);//把当前要加上的月份赋给他 temp.setDayMax();//把本月的最大天数赋值 if(year.isLeapYear() && i == 1) numMin = numMin + temp.getDay().getValue() + 1; else numMin += temp.getDay().getValue(); } numMin += dayMin.getDay().getValue(); //计算大的年份在本年的天数 for(int i = 0;i < dayMax.getMonth().getValue() - 1;i ++){ temp = new DateUtil(0,0,0);//设立一个新的Day类,用来累加 temp.getMonth().setValue(i);//把当前要加上的月份赋给他 temp.setDayMax();//把本月的最大天数赋值 if(year.isLeapYear() && i == 1) numMax = numMax + temp.getDay().getValue() + 1; else numMax += temp.getDay().getValue(); } numMax += dayMax.getDay().getValue(); //再加上差的每一年的天数 while(yearMin != yearMax){ yearMax --; if((yearMax % 400 == 0)||(yearMax % 100 != 0 && yearMax % 4 == 0)) numMax += 366; else numMax += 365; } numMax -= numMin; return (int)numMax; }}
这道题几个错误都是运行超时导致的,在修改中发现将x的定义挪出循环外后有一个点的运行超时就通过了,仔细分析发现应该是一直定义不断增加占据空间的同时拖慢了运行速度,还是一些基础不牢固导致的,这种错误是不应该出现的,要多多注意。
本题在题目集三中出现过类似题目,在一开始写的时候我原本也是按照之前的思路进行设计,但在提交后发现总是会运行超时。
尝试改变算法(增加改变判断条件),改变元素的储存方式(ArrayList)之类的,都一直还是超时,后来在和同学的的讨论中不断尝试,最后用到了LinkedHashSet才终于通过。
在本题中主要踩的坑是由于对于 split() 这个语法点的学习不够全面,知识没有掌握到位,split的()内当多个条件出现时,是有顺序的判断,从前往后,判断符合了第一个,就会跳过已经判读的字符,开始下一轮判断。
由于知识学习的不全面,导致只能在不断地测试试错中发现正确的用法,我认为这是非常需要改进的。而在试错的同时,也没有仔细分析错误的可能和与同学讨论可能原因,只是盲目的测试,也浪费了许多不必要的时间。
最后代码如下:
import java.util.Arrays;import java.util.ArrayList;import java.util.Scanner;public class Main { public static void main(String[] args) { String ch; Scanner in = new Scanner(System.in); String s = in.nextLine(); String[] str = s.split("\\. |\\, |\\.|\\ "); int strLon = str.length; int i,j; Arrays.sort(str,String.CASE_INSENSITIVE_ORDER);//所有的元素按字母序排序 for(i = strLon - 1;i >= 1;i --){//按字数排序 for(j = i - 1;j >= 0;j --){ if(str[i].length() <= str[j].length()){ ch = str[i]; str[i] = str[j]; str[j] = ch; } } } ArrayListnewStr = new ArrayList<>(); for(i = strLon - 2;i >= 0;i --){ if(!str[i + 1].equals(str[i])) newStr.add(str[i]); } int newStrLon = newStr.size(); System.out.println(str[strLon - 1]); for(i = 0;i < newStrLon;i ++){ System.out.println(newStr.get(i)); } }}
(1)菜单类题目:在上面分析中我也曾提到过,写代码和打补丁一样,哪里缺了补哪里,当时是由于连题目都完成不了,就也没想那么多,把要修正的直接写上去了,发现时也来不及又修改又继续往下写了。这给了我很大的教训,这种代码编写想法是需要在以后改正的。
(2) 代码的各种小问题在这几次的题目集中我也是经常犯。比如在循环里每次重定义一个数,使题目大大增加运行时间;循环判断true/false写反了;题目阅读不仔细,出错了才反应过来等等。
(1) 对于知识学习的不全面:如上面所说的 split 的用法由于了解不全面,导致一直出错。还有循环里的重定义,这也是对知识的掌握不全面导致的。
(2) 细节问题总是出错:像格式错误,读题不仔细这种,确实是不应该犯的错误。
(3) 对于题目条件间的逻辑:这个在菜单类题目中体现得非常明显,没有总体的意识,看一步走一步的,非常容易使自己逻辑混乱,一步错步步错的。以后要从类图开始着手,整理好类间逻辑再开始。
如果可以的话,希望以后可以开放题目集的补集。就是和原题目集一样的题目,但是成绩不参与平时成绩的计算。我觉得开放补集,可以在学习到了更多知识,有了更好的对于题目的想法和想要改进之前的算法的时候对于各种想法正确与否进行验证,只是与以往程序对照可能会出现疏漏。
关键词:
1、圣经里面好像没有。2、《是这份爱》是这份爱,主你走向十架,是这份情,主你甘愿舍命,是这份爱,主你默
《蜘蛛侠:纵横宇宙》前作《蜘蛛侠:平行宇宙》被《帝国》杂志评选为“史上最佳动画电影之一”。3D和2D画面
直播吧4月30日讯掘金今天125-107击败太阳,大比分1-0领先,赛后主帅马龙接受了采访。谈到对手,马龙表示:
1、对群主的尊称。2、表示敬仰的意思!如群主大大好!群主大大辛苦了!。本文到此分享完毕,希望对大家有所
记者从省应急管理厅获悉,自2022年12月1日进入森林草原防火期以来,云南省坚持“预防为主、积极消灭”的工
5月券商金股组合陆续更新中。截至目前,已经有开源证券、东北证券、国联证券、东吴证券、中泰证券、国信证
据证券之星公开数据整理,近期*ST和佳(300273)发布2023年一季报。根据财报显示,本报告期中*ST和佳净利润
1、[tʃəːtʃ]音似撤起。本文到此分享完毕,希望对你有所帮助。
美妆行业正在发生巨变,国货在市场竞技中正占得越来越多的席位,无论是科技力还是营销力均已到达崭新的
新华社北京4月29日电(记者任沁沁)记者29日从公安部交管局获悉,甘肃省酒泉市金塔县肃航一级公路天仓连接
1、《星梦缘》剧中饰演林思彤的内地演员陈彦妃发微博宣布大婚喜讯。2、并在微博里写道:“这位大厨,腿毛已
红网时刻张家界4月29日讯(通讯员梁炎周娟)为进一步推动企业落实食品安全“两个责任”机制主体责任,维护
新华社合肥4月29日电(记者何曦悦)“肠道生病了找医生,城市下水管道堵塞了可以找我们的‘城市管道医生’
西畴县气象台2023年4月29日20时05分发布雷电黄色预警信号:预计未来6小时,我县西洒镇、蚌谷乡、莲花塘乡等
1、安徽职业技术学院是安徽省高职专科院校中比较优秀的学校,学校整体生源素质和学习氛围要选好于其他学校
门诊管理细则,门诊管理制度和流程这个很多人还不知道,现在让我们一起来看看吧!1、一、本口腔诊所实行主任
今天来聊聊关于在北纬70度以上的地方夏季太阳辐射最强的地方是,在北纬70度以上的地方的文章,现在就为大家
重磅消息!前海楼市迎来大变局……,新盘,桂湾,妈湾,写字楼,前海楼市,住宅用地,前海深港现代服务业合作区
4月28日晚,在江苏南京建邺区清泽园小区,一男子在与人发生纠纷后从23楼往下扔家电,所幸未砸到人。29日,
1、做骨盆相关的运动可以有以下效果:1。2、可以起到相关的塑造作用。3、这种活动可以使腰骶部的曲线更加完
根据近期国际市场油价变化情况和国家发改委调价信息,按照现行成品油价格形成机制,自2023年4月28日24时起
今天来聊聊关于中国统计网上直报门户,中国统计联网直报门户的文章,现在就为大家来简单介绍下中国统计网上
据大公报报导,2009年上映的《超能风暴》以香港为故事背景,带领观众穿梭于香港狭窄后街、干货市集及空间极
1、奥迪Q7,宝马X5,奔驰GL。2、路虎发现,福特探险者,别克昂克雷。3、沃尔沃XC90,XC60,道奇酷威。4、丰
IT之家4月29日消息,小米今日推出了小米柔风空调大1匹,并同步开启新品预售,定价2599元。需要注意的是,IT