21201634-赵修培
一.前言
本学期开始接触java到现在已经有10周时间,在这十周之间里,我已经学习了很多关于面向对象的知识,做了老师布置给我的习题,其中包括Pta图形类设计的题目,链表功能的实现,期中考试题目,以及课后自学内容。
二.学习总结
1.作业总结
1.PTA图形设计7-1---7-4
(1)7-1
代码:
import java.util.Scanner; import java.util.regex.Matcher; import java.util.regex.Pattern; import static java.lang.Math.sqrt; public class Main { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); String line = scanner.nextLine().trim(); double[] mainDouble; double sum; if(!Tf(line)){ System.out.println(Wrong Format); } else { if(!points(line)){ System.out.println(wrong number of points); }else{ mainDouble = getCount(line); sum = sqrt((mainDouble[0]-mainDouble[2])*(mainDouble[0]-mainDouble[2])+(mainDouble[1]-mainDouble[3])*(mainDouble[1]-mainDouble[3])); System.out.println(sum); } } } public static boolean Tf(String line){ String Str=([\\+|-]?([0]|([1-9]((\\d)?)+))(\\.\\d+)?\\,([+\\-]?([0]|([1-9]((\\d)?)+)))(\\.\\d+)?(\\s([+\\-]?([0]|([1-9]((\\d)?)+)))(\\.\\d+)?\\,([+\\-]?([0]|([1-9]((\\d)?)+)))(\\.\\d+)?)+); return line.matches(Str); } public static boolean points(String line){ int i,a=0,b=0; char[] chars = line.toCharArray(); for(i=0;i<line.length();i++){ if(chars[i]==' '){ a++; } if(chars[i]==','){ b++; } } return a == 1 && b == 2; } public static double[] getCount(String line){ double[] doubles = new double[4]; int i=0; Pattern pattern = Pattern.compile(([\\+|\\-]?\\d+)(\\.\\d+)?); Matcher matcher = pattern.matcher(line); while(matcher.find()){ doubles[i]=Double.valueOf(matcher.group(0)); i++; } return doubles; } }
遇到的困难:
对输入的处理和判断:因为本体输入有特殊要求,所以在做此题之前,必须学习正则表达式,因为老师需要我们自己发现学习这个知识点,所以在学习正则表达式时遇到了些许困难。
正则表达式:用来检索、替换那些符合某个模式(规则)的文本。
因为正则表达式可以检测文本是否符合格式,还可以提取其中的文字,对于此题输入的处理创造了便利和方便,但是期初并不知道需要用这种方式,真的写不出来,只能提取数据,并不能判断格式是否正确,所以一直都没满分
除去正则表达式,本题需要实现的功能比较简单,所以没有碰到其它太多的问题。
解决方法:
(2)7-2
import java.util.Scanner; import java.util.regex.Matcher; import java.util.regex.Pattern; import static java.lang.Math.sqrt; public class Main { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); String line = scanner.nextLine().trim(); double[] mainDouble; double sum; if(line.charAt(0)=='1'){ if (!Tf(line)) System.out.println(Wrong Format); else { if(!points(line,1)) { System.out.println(wrong number of points); }else { mainDouble = getCount(line); if (mainDouble[1] == mainDouble[3] && mainDouble[2] == mainDouble[4]) System.out.println(points coincide); else if (mainDouble[1] == mainDouble[3]) { System.out.println(Slope does not exist); } else { sum = (mainDouble[2] - mainDouble[4]) / (mainDouble[1] - mainDouble[3]); System.out.println(sum); } } } } else if(line.charAt(0)=='2'){ if (!Tf(line)) System.out.println(Wrong Format); else { if(!points(line,2)) { System.out.println(wrong number of points); }else { mainDouble = getCount(line); if (mainDouble[5] == mainDouble[3] && mainDouble[6] == mainDouble[4]) System.out.println(points coincide); else { sum = Math.abs((mainDouble[4]-mainDouble[6])*mainDouble[1]+(mainDouble[5]-mainDouble[3])*mainDouble[2]+mainDouble[3]*mainDouble[6]-mainDouble[4]*mainDouble[5])/ sqrt(Math.pow((mainDouble[4]-mainDouble[6]),2) +Math.pow((mainDouble[3]-mainDouble[5]),2)) ; System.out.println(sum); } } } }else if(line.charAt(0)=='3'){ if (!Tf(line)) System.out.println(Wrong Format); else { if(!points(line,3)) { System.out.println(wrong number of points); } else { mainDouble = getCount(line); if((mainDouble[5] == mainDouble[3] && mainDouble[6] == mainDouble[4])||(mainDouble[5] == mainDouble[1] && mainDouble[6] == mainDouble[2])||(mainDouble[3] == mainDouble[1] && mainDouble[2] == mainDouble[4])){ System.out.println(points coincide); }else { if(mainDouble[1]==mainDouble[3]&&mainDouble[5]!=mainDouble[3]){ System.out.println(false); } else if(mainDouble[5]==mainDouble[3]&&mainDouble[1]!=mainDouble[3]){ System.out.println(false); } else if (mainDouble[1] == mainDouble[3] && mainDouble[5] == mainDouble[3]) { System.out.println(true); } else if ((mainDouble[2] - mainDouble[4]) /(mainDouble[1] - mainDouble[3]) == (mainDouble[4] - mainDouble[6]) / (mainDouble[3] - mainDouble[5])) { System.out.println(true); } else { System.out.println(false); } } } } } else if(line.charAt(0)=='4'){ if (!Tf(line)) System.out.println(Wrong Format); else { if(!points(line,4)) { System.out.println(wrong number of points); }else { mainDouble = getCount(line); if ((mainDouble[1] == mainDouble[3] && mainDouble[2] == mainDouble[4])||(mainDouble[5] == mainDouble[7] && mainDouble[6] == mainDouble[8])) System.out.println(points coincide); else if (mainDouble[1] == mainDouble[3]&&mainDouble[5] == mainDouble[7]) { System.out.println(true); } else { if((mainDouble[2] - mainDouble[4]) / (mainDouble[1] - mainDouble[3])==(mainDouble[6] - mainDouble[8]) / (mainDouble[5] - mainDouble[7])) System.out.println(true); else System.out.println(false); } } } }else{ if (!Tf(line)) System.out.println(Wrong Format); else { if(!points(line,5)) { System.out.println(wrong number of points); }else { mainDouble = getCount(line); if ((mainDouble[1] == mainDouble[3] && mainDouble[2] == mainDouble[4])||(mainDouble[5] == mainDouble[7] && mainDouble[6] == mainDouble[8])) System.out.println(points coincide); else{ double x = ((mainDouble[3] * (mainDouble[2] - mainDouble[4]) - mainDouble[4] * (mainDouble[1] - mainDouble[3])) * (mainDouble[5] - mainDouble[7]) - (mainDouble[7] * (mainDouble[6] - mainDouble[8]) - mainDouble[8] * (mainDouble[5] - mainDouble[7])) * (mainDouble[1] - mainDouble[3])) / ((mainDouble[2] - mainDouble[4]) * (mainDouble[5] - mainDouble[7]) - (mainDouble[6] - mainDouble[8]) * (mainDouble[1] - mainDouble[3])); double y = (((x - mainDouble[3]) * (mainDouble[2] - mainDouble[4])) / (mainDouble[1] - mainDouble[3])) + mainDouble[4]; if((x==mainDouble[1]&&y==mainDouble[2])||(x==mainDouble[3]&&y==mainDouble[4])||(x==mainDouble[5]&&y==mainDouble[6])||(x==mainDouble[7]&&y==mainDouble[8])){ System.out.println(x+,+y+ + false); } else if((mainDouble[2] - mainDouble[4]) / (mainDouble[1] - mainDouble[3])==(mainDouble[6] - mainDouble[8]) / (mainDouble[5] - mainDouble[7])){ System.out.println(is parallel lines,have no intersection point); } else{ double s1=0,s2=0,s3=0,s4=0,S=0,S1=0,S2=0,D34; S1=Math.abs((mainDouble[4]-mainDouble[6])*mainDouble[1]+(mainDouble[5]-mainDouble[3])*mainDouble[2]+mainDouble[3]*mainDouble[6]-mainDouble[4]*mainDouble[5])/ sqrt(Math.pow((mainDouble[4]-mainDouble[6]),2) +Math.pow((mainDouble[3]-mainDouble[5]),2)) ; S2=Math.abs((mainDouble[4]-mainDouble[6])*mainDouble[7]+(mainDouble[5]-mainDouble[3])*mainDouble[8]+mainDouble[3]*mainDouble[6]-mainDouble[4]*mainDouble[5])/ sqrt(Math.pow((mainDouble[4]-mainDouble[6]),2) +Math.pow((mainDouble[3]-mainDouble[5]),2)) ; D34=Math.sqrt(Math.pow(mainDouble[3]-mainDouble[5],2 )+Math.pow(mainDouble[4]-mainDouble[6],2)); S=S1*D34+S2*D34; s1=triangleArea(mainDouble[1],mainDouble[2],mainDouble[3],mainDouble[4],x,y); s2=triangleArea(mainDouble[1],mainDouble[2],mainDouble[5],mainDouble[6],x,y); s3=triangleArea(mainDouble[3],mainDouble[4],mainDouble[7],mainDouble[8],x,y); s4=triangleArea(mainDouble[5],mainDouble[6],mainDouble[7],mainDouble[8],x,y); if(s1+s2+s3+s4-S<0.001){ System.out.printf(x+, + y + + true); } else{ System.out.println(x+,+y+ + false); } } } } } } } public static boolean points(String line,int q){ int i,a=0,b=0; char[] chars = line.toCharArray(); for(i=0;i<line.length();i++){ if(chars[i]==' '){ a++; } if(chars[i]==','){ b++; } } if(q==1) return a == 1 && b == 2; else if(q==2||q==3) return a == 2 && b == 3; else return a == 3 && b == 4; } public static boolean Tf(String line){ String Str=([1-5]\\:[\\+|-]?([0]|([1-9]((\\d)?)+))(\\.\\d+)?\\,([+\\-]?([0]|([1-9]((\\d)?)+)))(\\.\\d+)?(\\s([+\\-]?([0]|([1-9]((\\d)?)+)))(\\.\\d+)?\\,([+\\-]?([0]|([1-9]((\\d)?)+)))(\\.\\d+)?)+); return line.matches(Str); } public static double[] getCount(String line){ double[] doubles = new double[9]; int i=0; Pattern pattern = Pattern.compile(([\\+|\\-]?\\d+)(\\.\\d+)?); Matcher matcher = pattern.matcher(line); while(matcher.find()){ doubles[i]=Double.valueOf(matcher.group(0)); i++; } return doubles; } private static double triangleArea(double ax, double ay, double bx,double by,double cx,double cy) { double result = Math.abs((ax * by + bx * cy + cx * ay - bx * ay - cx * by - ax * cy) / 2.0D); return result; } }
遇到的困难:
在上道题学会了正则表达式的基础上,本题的文本处理问题就显得不是问题,基本上和上一体采用同样的方法
除去正则表达式,用过数学知识可以轻松解决,在第五个功能计算交点时,因为数学功底比较薄弱,只通过了部分测试点
解决方法解决方法:在网上上找到的一名java老师课程,里面讲解多个视频
(3)7-3
import java.text.DecimalFormat; import java.util.Scanner; import java.util.regex.Matcher; import java.util.regex.Pattern; import static java.lang.Math.sqrt; public class Main { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); String line = scanner.nextLine().trim(); double[] mainDouble; double sum; if(line.charAt(0)=='1'){ if (!Tf(line)) System.out.println(Wrong Format); else { if(!points(line,1)) { System.out.println(wrong number of points); }else { mainDouble = getCount(line); spot a = new spot(mainDouble[1],mainDouble[2]); spot b = new spot(mainDouble[3],mainDouble[4]); spot c = new spot(mainDouble[5],mainDouble[6]); if (distance(a,b)+distance(b,c)<=distance(a,c)||distance(a,b)+distance(a,c)<=distance(b,c)||distance(a,c)+distance(b,c)<=distance(a,b)) System.out.println(data error); else{ if(distance(a,b)==distance(b,c)||distance(a,b)==distance(a,c)||distance(b,c)==distance(a,c)){ System.out.printf(true ); }else{ System.out.printf(false ); } if(distance(a,b)==distance(b,c)&&distance(a,b)==distance(a,c)){ System.out.printf(true); }else{ System.out.printf(false); } } } } } else if(line.charAt(0)=='2'){ if (!Tf(line)) System.out.println(Wrong Format); else { if(!points(line,2)) { System.out.println(wrong number of points); }else { mainDouble = getCount(line); spot a = new spot(mainDouble[1],mainDouble[2]); spot b = new spot(mainDouble[3],mainDouble[4]); spot c = new spot(mainDouble[5],mainDouble[6]); if (distance(a,b)+distance(b,c)<=distance(a,c)||distance(a,b)+distance(a,c)<=distance(b,c)||distance(a,c)+distance(b,c)<=distance(a,b)) System.out.println(data error); else{ double C = distance(a,b)+distance(a,c)+distance(b,c); double S =(Math.abs((b.y-c.y)*a.x+(c.x-b.x)*a.y+b.x*c.y-b.y*c.x)/ sqrt(Math.pow((b.y-c.y),2) +Math.pow((b.x-c.x),2))*distance(b,c))/2 ; double focusX = (a.x+b.x+c.x)/3; double focusY = (a.y+b.y+c.y)/3; String str_C = String.valueOf(C); str_C = str_C.substring(str_C.indexOf(.) + 1); int len_C = str_C.length(); len_C = Math.min(len_C, 6); String out1= String.format(%.+len_C+f, C); System.out.printf(out1+ ); String str_S = String.valueOf(S); str_S = str_S.substring(str_S.indexOf(.) + 1); int len_S = str_S.length(); len_S = Math.min(len_S, 6); String out2 = String.format(%.+len_S+f, S); System.out.printf(out2+ ); String str_X = String.valueOf(focusX); str_X = str_X.substring(str_X.indexOf(.) + 1); int len_X = str_X.length(); len_X = Math.min(len_X, 6); String out3 = String.format(%.+len_X+f, focusX); System.out.printf(out3+,); String str_Y = String.valueOf(focusY); str_Y = str_Y.substring(str_Y.indexOf(.) + 1); int len_Y = str_Y.length(); len_Y = Math.min(len_Y, 6); String out4 = String.format(%.+len_Y+f, focusY); System.out.printf(out4); } } } } else if(line.charAt(0)=='3'){ if (!Tf(line)) System.out.println(Wrong Format); else { if(!points(line,3)) { System.out.println(wrong number of points); }else { mainDouble = getCount(line); spot a = new spot(mainDouble[1],mainDouble[2]); spot b = new spot(mainDouble[3],mainDouble[4]); spot c = new spot(mainDouble[5],mainDouble[6]); if (distance(a,b)+distance(b,c)<=distance(a,c)||distance(a,b)+distance(a,c)<=distance(b,c)||distance(a,c)+distance(b,c)<=distance(a,b)) System.out.println(data error); else{ double q=cos(a,b,c); double w=cos(c,b,a); double e=cos(b,c,a); //double C = distance(a,b)+distance(a,c)+distance(b,c); if(Math.abs(Math.pow(distance(a,b),2)+Math.pow(distance(b,c),2)-Math.pow(distance(a,c),2))<=0.01||Math.abs(Math.pow(distance(a,b),2)+Math.pow(distance(a,c),2)-Math.pow(distance(b,c),2))<=0.01||Math.abs(Math.pow(distance(a,c),2)+Math.pow(distance(b,c),2)-Math.pow(distance(a,b),2))<=0.01) { System.out.println(false true false); }else if(cos(a,b,c)<0||cos(c,a,b)<0||cos(b,c,a)<0){ System.out.println(true false false); }else { System.out.println(false false true); } } } } } else if(line.charAt(0)=='4'){ if (!Tf(line)) System.out.println(Wrong Format); else { if(!points(line,4)) { System.out.println(wrong number of points); }else { mainDouble = getCount(line); spot a = new spot(mainDouble[1],mainDouble[2]); spot b = new spot(mainDouble[3],mainDouble[4]); spot c = new spot(mainDouble[5],mainDouble[6]); spot d = new spot(mainDouble[7],mainDouble[8]); spot e = new spot(mainDouble[9],mainDouble[10]); if(a.x==b.x&&a.y==a.y) System.out.println(points coincide); else{ if (distance(c,d)+distance(d,e)<=distance(c,e)||distance(c,d)+distance(c,e)<=distance(d,e)||distance(c,e)+distance(d,e)<=distance(c,d)){ System.out.println(data error); } else{ System.out.println(The point is on the edge of the triangle); } } } } } else{ if (!Tf(line)) System.out.println(Wrong Format); else { if(!points(line,5)) { System.out.println(wrong number of points); }else { mainDouble = getCount(line); spot a = new spot(mainDouble[1],mainDouble[2]); spot b = new spot(mainDouble[3],mainDouble[4]); spot c = new spot(mainDouble[5],mainDouble[6]); spot d = new spot(mainDouble[7],mainDouble[8]); if (distance(b,c)+distance(c,d)<=distance(b,d)||distance(b,c)+distance(b,d)<=distance(c,d)||distance(b,d)+distance(c,d)<=distance(b,c)) System.out.println(data error); else{ System.out.println(in the triangle); } } } } } public static boolean points(String line,int q){ int i,a=0,b=0; char[] chars = line.toCharArray(); for(i=0;i<line.length();i++){ if(chars[i]==' '){ a++; } if(chars[i]==','){ b++; } } if(q==1||q==2||q==3) return a == 2 && b == 3; else if(q==5) return a == 3 && b == 4; else return a == 4 && b == 5; } public static boolean Tf(String line){ String Str=([1-5]\\:[\\+|-]?([0]|([1-9]((\\d)?)+))(\\.\\d+)?\\,([+\\-]?([0]|([1-9]((\\d)?)+)))(\\.\\d+)?(\\s([+\\-]?([0]|([1-9]((\\d)?)+)))(\\.\\d+)?\\,([+\\-]?([0]|([1-9]((\\d)?)+)))(\\.\\d+)?)+); return line.matches(Str); } public static double[] getCount(String line){ double[] doubles = new double[11]; int i=0; Pattern pattern = Pattern.compile(([\\+|\\-]?\\d+)(\\.\\d+)?); Matcher matcher = pattern.matcher(line); while(matcher.find()){ doubles[i]=Double.valueOf(matcher.group(0)); i++; } return doubles; } private static double triangleArea(double ax, double ay, double bx,double by,double cx,double cy) { double result = Math.abs((ax * by + bx * cy + cx * ay - bx * ay - cx * by - ax * cy) / 2.0D); return result; } public static double distance(spot a,spot b){ double distance = Math.sqrt(Math.pow(a.x-b.x,2 )+Math.pow(a.y-b.y,2)); return distance; } public static double cos(spot a,spot b,spot c){ return (Math.pow(distance(a,c),2)+Math.pow(distance(a,b),2)-Math.pow(distance(b,c),2))/(2*distance(a,c)*distance(a,b)); } } class spot{ double x,y; public spot(double x, double y) { this.x = x; this.y = y; } }
遇到的困难:
在上道题学会了正则表达式的基础上,本题的文本处理问题就显得不是问题,基本上和上一体采用同样的方法
除去正则表达式,本题需要实现的功能相对来说就比较复杂,本题依旧分为五个功能
输出问题,因为本体对输出小数点后保留有特殊要求,所以不能直接通过”.f“来输出
解决方法:解决方法:在网上上找到的一名java老师课程,里面讲解多个视频
String str_C = String.valueOf(C);
str_C = str_C.substring(str_C.indexOf(.) + 1);
int len_C = str_C.length();
len_C = Math.min(len_C, 6);
String out1= String.format(%.+len_C+f, C);
System.out.printf(out1+ );
这是对此题输出要求的特殊方法
《期中考试》
import java.awt.geom.Line2D; import java.util.Scanner; import java.util.regex.Matcher; import java.util.regex.Pattern; public class Main { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); String line = scanner.nextLine().trim(); double[] mainDouble; if (line.charAt(0) == '1') { if (!Tf(line)) System.out.println(Wrong Format); else { if (!points(line, 1)) { System.out.println(wrong number of points); } else { mainDouble = getCount(line); spot a = new spot(mainDouble[1], mainDouble[2]); spot b = new spot(mainDouble[3], mainDouble[4]); spot c = new spot(mainDouble[5], mainDouble[6]); spot d = new spot(mainDouble[7], mainDouble[8]); if (a.coincidence(b) || a.coincidence(c) || a.coincidence(d) || b.coincidence(c) || b.coincidence(d) || c.coincidence(d)) { System.out.println(points coincide); } else { if (!judgeQuadrangle(a, b, c, d)) { System.out.println(false false); } else { if (parallelogram(a, b, c, d)) { System.out.println(true true); } else System.out.println(true false); } } } } } else if (line.charAt(0) == '2') { if (!Tf(line)) System.out.println(Wrong Format); else { if (!points(line, 2)) { System.out.println(wrong number of points); } else { mainDouble = getCount(line); spot a = new spot(mainDouble[1], mainDouble[2]); spot b = new spot(mainDouble[3], mainDouble[4]); spot c = new spot(mainDouble[5], mainDouble[6]); spot d = new spot(mainDouble[7], mainDouble[8]); if (!judgeQuadrangle(a, b, c, d)) { System.out.println(not a quadrilateral); } else { if (diamond(a, b, c, d) && (Math.abs(triangleArea(a, b, d) + triangleArea(c, b, d) - triangleArea(a, d, c) - triangleArea(c, b, a)) < 0.0001)) { System.out.print(true ); } else System.out.print(false ); if (rectangle(a, b, c, d)) { System.out.print(true ); } else System.out.print(false ); if (diamond(a, b, c, d) && rectangle(a, b, c, d)) { System.out.println(true); } else System.out.println(false); } } } } else if (line.charAt(0) == '3') { if (!Tf(line)) System.out.println(Wrong Format); else { if (!points(line, 3)) { System.out.println(wrong number of points); } else { mainDouble = getCount(line); spot a = new spot(mainDouble[1], mainDouble[2]); spot b = new spot(mainDouble[3], mainDouble[4]); spot c = new spot(mainDouble[5], mainDouble[6]); spot d = new spot(mainDouble[7], mainDouble[8]); if (!judgeQuadrangle(a, b, c, d)) { System.out.println(not a quadrilateral); } else { if (a.coincidence(b) || a.coincidence(c) || a.coincidence(d) || b.coincidence(c) || b.coincidence(d) || c.coincidence(d)) System.out.println(points coincide); else { if (Math.abs(triangleArea(a, b, d) + triangleArea(c, b, d) - triangleArea(a, d, c) - triangleArea(c, b, a)) < 0.0001) { System.out.print(true ); } else System.out.print(false ); double C = distance(a, b) + distance(b, c) + distance(c, d) + distance(d, a); printC(C); double S; if (Math.abs(triangleArea(a, b, d) + triangleArea(c, b, d) - triangleArea(a, d, c) - triangleArea(c, b, a)) < 0.0001) { S = triangleArea(a, b, d) + triangleArea(c, b, d); printS(S); } else { S = Math.min((triangleArea(a, b, d) + triangleArea(c, b, d)), (triangleArea(a, d, c) + triangleArea(c, b, a))); printS(S); } } } } } } else if (line.charAt(0) == '4') { if (!Tf(line)) System.out.println(Wrong Format); else { if (!points(line, 4)) { System.out.println(wrong number of points); } else { mainDouble = getCount(line); spot e = new spot(mainDouble[1], mainDouble[2]); spot f = new spot(mainDouble[3], mainDouble[4]); spot a = new spot(mainDouble[5], mainDouble[6]); spot b = new spot(mainDouble[7], mainDouble[8]); spot c = new spot(mainDouble[9], mainDouble[10]); spot d = new spot(mainDouble[11], mainDouble[12]); if (!e.coincidence(f)) { if (judgeQuadrangle(a, b, c, d)) { if((A3(e,f,a)&&(A3(e,f,b)||A3(e,f,d)))||(A3(e,f,c)&&(A3(e,f,b)||A3(e,f,d)))){ System.out.println(The line is coincide with one of the lines); }else{ System.out.println(1); } } else { if (C3(a, b, d) || a.coincidence(c)) { if (S3(b, c, d)) { if(A3(e,f,b)&&(A3(e,f,c)||A3(e,f,d))){ System.out.println(The line is coincide with one of the lines); }else{ System.out.println(1); } } else { System.out.println(not a quadrilateral or triangle); } } else if (C3(b, c, a) || b.coincidence(d)) { if (S3(a, c, d)) { if(A3(e,f,a)&&(A3(e,f,c)||A3(e,f,d))){ System.out.println(The line is coincide with one of the lines); }else{ System.out.println(1); } } else { System.out.println(not a quadrilateral or triangle); } } else if (C3(c, b, d) || c.coincidence(a)) { if (S3(b, a, d)) { if(A3(e,f,b)&&(A3(e,f,a)||A3(e,f,d))){ System.out.println(The line is coincide with one of the lines); }else{ System.out.println(1); } } else { System.out.println(not a quadrilateral or triangle); } } else if (C3(d, a, c) || d.coincidence(b)) { if (S3(b, c, a)) { if(A3(e,f,b)&&(A3(e,f,c)||A3(e,f,a))){ System.out.println(The line is coincide with one of the lines); }else{ System.out.println(1); } } else { System.out.println(not a quadrilateral or triangle); } } else System.out.println(not a quadrilateral or triangle); } } else System.out.println(points coincide); } } } else if (line.charAt(0) == '5') { if (!Tf(line)) System.out.println(Wrong Format); else { if (!points(line, 5)) { System.out.println(wrong number of points); } else { mainDouble = getCount(line); spot e = new spot(mainDouble[1], mainDouble[2]); spot a = new spot(mainDouble[3], mainDouble[4]); spot b = new spot(mainDouble[5], mainDouble[6]); spot c = new spot(mainDouble[7], mainDouble[8]); spot d = new spot(mainDouble[9], mainDouble[10]); if (judgeQuadrangle(a, b, c, d)) { if(C3(e,a,b)||C3(e,b,c)||C3(e,c,d)||C3(e,d,a)){ System.out.println(on the quadrilateral); }else{ double S = triangleArea(a,b,d)+triangleArea(b,c,d); double s1 = triangleArea(e,a,b); double s2 = triangleArea(e,c,b); double s3 = triangleArea(e,c,d); double s4 = triangleArea(e,a,d); if(Math.abs(S-s1-s2-s3-s4)<0.00001){ System.out.println(in the quadrilateral); }else{ System.out.println(outof the quadrilateral); } } } else { if (C3(a, b, d) || a.coincidence(c)) { if(S3(b,c,d)){ if(C3(e,b,c)||C3(e,b,d)||C3(e,c,d)){ System.out.println(on the triangle); }else{ double S = triangleArea(b,c,d); double s1 = triangleArea(e,c,b); double s2 = triangleArea(e,b,d); double s3 = triangleArea(e,c,d); if(Math.abs(S-s1-s2-s3)<0.00001){ System.out.println(in the triangle); }else{ System.out.println(outof the triangle); } } }else{ System.out.println(not a quadrilateral or triangle); } } else if (C3(b, c, a) ||b.coincidence(d)){ if(S3(a,c,d)){ if(C3(e,a,c)||C3(e,a,d)||C3(e,c,d)){ System.out.println(on the triangle); }else{ double S = triangleArea(a,c,d); double s1 = triangleArea(e,a,c); double s2 = triangleArea(e,a,d); double s3 = triangleArea(e,c,d); if(Math.abs(S-s1-s2-s3)<0.00001){ System.out.println(in the triangle); }else{ System.out.println(outof the triangle); } } }else{ System.out.println(not a quadrilateral or triangle); } }else if(C3(c, b, d) ||c.coincidence(a)){ if(S3(b,a,d)){ if(C3(e,b,d)||C3(e,b,a)||C3(e,a,d)){ System.out.println(on the triangle); }else{ double S = triangleArea(b,a,d); double s1 = triangleArea(e,a,b); double s2 = triangleArea(e,b,d); double s3 = triangleArea(e,a,d); if(Math.abs(S-s1-s2-s3)<0.00001){ System.out.println(in the triangle); }else{ System.out.println(outof the triangle); } } }else{ System.out.println(not a quadrilateral or triangle); } }else if(C3(d, a, c)||d.coincidence(b)){ if(S3(b,c,a)){ if(C3(e,b,c)||C3(e,b,a)||C3(e,c,a)){ System.out.println(on the triangle); }else{ double S = triangleArea(b,c,a); double s1 = triangleArea(e,a,b); double s2 = triangleArea(e,b,c); double s3 = triangleArea(e,c,a); if(Math.abs(S-s1-s2-s3)<0.00001){ System.out.println(in the triangle); }else{ System.out.println(outof the triangle); } } }else{ System.out.println(not a quadrilateral or triangle); } } else System.out.println(not a quadrilateral or triangle); } } } }else{ System.out.println(Wrong Format); } } public static boolean points(String line, int q) { int i, a = 0, b = 0; char[] chars = line.toCharArray(); for (i = 0; i < line.length(); i++) { if (chars[i] == ' ') { a++; } if (chars[i] == ',') { b++; } } if (q == 1 || q == 2 || q == 3) return a == 3 && b == 4; if (q == 4) return a == 5 && b == 6; else return a == 4 && b == 5; } public static boolean Tf(String line) { String Str = ([1-5]\\:[\\+|-]?([0]|([1-9]((\\d)?)+))(\\.\\d+)?\\,([+\\-]?([0]|([1-9]((\\d)?)+)))(\\.\\d+)?(\\s([+\\-]?([0]|([1-9]((\\d)?)+)))(\\.\\d+)?\\,([+\\-]?([0]|([1-9]((\\d)?)+)))(\\.\\d+)?)+); return line.matches(Str); } public static double[] getCount(String line) { double[] doubles = new double[13]; int i = 0; Pattern pattern = Pattern.compile(([\\+|\\-]?\\d+)(\\.\\d+)?); Matcher matcher = pattern.matcher(line); while (matcher.find()) { doubles[i] = Double.valueOf(matcher.group(0)); i++; } return doubles; } public static boolean judgeQuadrangle(spot a, spot b, spot c, spot d) { if (!A3(a, b, c) && !A3(a, b, d) && !A3(a, c, d) && !A3(b, c, d) && !B2(a, d, b, c) && !B2(a, b, c, d)) return true; else return false; } public static boolean A3(spot a, spot b, spot c) { return (a.y - b.y) * (b.x - c.x) == (a.x - b.x) * (b.y - c.y); } public static boolean B2(spot a, spot b, spot c, spot d) { Line2D line1 = new Line2D.Double(a.x, a.y, b.x, b.y); Line2D line2 = new Line2D.Double(c.x, c.y, d.x, d.y); if (line2.intersectsLine(line1)) { return true; } else return false; } public static boolean parallelogram(spot a, spot b, spot c, spot d) { if (kOfSpot(a, b, c, d) && kOfSpot(a, d, b, c)) return true; else return false; } public static boolean kOfSpot(spot a, spot b, spot c, spot d) { return (a.y - b.y) * (c.x - d.x) == (a.x - b.x) * (c.y - d.y); } public static boolean diamond(spot a, spot b, spot c, spot d) { if (distance(a, b) == distance(b, c) && distance(b, c) == distance(c, d) && distance(c, d) == distance(d, a)) { return true; } else { return false; } } public static double cos(spot a, spot b, spot c) { double cos = (Math.pow(distance(a, c), 2) + Math.pow(distance(a, b), 2) - Math.pow(distance(b, c), 2)) / (2 * distance(a, c) * distance(a, b)); if (Math.abs(cos) < 0.0001) return 0; else return cos; } public static double distance(spot a, spot b) { double distance = Math.sqrt(Math.pow(a.x - b.x, 2) + Math.pow(a.y - b.y, 2)); return distance; } public static boolean vertical(spot a, spot b, spot c) { if (distance(a, b) * distance(b, c) * cos(b, a, c) == 0) { return true; } else return false; } public static boolean rectangle(spot a, spot b, spot c, spot d) { if (parallelogram(a, b, c, d)) { if (vertical(a, b, c)) { return true; } else return false; } else return false; } private static double triangleArea(spot a, spot b, spot c) { double result = Math.abs((a.x * b.y + b.x * c.y + c.x * a.y - b.x * a.y - c.x * b.y - a.x * c.y) / 2.0); return result; } private static void printC(double a) { String str_S = String.valueOf(a); str_S = str_S.substring(str_S.indexOf(.) + 1); int len_S = str_S.length(); len_S = Math.min(len_S, 3); String out2 = String.format(%. + len_S + f, a); System.out.printf(out2 + ); } private static void printS(double a) { String str_S = String.valueOf(a); str_S = str_S.substring(str_S.indexOf(.) + 1); int len_S = str_S.length(); len_S = Math.min(len_S, 3); String out2 = String.format(%. + len_S + f, a); System.out.printf(out2); } public static boolean C3(spot a, spot b, spot c) { double YMax = Math.max(b.y, c.y); double XMax = Math.max(b.x, c.x); double YMin = Math.min(b.y, c.y); double XMin = Math.min(b.x, c.x); if (a.x >= XMin && a.x <= XMax && a.y >= YMin && a.y <= YMax && A3(a, b, c)) { return true; } else return false; } public static boolean S3(spot a,spot b,spot c){ if(distance(a,b)+distance(b,c)<=distance(a,c)||distance(a,b)+distance(a,c)<=distance(b,c)||distance(a,c)+distance(b,c)<=distance(a,b)){ return false; }else return true; } } class spot{ double x,y; public spot(double x, double y) { this.x = x; this.y = y; } public boolean coincidence(spot a){ if(this.x == a.x&&this.y == a.y){ return true; }else return false; } }
遇到的困难:
在上道题学会了正则表达式的基础上,本题的文本处理问题就显得不是问题,基本上和上一体采用同样的方法
除去正则表达式,本题需要实现的功能相对来说就比较复杂,本题依旧分为五个功能,前三个功能基本为简单的判断,用过数学知识可以轻松解决,在第第四个和第五个功能实现过程中,因为数学功底比较薄弱,并未实现第四个功能,也没有通过测试点,最后是在写不进去了,第五个功能虽然有困难最后还是实现了。
解决方法:在bilibili上找到的一名java老师罗顺平关于正则表达式的课程,里面分为了二十多个视频讲解,非常的详细。
通过海伦公式实现了第五个功能,但是在求三角形面积的时候不能海伦公式,因为有精度误差
我使用了一个一步到位的公式
result = Math.abs((ax * by + bx * cy + cx * ay - bx * ay - cx * by - ax * cy) / 2.0)
其他数学知识上暂时还没有解决
特殊输出还是采取上一题的输出方法
2.期中考试
(1)7-1
困难:因为考试时时间有限,都是简单的类设计
import java.util.ArrayList; import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner input = new Scanner(System.in); GeometryObject a = new GeometryObject(); int choice = input.nextInt(); while(choice != 0) { switch(choice) { case 1://insert Point object into list { Point p1= new Point(input.nextDouble(), input.nextDouble()); if(p1.getX()<=0||p1.getX()>200||p1.getY()<=0||p1.getY()>200){ System.out.println(Wrong Format); }else a.add(p1); } break; case 2://insert Line object into list double a1 = input.nextDouble(); double a2 = input.nextDouble(); double a3 = input.nextDouble(); double a4 = input.nextDouble(); Point p2= new Point(a1, a2); Point p3= new Point(a3, a4); String color1 = input.next(); Line line = new Line(p2,p3, color1); if(a1<=0||a1>200||a2<=0||a2>200||a3<=0||a3>200||a4<=0||a4>200){ System.out.println(Wrong Format); }else a.add(line); break; case 3://insert Plane object into list { String color2 = input.next(); Plane plane = new Plane(color2); a.add(plane); } break; case 4://delete index - 1 object from list int index = input.nextInt(); a.remove(index); } choice = input.nextInt(); } a.getList(); } } abstract class classElement{ public void display(){ } } class Point extends classElement{ private double x,y; public Point() { } public Point(double x, double y) { this.x = x; this.y = y; } public double getX() { return x; } public void setX(double x) { this.x = x; } public double getY() { return y; } public void setY(double y) { this.y = y; } public void display(){ System.out.printf((%.2f,%.2f)\n,this.x,this.y); } } class Line extends classElement{ private Point point1; private Point point2; private String color; public Line() { } public Line(Point point1, Point point2, String color) { this.point1 = point1; this.point2 = point2; this.color = color; } public Point getPoint1() { return point1; } public void setPoint1(Point point1) { this.point1 = point1; } public Point getPoint2() { return point2; } public void setPoint2(Point point2) { this.point2 = point2; } public String getColor() { return color; } public void setColor(String color) { this.color = color; } public void display(){ System.out.println(The line's color is: +this.color+ \nThe line's begin point's Coordinate is:); point1.display(); System.out.println(The line's end point's Coordinate is:); point2.display(); System.out.printf(The line's length is:); System.out.printf(%.2f\n,distance(point1,point2)); } public double distance(Point a, Point b) { double distance = Math.sqrt(Math.pow(a.getX() - b.getX(), 2) + Math.pow(a.getY() - b.getY(), 2)); return distance; } } class Plane extends classElement{ private String color; public Plane(String color) { this.color = color; } public String getColor() { return color; } public void setColor(String color) { this.color = color; } public void display(){ System.out.println(The Plane's color is:+this.color); } } class GeometryObject{ private ArrayList<classElement> a= new ArrayList<>(); public void add(classElement b){ this.a.add(b); } public void remove(int index){ if(index<=a.size()) this.a.remove(index-1); else return; } public void getList(){ for(classElement e:a){ e.display(); } } }
(2)7-2
import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); Point p1= new Point(scanner.nextDouble(), scanner.nextDouble()); Point p2= new Point(scanner.nextDouble(), scanner.nextDouble()); String color = scanner.next(); Line line = new Line(p1,p2, color); Plane plane = new Plane(color); classElement element; if(p1.getX()<=0||p1.getX()>200||p1.getY()<=0||p1.getY()>200||p2.getX()<=0||p2.getX()>200||p2.getY()<=0||p2.getY()>200){ System.out.println(Wrong Format); }else{ element = p1;//起点Point element.display(); element = p2;//终点Point element.display(); element = line;//线段 element.display(); element = plane;//面 element.display(); } } } abstract class classElement{ public void display(){ } } class Point extends classElement{ private double x,y; public Point() { } public Point(double x, double y) { this.x = x; this.y = y; } public double getX() { return x; } public void setX(double x) { this.x = x; } public double getY() { return y; } public void setY(double y) { this.y = y; } public void display(){ System.out.printf((%.2f,%.2f)\n,this.x,this.y); } } class Line extends classElement{ private Point point1; private Point point2; private String color; public Line() { } public Line(Point point1, Point point2, String color) { this.point1 = point1; this.point2 = point2; this.color = color; } public Point getPoint1() { return point1; } public void setPoint1(Point point1) { this.point1 = point1; } public Point getPoint2() { return point2; } public void setPoint2(Point point2) { this.point2 = point2; } public String getColor() { return color; } public void setColor(String color) { this.color = color; } public void display(){ System.out.println(The line's color is: +this.color+ \nThe line's begin point's Coordinate is:); point1.display(); System.out.println(The line's end point's Coordinate is:); point2.display(); System.out.printf(The line's length is:); System.out.printf(%.2f\n,distance(point1,point2)); } public double distance(Point a, Point b) { double distance = Math.sqrt(Math.pow(a.getX() - b.getX(), 2) + Math.pow(a.getY() - b.getY(), 2)); return distance; } } class Plane extends classElement{ private String color; public Plane(String color) { this.color = color; } public String getColor() { return color; } public void setColor(String color) { this.color = color; } public void display(){ System.out.println(The Plane's color is:+this.color); } }
困难:也是考试中的试题,在7-1的要求上更改
(3)7-3
困难:因为是第一次实际操作使用容器,并且时间比较紧急
import java.util.ArrayList; import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner input = new Scanner(System.in); GeometryObject a = new GeometryObject(); int choice = input.nextInt(); while(choice != 0) { switch(choice) { case 1://insert Point object into list { Point p1= new Point(input.nextDouble(), input.nextDouble()); if(p1.getX()<=0||p1.getX()>200||p1.getY()<=0||p1.getY()>200){ System.out.println(Wrong Format); }else a.add(p1); } break; case 2://insert Line object into list double a1 = input.nextDouble(); double a2 = input.nextDouble(); double a3 = input.nextDouble(); double a4 = input.nextDouble(); Point p2= new Point(a1, a2); Point p3= new Point(a3, a4); String color1 = input.next(); Line line = new Line(p2,p3, color1); if(a1<=0||a1>200||a2<=0||a2>200||a3<=0||a3>200||a4<=0||a4>200){ System.out.println(Wrong Format); }else a.add(line); break; case 3://insert Plane object into list { String color2 = input.next(); Plane plane = new Plane(color2); a.add(plane); } break; case 4://delete index - 1 object from list int index = input.nextInt(); a.remove(index); } choice = input.nextInt(); } a.getList(); } } abstract class classElement{ public void display(){ } } class Point extends classElement{ private double x,y; public Point() { } public Point(double x, double y) { this.x = x; this.y = y; } public double getX() { return x; } public void setX(double x) { this.x = x; } public double getY() { return y; } public void setY(double y) { this.y = y; } public void display(){ System.out.printf((%.2f,%.2f)\n,this.x,this.y); } } class Line extends classElement{ private Point point1; private Point point2; private String color; public Line() { } public Line(Point point1, Point point2, String color) { this.point1 = point1; this.point2 = point2; this.color = color; } public Point getPoint1() { return point1; } public void setPoint1(Point point1) { this.point1 = point1; } public Point getPoint2() { return point2; } public void setPoint2(Point point2) { this.point2 = point2; } public String getColor() { return color; } public void setColor(String color) { this.color = color; } public void display(){ System.out.println(The line's color is: +this.color+ \nThe line's begin point's Coordinate is:); point1.display(); System.out.println(The line's end point's Coordinate is:); point2.display(); System.out.printf(The line's length is:); System.out.printf(%.2f\n,distance(point1,point2)); } public double distance(Point a, Point b) { double distance = Math.sqrt(Math.pow(a.getX() - b.getX(), 2) + Math.pow(a.getY() - b.getY(), 2)); return distance; } } class Plane extends classElement{ private String color; public Plane(String color) { this.color = color; } public String getColor() { return color; } public void setColor(String color) { this.color = color; } public void display(){ System.out.println(The Plane's color is:+this.color); } } class GeometryObject{ private ArrayList<classElement> a= new ArrayList<>(); public void add(classElement b){ this.a.add(b); } public void remove(int index){ if(index<=a.size()) this.a.remove(index-1); else return; } public void getList(){ for(classElement e:a){ e.display(); } } }
链表实现:
遇到的困难:
通过老师上课的讲解,并没有遇到太多的困难,顺利的按要求完成了要求的功能,最主要的困难是接口的使用
解决方法:
通过网课学习接口的使用方法
set训练:
一.HashSet运行结果:
1.代码:
import java.util.*; public class TestHashSet { public static void main(String[] args) { // Create a hash set Set<String> set = new HashSet<>(); // Add strings to the set set.add(London); set.add(Paris); set.add(New York); set.add(San Francisco); set.add(Beijing); set.add(New York); System.out.println(set); // Display the elements in the hash set for (String s: set) { System.out.print(s.toUpperCase() + ); } // Process the elements using a forEach method System.out.println(); set.forEach(e -> System.out.print(e.toLowerCase() + )); } }
2.方法及作用:
toUpperCase():将字符串转化为大写
toLowerCase():将字符串转化为小写
二.TreeSte运行结果:
1.代码:
import java.util.*; public class TestTreeSet { public static void main(String[] args) { // Create a hash set Set<String> set = new HashSet<>(); // Add strings to the set set.add(London); set.add(Paris); set.add(New York); set.add(San Francisco); set.add(Beijing); set.add(New York); System.out.println(Sorted Hash set: + set); TreeSet<String> treeSet = new TreeSet<>(set); System.out.println(Sorted tree set: + treeSet); // Use the methods in SortedSet interface System.out.println(first(): + treeSet.first()); System.out.println(last(): + treeSet.last()); System.out.println(headSet(\New York\): + treeSet.headSet(New York)); System.out.println(tailSet(\New York\): + treeSet.tailSet(New York)); // Use the methods in NavigableSet interface System.out.println(lower(\P\): + treeSet.lower(P)); System.out.println(higher(\P\): + treeSet.higher(P)); System.out.println(floor(\P\): + treeSet.floor(P)); System.out.println(ceiling(\P\): + treeSet.ceiling(P)); System.out.println(pollFirst(): + treeSet.pollFirst()); System.out.println(pollLast(): + treeSet.pollLast()); System.out.println(New tree set: + treeSet); } }
2.方法及作用:
first():返回TreeSet中的第一个元素
Last():返回TreeSet中的最后一个元素
headSet<String>:返回此元素前面的所有元素
TailSet<String>:返回此元素和他后面的所有元素
Lower():返回TreeSet中比指定元素低的最高元素
higher():返回TreeSet中比指定元素高的最低元素
floor():返回TreeSet中小于或等于给定元素的最高元素
ceiling():返回TreeSet中大于或等于给定元素的最低元素
pollFirst():返回TreeSet中的第一个元素并删除
PollLast():返回TreeSet中的最后一个元素并删除
三.TestHashSet运行结果
1.代码:
import java.util.*; public class TestLinkedHashSet { public static void main(String[] args) { // Create a linked hash set Set<String> set = new LinkedHashSet<>(); // Add strings to the set set.add(London); set.add(Paris); set.add(New York); set.add(San Francisco); set.add(Beijing); set.add(New York); System.out.println(set); // Display the elements in the hash set for (String element: set) System.out.print(element.toLowerCase() + ); } }
四.自己的类(wolf)
1. 代码
import java.util.*; public class TestHashSet { public static void main(String[] args) { // Create a hash set Set<Wolf> set = new HashSet<>(); Wolf a = new Wolf(灰太狼); Wolf b = new Wolf(蕉太郎); Wolf c = new Wolf(红太狼); Wolf d = new Wolf(小灰灰); set.add(a); set.add(b); set.add(c); set.add(d); System.out.println(set); } class Wolf { String name = null; public Wolf(String name) { this.name = name; } public String toString() { return name; } }
Set、Lambda练习
TestMap
源码:
import java.util.*; public class TestMap { public static void main(String[] args) { // Create a HashMap Map<String, Integer> hashMap = new HashMap<>(); hashMap.put(Smith, 30); hashMap.put(Anderson, 31); hashMap.put(Lewis, 29); hashMap.put(Cook, 29); hashMap.put(Dongjiaqi,21);//新加入的数据 System.out.println(Display entries in HashMap); System.out.println(hashMap + \n); // Create a TreeMap from the preceding HashMap Map<String, Integer> treeMap = new TreeMap<>(hashMap); System.out.println(Display entries in ascending order of key); System.out.println(treeMap); // Create a LinkedHashMap Map<String, Integer> linkedHashMap = new LinkedHashMap<>(16, 0.75f, true); linkedHashMap.put(Smith, 30); linkedHashMap.put(Anderson, 31); linkedHashMap.put(Lewis, 29); linkedHashMap.put(Cook, 29); // Display the age for Lewis System.out.println(\nThe age for + Lewis is + linkedHashMap.get(Lewis)); System.out.println(Display entries in LinkedHashMap); System.out.println(linkedHashMap); // Display each entry with name and age System.out.print(\nNames and ages are ); treeMap.forEach( (name, age) -> System.out.print(name + : + age + )); } } }
Lambda 表达式
源码:
public class Java8Tester { public static void main(String args[]){ Java8Tester tester = new Java8Tester(); // 类型声明 MathOperation addition = (int a, int b) -> a + b; // 不用类型声明 MathOperation subtraction = (a, b) -> a - b; // 大括号中的返回语句 MathOperation multiplication = (int a, int b) -> { return a * b; }; // 没有大括号及返回语句 MathOperation division = (int a, int b) -> a / b; MathOperation aaa = (int a,int b) ->{return (a+b)*a;};//新加入的算法 System.out.println(10 + 5 = + tester.operate(10, 5, addition)); System.out.println(10 - 5 = + tester.operate(10, 5, subtraction)); System.out.println(10 x 5 = + tester.operate(10, 5, multiplication)); System.out.println(10 / 5 = + tester.operate(10, 5, division)); System.out.println(( 10 + 5 ) x 10 = +tester.operate(10,5,aaa)); // 不用括号 GreetingService greetService1 = message -> System.out.println(Hello + message); // 用括号 GreetingService greetService2 = (message) -> System.out.println(Hello + message); greetService1.sayMessage(Runoob); greetService2.sayMessage(Google); } interface MathOperation { int operation(int a, int b); } interface GreetingService { void sayMessage(String message); } private int operate(int a, int b, MathOperation mathOperation){ return mathOperation.operation(a, b); } } }
Stream
1.遍历/匹配
代码:
import java.util.ArrayList; import java.util.Arrays; import java.util.List; import java.util.Optional; public class StreamTest { public static void main(String[] args) { List<Integer> list = Arrays.asList(7, 6, 9, 3, 8, 2, 1); // 遍历输出符合条件的元素 list.stream().filter(x -> x > 6).forEach(System.out::println); // 匹配第一个 Optional<Integer> findFirst = list.stream().filter(x -> x > 6).findFirst(); // 匹配任意(适用于并行流) Optional<Integer> findAny = list.parallelStream().filter(x -> x > 6).findAny(); // 是否包含符合特定条件的元素 boolean anyMatch = list.stream().anyMatch(x -> x < 6); System.out.println(匹配第一个值: + findFirst.get()); System.out.println(匹配任意一个值: + findAny.get()); System.out.println(是否存在大于6的值: + anyMatch); } }
list.stream().filter(x -> x > 6).forEach(System.out::println); 遍历每个符合条件的元素 Optional<Integer> findFirst = list.stream().filter(x -> x > 6).findFirst(); 匹配第一个 Optional<Integer> findAny = list.parallelStream().filter(x -> x > 6).findAny(); 匹配任意 boolean anyMatch = list.stream().anyMatch(x -> x < 6); 是否包含特定元素
聚合
代码:
private static void test02() { List<String> list = Arrays.asList(zhangsan, lisi, wangwu, sunliu); Comparator<? super String> comparator = Comparator.comparing(String::length); Optional<String> max = list.stream().max(comparator); System.out.println(max); } //获取Integer集合中的最大值 private static void test05() { List<Integer> list = Arrays.asList(1, 17, 27, 7); Optional<Integer> max = list.stream().max(Integer::compareTo); // 自定义排序 Optional<Integer> max2 = list.stream().max(new Comparator<Integer>() { @Override public int compare(Integer o1, Integer o2) { return o1.compareTo(o2); } }); System.out.println(max2); }
2.在学习中学习到并使用的知识点
(1)继承与多态
一般继承用于两种语境
(1)整体与部分之间的关系(不常用)
(2)大类到小类的关系
(2)抽象类和接口
抽象类是专门做父类的,不能创建对象
接口:接口被看作一种特殊的类,与抽象类相似,不能使用new对象
总结:
1.bug的主要来源:
自己的疏忽,发生一些细节的小问题,比如字符数字没有加‘ ’,
2.学习到了什么:
除了类和继承的相关知识点,在其它题目集中学会了使用正则表达式,字符串的分割,在做最近一次的作业中我起初是使用字符串的分割,但是没法实现要求的全部功能
这是接触java这门语言第二次写博客,这是我第二次写学习总结,总而言之这种总结方法对我来说起到很大的作用,这是我第一次写学习总结,我认为在梳理过后我对知识在脑海里梳理的更加清晰,有助于对这些知识点的再次使用,这也是我第一次编写博客,所以有很多表达不清楚的地方
3.小建议:
因为我是一个新手,所以还不能给出太多的权威的建议,但是我还是总结出了一些经验,在语法通关的情况下,我们要尽可能去提升自己的逻辑推理能力和数学能力,因为只有这样才能去解决生活中的实际问题,逻辑能力就像基本功,所以我们的数学专业在这个方面就体现了很强的重要性