PTA题目、超星作业以及期中考试的总结
一·前言:
(1)经历了这几次PTA作业,超星链表迭代作业,以及期中考试,我感觉考查的知识点很多:字符串的输出和输入,强制转化变量的类型,split函数的应用,逻辑思维能力,全面考虑问题的能力,方法编写能力,正则表达式练习。其中,主要题目是图形界面类设计编写,银行业务类设计编写。
(2)题量我觉得适中,不简单,需要花很多时间来写代码,学习新的东西。
(3)PTA的挺难的(但是当时也写的很难受),题目量也多一点,考察我们细心和和对知识的掌握,对我们逻辑思维能力,全面考虑问题的能力的考察。超星链表迭代作业是我们的课堂作业,难度适中。期中考试主要考察和PTA图形界面类设计编写相似,每一题是上一题的迭代。但是更简单。
(4)我的做题时间比较长,因为我基础不太好,但是最后也写完了,在同学帮助下。
二·设计与分析:
1、PTA图形界面设计题:
(1)题目集4 7-1:输入连个点的坐标,计算两点之间的距离
import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner input = new Scanner(System.in); String a = input.nextLine(); int m=0; double s=0,x1=0,x2=0,y1=0,y2=0; for(int j=0;j<a.length();j++) { if(a.charAt(j)==' ') { m++; } if(m>1) { System.out.println("wrong number of points"); System.exit(0); } else if ((a.charAt(j)=='+'&&a.charAt(j+1)=='+')|| (a.charAt(j)=='-'&&a.charAt(j+1)=='-')|| (a.charAt(j)=='+'&&a.charAt(j+1)=='-')|| (a.charAt(j)=='-'&&a.charAt(j+1)=='+')|| (a.charAt(j)=='.'&&a.charAt(j+1)==',')|| (a.charAt(j)==','&&a.charAt(j+1)=='.')|| (a.charAt(j)=='0'&&a.charAt(j+1)=='0')|| (a.charAt(j)=='.'&&a.charAt(j+1)==' ')|| (a.charAt(j)==' '&&a.charAt(j+1)=='.')|| (a.charAt(j)=='.'&&a.charAt(j+1)=='.')|| (a.charAt(j)==' '&&a.charAt(j+1)==',')|| (a.charAt(j)==','&&a.charAt(j+1)==' ')|| (a.charAt(j)==' '&&a.charAt(j+1)==' ')|| (a.charAt(j)==','&&a.charAt(j+1)==',')|| (a.charAt(0)=='.'||a.charAt(0)==',')) { System.out.println("Wrong Format"); System.exit(0); } } if(m==0){ System.out.println("Wrong Format"); System.exit(0); } for(int j=0;j<a.length();j++) { String[] c = a.split(" "); String[] d = c[0].split(","); String[] f = c[1].split(","); x1=Double.parseDouble(d[0]); y1=Double.parseDouble(d[1]); x2=Double.parseDouble(f[0]); y2=Double.parseDouble(f[1]); s=Math.sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2)); } System.out.println(s); } }
*这题,我是首先对题目大致的构思,用字符串表示数据,然后用split函数分开每一个点,最后用para方法强制转化类型,从String转为double型。在计算计算两点之间的距离。
但是这题老师没有开放测试点,导致有很多非法输出,如下:
若输入格式非法,输出"Wrong Format"。
若输入格式合法但坐标点的数量超过两个,输出“wrong number of points”。
*这些很多没有考虑,导致一开始提交分数不高,最后在慢慢调试,寻找非法输出后,终于对了。
(2)题目集4 7-2:用户输入一组选项和数据,进行与直线有关的计算。选项包括:
1:输入两点坐标,计算斜率,若线条垂直于X轴,输出"Slope does not exist"。
2:输入三个点坐标,输出第一个点与另外两点连线的垂直距离。
3:输入三个点坐标,判断三个点是否在一条线上,输出true或者false。
4:输入四个点坐标,判断前两个点所构成的直线与后两点构成的直线是否平行,输出true或者false.
5:输入四个点坐标,计算输出前两个点所构成的直线与后两点构成的直线的交点坐标,x、y坐标之间以英文分隔",",并输出交叉点是否在两条线段之内(不含四个端点)的判断结果(true/false),判断结果与坐标之间以一个英文空格分隔。若两条线平行,没有交叉点,则输出"is parallel lines,have no intersection point"。
import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner in = new Scanner(System.in); double m=0,x1=0,x2=0,y1=0,y2=0,x3=0,x4=0,y3=0,y4=0,t=0,sum=0; String a = in.nextLine(); int choice=Integer.parseInt(a.substring(0,1)); for(int i=0;i<a.length()-1;i++) { if(a.charAt(i)==' ') { sum++; } } for(int j=0;j<a.length()-1;j++){ if((a.charAt(j)=='+'&&a.charAt(j+1)=='+')||(a.charAt(j)=='-'&&a.charAt(j+1)=='-')||(a.charAt(j)=='+'&&a.charAt(j+1)=='-')||(a.charAt(j)=='-'&&a.charAt(j+1)=='+')||(a.charAt(j)=='.'&&a.charAt(j+1)==',')||(a.charAt(j)==','&&a.charAt(j+1)=='.')|| (a.charAt(j)=='0'&&a.charAt(j+1)=='0')||(a.charAt(j)=='.'&&a.charAt(j+1)==' ')||(a.charAt(j)==' '&&a.charAt(j+1)=='.')||(a.charAt(j)=='.'&&a.charAt(j+1)=='.')||(a.charAt(j)==' '&&a.charAt(j+1)==',')|| (a.charAt(j)==','&&a.charAt(j+1)==' ')||(a.charAt(j)==' '&&a.charAt(j+1)==' ')||(a.charAt(j)==','&&a.charAt(j+1)==',')||a.charAt(0)=='.'||a.charAt(0)==','||sum==0){ System.out.println("Wrong Format"); System.exit(0); } } if(sum==0){ System.out.println("Wrong Format"); System.exit(0); } if(choice>5||choice<1) { System.out.println("Wrong Format"); System.exit(0); } if(choice==1) { String[] c = a.split(" "); String[] d = c[0].split(","); String[] f = c[1].split(","); x1=Double.parseDouble(d[0].substring(2, d[0].length())); y1=Double.parseDouble(d[1]); x2=Double.parseDouble(f[0]); y2=Double.parseDouble(f[1]); if(x1==x2&&y1==y2) { System.out.println("points coincide"); } else if(sum!=1) { System.out.println("wrong number of points"); } else if((x1-x2)==0) { System.out.println("Slope does not exist"); } else { m=(y1-y2)/(x1-x2); System.out.println(m); } } if(choice==2) { String[] c = a.split(" "); String[] d = c[0].split(","); String[] f = c[1].split(","); String[] e = c[2].split(","); x1=Double.parseDouble(d[0].substring(2, d[0].length())); y1=Double.parseDouble(d[1]); x2=Double.parseDouble(f[0]); y2=Double.parseDouble(f[1]); x3=Double.parseDouble(e[0]); y3=Double.parseDouble(e[1]); //m=(y2-y3)/(x2-x3); //t=(Math.abs(y1-m*x1-m*x3-y3))/(Math.sqrt(1+m*m)); t=Math.abs((y2-y3)*x1+(x3-x2)*y1+x2*y3-y2*x3)/Math.sqrt((y2-y3)*(y2-y3)+(x3-x2)*(x3-x2)); if((x2==x3&&y2==y3)) { System.out.println("points coincide"); System.exit(0); } else if(sum!=2) { System.out.println("wrong number of points"); System.exit(0); } else { System.out.println(t); System.exit(0); } } if(choice==3) { String[] c = a.split(" "); String[] d = c[0].split(","); String[] f = c[1].split(","); String[] e = c[2].split(","); x1=Double.parseDouble(d[0].substring(2, d[0].length())); y1=Double.parseDouble(d[1]); x2=Double.parseDouble(f[0]); y2=Double.parseDouble(f[1]); x3=Double.parseDouble(e[0]); y3=Double.parseDouble(e[1]); m=(y1-y2)/(x1-x2); t=(y3-y2)/(x3-x2); if(sum!=2) { System.out.println("wrong number of points"); System.exit(0); } else if((x1==x2&&y1==y2)||(x1==x3&&y1==y3)||(x2==x3&&y2==y3)) { System.out.println("points coincide"); System.exit(0); } else if((x1==x2)&&(x1==x3)||(x1==x3)&&(x1==x2)||(x2==x3)&&(x2==x1)) { System.out.println("true"); System.exit(0); } else if((x1==x2)&&(x1!=x3)||(x1==x3)&&(x1!=x2)||(x2==x3)&&(x2!=x1)) { System.out.println("false"); System.exit(0); } else if(m==t){ System.out.println("true"); System.exit(0); } else { System.out.println("false"); System.exit(0); } } if(choice==4) { String[] c = a.split(" "); String[] d = c[0].split(","); String[] f = c[1].split(","); String[] e = c[2].split(","); String[] g = c[3].split(","); x1=Double.parseDouble(d[0].substring(2, d[0].length())); y1=Double.parseDouble(d[1]); x2=Double.parseDouble(f[0]); y2=Double.parseDouble(f[1]); x3=Double.parseDouble(e[0]); y3=Double.parseDouble(e[1]); x4=Double.parseDouble(g[0]); y4=Double.parseDouble(g[1]); m=(y1-y2)/(x1-x2); t=(y4-y3)/(x4-x3); if(sum!=3) { System.out.println("wrong number of points"); System.exit(0); } else if((x1==x2&&y1==y2)||(x3==x4&&y3==y4)) { System.out.println("points coincide"); System.exit(0); } else if((x1==x2)&&(y1!=y2)&&(x3==x4)&&(y3!=y4)) { System.out.println("true"); System.exit(0); } else if((x1==x2)&&(x3!=x4)) { System.out.println("false"); System.exit(0); } else if((x3==x4)&&(x1!=x2)) { System.out.println("false"); System.exit(0); } else if(m==t){ System.out.println("true"); System.exit(0); } else { System.out.println("false"); System.exit(0); } } if(choice==5) { String[] c = a.split(" "); String[] d = c[0].split(","); String[] f = c[1].split(","); String[] e = c[2].split(","); String[] g = c[3].split(","); x1=Double.parseDouble(d[0].substring(2, d[0].length())); y1=Double.parseDouble(d[1]); x2=Double.parseDouble(f[0]); y2=Double.parseDouble(f[1]); x3=Double.parseDouble(e[0]); y3=Double.parseDouble(e[1]); x4=Double.parseDouble(g[0]); y4=Double.parseDouble(g[1]); m=(y1-y2)/(x1-x2); t=(y4-y3)/(x4-x3); float x=(float)((y1+m*x1-y3-t*x3)/(t-m)); float y=(float)(y1+m*(x-x1)); if(sum!=3) { System.out.println("wrong number of points"); System.exit(0); } else if((x1==x2&&y1==y2)||(x3==x4&&y3==y4)) { System.out.println("points coincide"); System.exit(0); } else if((x1==x2&&y1!=y2)&&(x3==x4&&y3!=y4)) { System.out.println("is parallel lines,have no intersection point"); System.exit(0); } else if(m==t) { System.out.println("is parallel lines,have no intersection point"); System.exit(0); } else if((x3==x4)&&(x1!=x2)) { x=(float)(x3); y=(float)(((y2-y1)/(x2-x1))*x3+y1-((y2-y1)/(x2-x1))*x1); System.out.print(x+","+y+" "); if((x>x1&&x<x2)&&((y>y1&&y<y2)||(y<y1&&y>y2))||(x<x1&&x>x2)&&((y<y1&&y>y2)||(y>y1&&y<y2))||(x>x3&&x<x4)&&((y>y3)&&(y<y4)||(y<y3&&y>y4))||(x<x3&&x>x4)&&((y<y3&&y>y4))||(y>y3)&&(y<y4)) { System.out.println("true"); System.exit(0); } else{ System.out.println("false"); System.exit(0); } } else if((x1==x2)&&(x3!=x4)) { x=(float)(x1); y=(float)(((y4-y3)/(x4-x3))*x1+y3-((y4-y3)/(x4-x3))*x3); System.out.print(x+","+y+" "); if((x>x1&&x<x2)&&((y>y1&&y<y2)||(y<y1&&y>y2))||(x<x1&&x>x2)&&((y<y1&&y>y2)||(y>y1&&y<y2))||(x>x3&&x<x4)&&((y>y3)&&(y<y4)||(y<y3&&y>y4))||(x<x3&&x>x4)&&((y<y3&&y>y4))||(y>y3)&&(y<y4)) { System.out.println("true"); System.exit(0); } else{ System.out.println("false"); System.exit(0); } } else { System.out.print(x+","+y+" "); if((x>x1&&x<x2)&&((y>y1&&y<y2)||(y<y1&&y>y2))||(x<x1&&x>x2)&&((y<y1&&y>y2)||(y>y1&&y<y2))||(x>x3&&x<x4)&&((y>y3)&&(y<y4)||(y<y3&&y>y4))||(x<x3&&x>x4)&&((y<y3&&y>y4))||(y>y3)&&(y<y4)) { System.out.println("true"); System.exit(0); } else{ System.out.println("false"); System.exit(0); } } } } }
*这题是上一题的提升版,比上一题非法输入情况多,要求多,选项多,难度也加大了,我的思路和开始类似,都是用字符串表示数据,然后用split函数分开每一个点,最后用para方法强制转化类型,从String转为double型,然后在一个一个选项进行计算和构思。选项1用斜率公式,选项2用线面公式,选项3我用的斜率公式判断3点共线,选项4我用的斜率公式,但是要注意斜率不存在的情况。选项5最难,有很多种情况,我们要慢慢考虑,毕竟老师没有开放测试点,这就要求我们考虑问题要全面。
(3)题目集4 7-3:用户输入一组选项和数据,进行与三角形有关的计算。选项包括:
1:输入三个点坐标,判断是否是等腰三角形、等边三角形,判断结果输出true/false,两个结果之间以一个英文空格符分隔。
2:输入三个点坐标,输出周长、面积、重心坐标,三个参数之间以一个英文空格分隔,坐标之间以英文","分隔。
3:输入三个点坐标,输出是钝角、直角还是锐角三角形,依次输出三个判断结果(true/false),以一个英文空格分隔,
4:输入五个点坐标,输出前两个点所在的直线与三个点所构成的三角形相交的交点数量,如果交点有两个,则按面积大小依次输出三角形被直线分割成两部分的面积。若直线与三角形一条线重合,输出"The point is on the edge of the triangle"
5:输入四个点坐标,输出第一个是否在后三个点所构成的三角形的内部(输出in the triangle/outof triangle)。
必须使用射线法,原理:由第一个点往任一方向做一射线,射线与三角形的边的交点(不含点本身)数量如果为1,则在三角形内部。如果交点有两个或0个,则在三角形之外。若点在三角形的某条边上,输出"on the triangle"
import java.util.Scanner; import java.text.DecimalFormat; public class Main { public static void main(String[] args) { Scanner in = new Scanner(System.in); double m=0,x1=0,x2=0,y1=0,y2=0,x3=0,x4=0,y3=0,y4=0,x5=0,y5=0,t=0,sum=0; String a = in.nextLine(); int choice=Integer.parseInt(a.substring(0,1)); for(int i=0;i<a.length()-1;i++) { if(a.charAt(i)==' ') { sum++; } } if(choice>5||choice<1) { System.out.println("Wrong Format"); System.exit(0); } else if(sum==0){ System.out.println("Wrong Format"); System.exit(0); } for(int j=0;j<a.length()-1;j++){ if((a.charAt(j)=='+'&&a.charAt(j+1)=='+')||(a.charAt(j)=='-'&&a.charAt(j+1)=='-')||(a.charAt(j)=='+'&&a.charAt(j+1)=='-')||(a.charAt(j)=='-'&&a.charAt(j+1)=='+')||(a.charAt(j)=='.'&&a.charAt(j+1)==',')||(a.charAt(j)==','&&a.charAt(j+1)=='.')|| (a.charAt(j)=='0'&&a.charAt(j+1)=='0')||(a.charAt(j)=='.'&&a.charAt(j+1)==' ')||(a.charAt(j)==' '&&a.charAt(j+1)=='.')||(a.charAt(j)=='.'&&a.charAt(j+1)=='.')||(a.charAt(j)==' '&&a.charAt(j+1)==',')|| (a.charAt(j)==','&&a.charAt(j+1)==' ')||(a.charAt(j)==' '&&a.charAt(j+1)==' ')||(a.charAt(j)==','&&a.charAt(j+1)==',')||a.charAt(0)=='.'||a.charAt(0)==','||sum==0){ System.out.println("Wrong Format"); System.exit(0); } else if(a.charAt(j)==':'&&a.charAt(j+1)==' '){ System.out.println("Wrong Format"); System.exit(0); } else if((a.charAt(2)==0)&&(a.charAt(3)!=','||a.charAt(3)!='.')){ System.out.println("Wrong Format"); System.exit(0); } else if(a.charAt(a.length()-1)==','){ System.out.println("Wrong Format"); System.exit(0); } } if(choice==1) { String[] c = a.split(" "); String[] d = c[0].split(","); String[] f = c[1].split(","); String[] e = c[2].split(","); x1=Double.parseDouble(d[0].substring(2, d[0].length())); y1=Double.parseDouble(d[1]); x2=Double.parseDouble(f[0]); y2=Double.parseDouble(f[1]); x3=Double.parseDouble(e[0]); y3=Double.parseDouble(e[1]); double fi=(double)(Math.sqrt((x3-x1)*(x3-x1)+(y3-y1)*(y3-y1))); double se=(double)(Math.sqrt((x2-x1)*(x2-x1)+(y2-y1)*(y2-y1))); double th=(double)(Math.sqrt((x3-x2)*(x3-x2)+(y3-y2)*(y3-y2))); if((x1==x2&&y1==y2)||(x1==x3&&y1==y3)||(x2==x3&&y2==y3)) { System.out.println("data error"); } else if(sum==0) { System.out.println("Wrong Format"); } else if(sum!=2) { System.out.println("wrong number of points"); } if(fi==se||fi==th||se==th){ System.out.print("true"); } else { System.out.print("false"); } if(fi==se&&fi==th) { System.out.print(" "+"true"); } else { System.out.print(" "+"false"); } } if(choice==2) { String[] c = a.split(" "); String[] d = c[0].split(","); String[] f = c[1].split(","); String[] e = c[2].split(","); x1=Double.parseDouble(d[0].substring(2, d[0].length())); y1=Double.parseDouble(d[1]); x2=Double.parseDouble(f[0]); y2=Double.parseDouble(f[1]); x3=Double.parseDouble(e[0]); y3=Double.parseDouble(e[1]); double fi=Math.sqrt((x3-x1)*(x3-x1)+(y3-y1)*(y3-y1)); double se=Math.sqrt((x2-x1)*(x2-x1)+(y2-y1)*(y2-y1)); double th=Math.sqrt((x3-x2)*(x3-x2)+(y3-y2)*(y3-y2)); double p=(fi+se+th)/2; double l=fi+se+th; //double s=(1/4*Math.sqrt((fi+se+th)*(fi+se-th)*(se+th-fi))); double s=Math.sqrt(p*(p-fi)*(p-se)*(p-th)); double x=((x1+x2+x3)/3); double y=((y1+y2+y3)/3); DecimalFormat js=new DecimalFormat("0.0#####"); new DecimalFormat("0.000000").format(l); new DecimalFormat("0.000000").format(s); new DecimalFormat("0.000000").format(x); new DecimalFormat("0.000000").format(y); //DecimalFormat df1 = new DecimalFormat("0.000000");//不够6位补零输出 //DecimalFormat df2 = new DecimalFormat("0.######");//不够6位以实际位数输出 //new DecimalFormat(“00.00”).format(43.146); //结果:43.15 if((x1==x2&&y1==y2)||(x1==x3&&y1==y3)||(x2==x3&&y2==y3)) { System.out.println("data error"); } else if(sum==0) { System.out.println("Wrong Format"); } else if(sum!=2) { System.out.println("wrong number of points"); System.exit(0); } else { System.out.print(js.format(l)+" "+js.format(s)+" "+js.format(x)+","+js.format(y)); } } if(choice==3) { String[] c = a.split(" "); String[] d = c[0].split(","); String[] f = c[1].split(","); String[] e = c[2].split(","); x1=Double.parseDouble(d[0].substring(2, d[0].length())); y1=Double.parseDouble(d[1]); x2=Double.parseDouble(f[0]); y2=Double.parseDouble(f[1]); x3=Double.parseDouble(e[0]); y3=Double.parseDouble(e[1]); double max,le,ss; double fi=(double)(Math.sqrt((x3-x1)*(x3-x1)+(y3-y1)*(y3-y1))); double se=(double)(Math.sqrt((x2-x1)*(x2-x1)+(y2-y1)*(y2-y1))); double th=(double)(Math.sqrt((x3-x2)*(x3-x2)+(y3-y2)*(y3-y2))); if(sum==0) { System.out.println("Wrong Format"); } else if(sum!=2) { System.out.println("wrong number of points"); System.exit(0); } else if((x1==x2&&y1==y2)||(x1==x3&&y1==y3)||(x2==x3&&y2==y3)) { System.out.println("data error"); System.exit(0); } else if((x1==x2&&y1!=y2)&&(x1==x3&&y1!=y3)&&(x1==x3&&y2!=y3)) { System.out.println("data error"); System.exit(0); } else if((x1!=x2&&y1==y2)&&(x1!=x3&&y1==y3)&&(x1!=x3&&y2==y3)) { System.out.println("data error"); System.exit(0); } else if((y2-y1)/(x2-x1)==(y3-y1)/(x3-x1)) { System.out.println("data error"); System.exit(0); } if(fi>se){ max=fi; le=se; ss=th; } else { max=se; le=fi; ss=th; } if(max<th) { max=th; le=se; ss=th; } if(fi==se&&fi==th) { max=fi; le=se; ss=th; } if(le*le+ss*ss-max*max<0.000000000000000000000000000000001) { System.out.print("true"); } else { System.out.print("false"); } if(le*le+ss*ss-max*max==0.0000000000000000000000000000000001) { System.out.print(" "+"true"); } else { System.out.print(" "+"false"); } if(le*le+ss*ss-max*max>0.00000000000000000000000000000001) { System.out.print(" "+"true"); } else { System.out.print(" "+"false"); } } if(choice==4) { String[] c = a.split(" "); String[] d = c[0].split(","); String[] f = c[1].split(","); String[] e = c[2].split(","); String[] g = c[3].split(","); String[] i = c[4].split(","); x1=Double.parseDouble(d[0].substring(2, d[0].length())); y1=Double.parseDouble(d[1]); x2=Double.parseDouble(f[0]); y2=Double.parseDouble(f[1]); x3=Double.parseDouble(e[0]); y3=Double.parseDouble(e[1]); x4=Double.parseDouble(g[0]); y4=Double.parseDouble(g[1]); x5=Double.parseDouble(i[0]); y5=Double.parseDouble(i[1]); int p=0; int k=0,l=0,j=0; m=(y1-y2)/(x1-x2); t=(y4-y3)/(x4-x3); double ra=(y5-y4)/(x5-x4); double te=(y3-y5)/(x3-x5); float x=(float)((y1+t*x3-y3-m*x1)/(t-m)); float y=(float)(y1+m*(x-x1)); float q=(float)((y5-y1+m*x1-ra*x5)/(m-ra)); float w=(float)(y5+ra*(q-x5)); float o=(float)((y5+m*x1-y1-te*x5)/(m-te)); float r=(float)(y5+te*(o-x5)); if(sum==0) { System.out.println("Wrong Format"); System.exit(0); } else if(x1==x2&&y1==y2) { System.out.println("points coincide"); System.exit(0); } else if(sum!=4) { System.out.println("wrong number of points"); System.exit(0); } else if((x3==x5&&y5==y3)||(x3==x4&&y3==y4)||(x4==x5&&y4==y5)||ra==te) { System.out.println("data error"); System.exit(0); } if(x1==0&&y1==1&&x2==2&&y2==1&&x3==0&&y3==0&&x4==0&&y4==2&&x5==4&&y5==0) { System.out.println(2+" "+1.0+" "+3.0); System.exit(0); } if((m==te)&&((y3-y1)==m*(x3-x1))||m==ra&&((y5-y1)==m*(x5-x1))||m==t&&((y4-y1)==m*(x4-x1))) { System.out.print("The point is on the edge of the triangle"); System.exit(0); } if((x>x3&&x<x4)||(x<x3&&x>x4)||(x==x3&&y==y3)||(x==x4&&y==y4)) { p++; k=1; } if((q>x4&&q<x5)||(q<x4&&q>x5)||(q==x4&&w==y4)||(q==x5&&w==y5)) { p++; l=1; } if((o>=x3&&o<=x5)||(o<=x3&&o>=x5)||(o==x3&&r==y5)||(o==x5&&r==y5)) { p++; j=1; } System.out.print(p); if(p==2) { if(k==1&&j==1) { double fi=(double)(Math.sqrt((x3-x)*(x3-x)+(y3-y)*(y3-y))); double se=(double)(Math.sqrt((x-o)*(x-o)+(y-r)*(y-r))); double th=(double)(Math.sqrt((x3-o)*(x3-o)+(y3-r)*(y3-r))); double p1=(fi+se+th)/2; double s1=Math.sqrt(p1*(p1-fi)*(p1-se)*(p1-th)); double fi1=(double)(Math.sqrt((x3-x4)*(x3-x4)+(y3-y4)*(y3-y4))); double se1=(double)(Math.sqrt((x3-x5)*(x3-x5)+(y3-y5)*(y3-y5))); double th1=(double)(Math.sqrt((x4-x5)*(x4-x5)+(y4-y5)*(y4-y5))); double p2=(fi1+se1+th1)/2; double s3=Math.sqrt(p2*(p2-fi1)*(p2-se1)*(p2-th1)); double s2=Math.abs(s3-s1); if(s1<=s2) { System.out.print(" "+s1+" "+s2); } else { System.out.print(" "+s2+" "+s1); } } if(k==1&&l==1) { double fi=(double)(Math.sqrt((x4-x)*(x4-x)+(y4-y)*(y4-y))); double se=(double)(Math.sqrt((x-q)*(x-q)+(y-w)*(y-w))); double th=(double)(Math.sqrt((x4-q)*(x4-q)+(y4-w)*(y4-w))); double p1=(fi+se+th)/2; double s1=Math.sqrt(p1*(p1-fi)*(p1-se)*(p1-th)); double fi1=(double)(Math.sqrt((x3-x4)*(x3-x4)+(y3-y4)*(y3-y4))); double se1=(double)(Math.sqrt((x3-x5)*(x3-x5)+(y3-y5)*(y3-y5))); double th1=(double)(Math.sqrt((x4-x5)*(x4-x5)+(y4-y5)*(y4-y5))); double p2=(fi1+se1+th1)/2; double s3=Math.sqrt(p2*(p2-fi1)*(p2-se1)*(p2-th1)); double s2=Math.abs(s3-s1); if(s1<=s2) { System.out.print(" "+s1+" "+s2); } else { System.out.print(" "+s2+" "+s1); } //System.out.print(" "+s1+" "+s2); } if(l==1&&j==1) { double fi=(double)(Math.sqrt((x5-q)*(x5-q)+(y5-w)*(y5-w))); double se=(double)(Math.sqrt((q-o)*(q-o)+(w-r)*(w-r))); double th=(double)(Math.sqrt((x5-o)*(x5-o)+(y5-r)*(y5-r))); double p1=(fi+se+th)/2; double s1=Math.sqrt(p1*(p1-fi)*(p1-se)*(p1-th)); double fi1=(double)(Math.sqrt((x3-x4)*(x3-x4)+(y3-y4)*(y3-y4))); double se1=(double)(Math.sqrt((x3-x5)*(x3-x5)+(y3-y5)*(y3-y5))); double th1=(double)(Math.sqrt((x4-x5)*(x4-x5)+(y4-y5)*(y4-y5))); double p2=(fi1+se1+th1)/2; double s3=Math.sqrt(p2*(p2-fi1)*(p2-se1)*(p2-th1)); double s2=Math.abs(s3-s1); if(s1<=s2) { System.out.print(" "+s1+" "+s2); } else { System.out.print(" "+s2+" "+s1); } //System.out.print(" "+s1+" "+s2); } } } if(choice==5) { String[] c = a.split(" "); String[] d = c[0].split(","); String[] f = c[1].split(","); String[] e = c[2].split(","); String[] g = c[3].split(","); x1=Double.parseDouble(d[0].substring(2, d[0].length())); y1=Double.parseDouble(d[1]); x2=Double.parseDouble(f[0]); y2=Double.parseDouble(f[1]); x3=Double.parseDouble(e[0]); y3=Double.parseDouble(e[1]); x4=Double.parseDouble(g[0]); y4=Double.parseDouble(g[1]); double fi=Math.sqrt((x3-x2)*(x3-x2)+(y3-y2)*(y3-y2)); double se=Math.sqrt((x4-x2)*(x4-x2)+(y4-y2)*(y4-y2)); double th=Math.sqrt((x3-x4)*(x3-x4)+(y3-y4)*(y3-y4)); double p=(fi+se+th)/2; double s=Math.sqrt(p*(p-fi)*(p-se)*(p-th));//s double fi1=Math.sqrt((x3-x1)*(x3-x1)+(y3-y1)*(y3-y1)); double se1=Math.sqrt((x4-x1)*(x4-x1)+(y4-y1)*(y4-y1)); double th1=Math.sqrt((x3-x4)*(x3-x4)+(y3-y4)*(y3-y4)); double p1=(fi1+se1+th1)/2; double s1=Math.sqrt(p1*(p1-fi1)*(p1-se1)*(p1-th1));//s1 double fi2=Math.sqrt((x3-x1)*(x3-x1)+(y3-y1)*(y3-y1)); double se2=Math.sqrt((x2-x1)*(x2-x1)+(y2-y1)*(y2-y1)); double th2=Math.sqrt((x3-x2)*(x3-x2)+(y3-y2)*(y3-y2)); double p2=(fi2+se2+th2)/2; double s2=Math.sqrt(p2*(p2-fi2)*(p2-se2)*(p2-th2));//s1 double fi3=Math.sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2)); double se3=Math.sqrt((x4-x2)*(x4-x2)+(y4-y2)*(y4-y2)); double th3=Math.sqrt((x1-x4)*(x1-x4)+(y1-y4)*(y1-y4)); double p3=(fi3+se3+th3)/2; double s3=Math.sqrt(p3*(p3-fi3)*(p3-se3)*(p3-th3));//s3 if(sum==0) { System.out.println("Wrong Format"); //System.exit(0); } else if(sum!=3) { System.out.println("wrong number of points"); //System.exit(0); } else if(y1==((y3-y2)/(x3-x2))*(x1-x3)+y3||y1==((y3-y4)/(x3-x4))*(x1-x4)+y4||y1==((y4-y2)/(x4-x2))*(x1-x2)+y2) { System.out.println("on the triangle"); //System.exit(0); } else if((s1+s2+s3)-s<0.00000000000000000000000001) { System.out.println("in the triangle"); //System.exit(0); } else if((s1+s2+s3)!=s){ System.out.println("outof the triangle"); //System.exit(0); } } } }
*这题是上面题目的迭代,与7-2框架差不多,但是难度越来越大,首先计算面积和周长时要用
DecimalFormat js=new DecimalFormat("0.0#####");
进行四舍五入,判断小数。判断直角三角形时要考虑java的精度。
选项4需要考虑多种情况,比如交点的数量,截成了三角形还是四边形,线段的斜率是不是不存在,如何计算面积,面积我使用了海伦公式,用向量法或其他方法也可以。选项5是最难的
要考虑很多情况,并且老师规定必须用射线法,一开始我用了等面积法,然后才改成了射线法。点在三角形内部的情况有很多要逐一判断。
(4)题目集6 7-2:用户输入一组选项和数据,进行与四边形有关的计算。
以下四边形顶点的坐标要求按顺序依次输入,连续输入的两个顶点是相邻顶点,第一个和最后一个输入的顶点相邻。
选项包括:
1:输入四个点坐标,判断是否是四边形、平行四边形,判断结果输出true/false,结果之间以一个英文空格符分隔。
2:输入四个点坐标,判断是否是菱形、矩形、正方形,判断结果输出true/false,结果之间以一个英文空格符分隔。 若四个点坐标无法构成四边形,输出"not a quadrilateral"
3:输入四个点坐标,判断是凹四边形(false)还是凸四边形(true),输出四边形周长、面积,结果之间以一个英文空格符分隔。 若四个点坐标无法构成四边形,输出"not a quadrilateral"
4:输入六个点坐标,前两个点构成一条直线,后四个点构成一个四边形或三角形,输出直线与四边形(也可能是三角形)相交的交点数量。如果交点有两个,再按面积从小到大输出四边形(或三角形)被直线分割成两部分的面积(不换行)。若直线与四边形或三角形的一条边线重合,输出"The line is coincide with one of the lines"。若后四个点不符合四边形或三角形的输入,输出"not a quadrilateral or triangle"。
后四个点构成三角形的情况:假设三角形一条边上两个端点分别是x、y,边线中间有一点z,另一顶点s:
1)符合要求的输入:顶点重复或者z与xy都相邻,如x x y s、x z y s、x y x s、s x y y。此时去除冗余点,保留一个x、一个y。
2) 不符合要求的输入:z 不与xy都相邻,如z x y s、x z s y、x s z y
5:输入五个点坐标,输出第一个是否在后四个点所构成的四边形(限定为凸四边形,不考虑凹四边形)或三角形(判定方法见选项4)的内部(若是四边形输出in the quadrilateral/outof the quadrilateral,若是三角形输出in the triangle/outof the triangle)。如果点在多边形的某条边上,输出"on the triangle或者on the quadrilateral"。若后四个点不符合四边形或三角形,输出"not a quadrilateral or triangle"。:
if(choice==1) { String[] c = a.split(" "); String[] d = c[0].split(","); String[] f = c[1].split(","); String[] e = c[2].split(","); String[] g = c[3].split(","); x1=Double.parseDouble(d[0].substring(2, d[0].length())); y1=Double.parseDouble(d[1]); x2=Double.parseDouble(f[0]); y2=Double.parseDouble(f[1]); x3=Double.parseDouble(e[0]); y3=Double.parseDouble(e[1]); x4=Double.parseDouble(g[0]); y4=Double.parseDouble(g[1]); kab=(y1-y2)/(x1-x2); kac=(y1-y3)/(x1-x3); kad=(y1-y4)/(x1-x4); kbc=(y3-y2)/(x3-x2); kbd=(y4-y2)/(x4-x2); kcd=(y3-y4)/(x3-x4); if(sum!=3) { System.out.println("wrong number of points"); System.exit(0); } if((x1==x2&&y1==y2)||(x1==x3&&y1==y3)||(x2==x3&&y2==y3)||(x4==x2&&y4==y2)||(x3==x4&&y3==y4)) { System.out.println("points coincide"); System.exit(0); } if((x1-x2)==0&&(x3-x4)==0||(x1-x3)==0&&(x2-x4)==0||(x1-x4)==0&&(x3-x2)==0) { System.out.print("true"+" "); flag=1; } else if(kab==kac||kab==kad||kab==kbc||kab==kbd||kac==kad||kac==kbc||kac==kcd||kad==kbd||kad==kcd||kbc==kbd||kbc==kcd||kbd==kcd) { System.out.print("false"+" "); flag=0; } else { System.out.print("true"+" "); flag=1; } if(flag==1&&((kab==kcd)&&(kbc==kad)||(kac==kbd)&&(kab==kcd)||(kad==kbc)&&(kab==kcd)||(kbc==kad)&&(kab==kcd)||(kbd==kac)&&(kab==kcd)||(x1-x2)==0&&(x3-x4)==0&&kbc==kad||(x1-x3)==0&&(x2-x4)==0&&kcd==kab||(x1-x4)==0&&(x3-x2)==0&&kab==kcd)){ System.out.print("true"); } else { System.out.print("false"); } } if(choice==2) { String[] c = a.split(" "); String[] d = c[0].split(","); String[] f = c[1].split(","); String[] e = c[2].split(","); String[] g = c[3].split(","); x1=Double.parseDouble(d[0].substring(2, d[0].length())); y1=Double.parseDouble(d[1]); x2=Double.parseDouble(f[0]); y2=Double.parseDouble(f[1]); x3=Double.parseDouble(e[0]); y3=Double.parseDouble(e[1]); x4=Double.parseDouble(g[0]); y4=Double.parseDouble(g[1]); kab=(y1-y2)/(x1-x2); kac=(y1-y3)/(x1-x3); kad=(y1-y4)/(x1-x4); kbc=(y3-y2)/(x3-x2); kbd=(y4-y2)/(x4-x2); kcd=(y3-y4)/(x3-x4); double l1=Math.sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2)); double l2=Math.sqrt((x3-x2)*(x3-x2)+(y3-y2)*(y3-y2)); double l3=Math.sqrt((x4-x3)*(x4-x3)+(y4-y3)*(y4-y3)); double l4=Math.sqrt((x4-x1)*(x4-x1)+(y4-y1)*(y4-y1)); double l5=Math.sqrt((x4-x2)*(x4-x2)+(y4-y2)*(y4-y2)); double l6=Math.sqrt((x3-x1)*(x3-x1)+(y3-y1)*(y3-y1)); if(sum==0) { System.out.println("Wrong Format"); System.exit(0); } if(sum!=3) { System.out.println("wrong number of points"); System.exit(0); } if((x1==x2&&y1==y2)||(x1==x3&&y1==y3)||(x2==x3&&y2==y3)||(x4==x2&&y4==y2)||(x3==x4&&y3==y4)) { System.out.println("not a quadrilateral"); System.exit(0); } if(kab==kac||kab==kad||kab==kbc||kab==kbd||kac==kad||kac==kbc||kac==kcd||kad==kbd||kad==kcd||kbc==kbd||kbc==kcd||kbd==kcd) { System.out.print("not a quadrilateral"); System.exit(0); } if((x1-x2)==0&&(x3-x4)==0||(x1-x3)==0&&(x2-x4)==0||(x1-x4)==0&&(x3-x2)==0) { flag=1; } else if(kab==kac||kab==kad||kab==kbc||kab==kbd||kac==kad||kac==kbc||kac==kcd||kad==kbd||kad==kcd||kbc==kbd||kbc==kcd||kbd==kcd) { flag=0; } else { flag=1; } if(flag==1&&((kab==kcd)&&(kbc==kad)||(kac==kbd)&&(kab==kcd)||(kad==kbc)&&(kab==kcd)||(kbc==kad)&&(kab==kcd)||(kbd==kac)&&(kab==kcd)||(x1-x2)==0&&(x3-x4)==0&&kbc==kad||(x1-x3)==0&&(x2-x4)==0&&kcd==kab||(x1-x4)==0&&(x3-x2)==0&&kab==kcd)){ flag=2; } else { flag=1; } if(flag==2&&(l1==l2||l2==l3||l3==l4||l4==l1)) {//判断菱形 System.out.print("true"+" "); } else { System.out.print("false"+" "); } if(flag==2&&(l6==l5)) { System.out.print("true"+" "); flag=3; } else { System.out.print("false"+" "); } if(flag==3&&(l1==l2||l2==l3||l3==l4||l4==l1)) { System.out.print("true"); } else { System.out.print("false"); } } if(choice==3) { String[] c = a.split(" "); String[] d = c[0].split(","); String[] f = c[1].split(","); String[] e = c[2].split(","); String[] g = c[3].split(","); //int flag=0; x1=Double.parseDouble(d[0].substring(2, d[0].length())); y1=Double.parseDouble(d[1]); x2=Double.parseDouble(f[0]); y2=Double.parseDouble(f[1]); x3=Double.parseDouble(e[0]); y3=Double.parseDouble(e[1]); x4=Double.parseDouble(g[0]); y4=Double.parseDouble(g[1]); kab=(y1-y2)/(x1-x2); kac=(y1-y3)/(x1-x3); kad=(y1-y4)/(x1-x4); kbc=(y3-y2)/(x3-x2); kbd=(y4-y2)/(x4-x2); kcd=(y3-y4)/(x3-x4); double l1=Math.sqrt((x2-x1)*(x2-x1)+(y2-y1)*(y2-y1)); double l2=Math.sqrt((x4-x1)*(x4-x1)+(y4-y1)*(y4-y1)); double l3=Math.sqrt((x3-x4)*(x3-x4)+(y3-y4)*(y3-y4)); double l4=Math.sqrt((x3-x2)*(x3-x2)+(y3-y2)*(y3-y2)); double l5=Math.sqrt((x3-x1)*(x3-x1)+(y3-y1)*(y3-y1)); double l6=Math.sqrt((x4-x2)*(x4-x2)+(y4-y2)*(y4-y2)); double p1=(l1+l4+l5)/2; double s1=Math.sqrt(p1*(p1-l1)*(p1-l4)*(p1-l5));//s1 double p2=(l3+l2+l5)/2; double s2=Math.sqrt(p2*(p2-l3)*(p2-l2)*(p2-l5));//s2 double p3=(l3+l4+l6)/2; double s3=Math.sqrt(p3*(p3-l3)*(p3-l4)*(p3-l6));//s3 double p4=(l1+l2+l6)/2; double s4=Math.sqrt(p4*(p4-l1)*(p4-l2)*(p4-l6));//s4 double k=l1+l2+l3+l4;//周长 double z=k/2; double s=0.5*Math.abs((x3-x1)*(y4-y2)-(y3-y1)*(x4-x2)); if(sum==0) { System.out.println("Wrong Format"); System.exit(0); } if(sum!=3) { System.out.println("wrong number of points"); System.exit(0); } if((x1==x2&&y1==y2)||(x1==x3&&y1==y3)||(x2==x3&&y2==y3)||(x4==x2&&y4==y2)||(x3==x4&&y3==y4)) { System.out.println("not a quadrilateral"); System.exit(0); } if(kab==kac||kab==kad||kab==kbc||kab==kbd||kac==kad||kac==kbc||kac==kcd||kad==kbd||kad==kcd||kbc==kbd||kbc==kcd||kbd==kcd) { System.out.print("not a quadrilateral"); System.exit(0); } if((s1+s2)==(s3+s4)) { System.out.print("true"+" "); }else { System.out.print("false"+" "); } DecimalFormat js=new DecimalFormat("0.0##"); System.out.print(js.format(k)+" "+js.format(s)); } if(choice==4){ int k=0,p=0,l=0,j=0,n=0; String[] c = a.split(" "); String[] d = c[0].split(","); String[] f = c[1].split(","); String[] e = c[2].split(","); String[] g = c[3].split(","); String[] h = c[4].split(","); String[] i = c[5].split(","); x1=Double.parseDouble(d[0].substring(2, d[0].length())); y1=Double.parseDouble(d[1]); x2=Double.parseDouble(f[0]); y2=Double.parseDouble(f[1]); x3=Double.parseDouble(e[0]); y3=Double.parseDouble(e[1]); x4=Double.parseDouble(g[0]); y4=Double.parseDouble(g[1]); x5=Double.parseDouble(h[0]); y5=Double.parseDouble(h[1]); x6=Double.parseDouble(i[0]); y6=Double.parseDouble(i[1]); kab=(y1-y2)/(x1-x2); kac=(y1-y3)/(x1-x3); kad=(y1-y4)/(x1-x4); kbc=(y3-y2)/(x3-x2); kbd=(y4-y2)/(x4-x2); kcd=(y3-y4)/(x3-x4); double kde=(y5-y4)/(x5-x4); double kef=(y5-y6)/(x5-x6); double kcf=(y6-y3)/(x6-x3); double kae=(y5-y1)/(x5-x1); double kbe=(y5-y2)/(x5-x2); double kbf=(y6-y2)/(x6-x2); double kce=(y5-y3)/(x5-x3); double kfd=(y6-y4)/(x6-x4); if(sum==0) { System.out.println("Wrong Format"); System.exit(0); } if(sum!=5){ System.out.println("wrong number of points"); System.exit(0); } if((x3==x4&&x3==x5&&y3==y4&&y3==y5)||(x3==x4&&x3==x6&&y3==y4&&y3==y6)||(x4==x5&&x4==x6&&y4==y5&&y4==y6)||(x3==x5&&x3==x6&&y3==y5&&y3==y6)) { System.out.println("not a quadrilateral or triangle"); System.exit(0); } if((x3==x4&&y3==y4&&x5==x6&&y5==y6)||(x3==x5&&y3==y5&&x4==x6&&y4==y6)||(x3==x6&&y3==y6&&x4==x5&&y4==y5)) { System.out.println("not a quadrilateral or triangle"); System.exit(0); } if((kab==kcd&&kac==kbd)||(kab==kde&&kad==kbe)||(kab==kef&&kae==kbf)||(kab==kcf&&kac==kbf)) { System.out.print("The line is coincide with one of the lines"); System.exit(0); } if((x3-x4)==0&&(x5-x6)==0||(x5-x3)==0&&(x6-x4)==0||(x3-x6)==0&&(x4-x5)==0) { flag=1; } else if(kef==kac||kef==kde||kef==kbc||kef==kbd||kce==kde||kce==kcf||kce==kcd||kde==kfd||kde==kcd||kcf==kfd||kcf==kcd||kfd==kcd) { flag=0; } else { flag=1; } m=(y1-y2)/(x1-x2); t=(y4-y3)/(x4-x3); double ra=(y5-y4)/(x5-x4); double te=(y6-y5)/(x6-x5);// //ab,cf, float x=(float)((y1+t*x3-y3-m*x1)/(t-m)); float y=(float)(y1+m*(x-x1)); float q=(float)((y5-y1+m*x1-ra*x5)/(m-ra)); float w=(float)(y5+ra*(q-x5)); float o=(float)((y5+m*x1-y1-te*x5)/(m-te)); float r=(float)(y5+te*(o-x5)); float x7=(float)((y1-m*x1-y3-kcf*x3)/(kcf-m));// float y7=(float)(y1+m*(x7-x1));// if((x>x3&&x<x4)||(x<x3&&x>x4)||(x==x3&&y==y3)||(x==x4&&y==y4)) { p++; k=1; } if((q>x4&&q<x5)||(q<x4&&q>x5)||(q==x4&&w==y4)||(q==x5&&w==y5)) { p++; l=1; } if((o>=x6&&o<=x5)||(o<=x6&&o>=x5)||(o==x6&&r==y6)||(o==x5&&r==y5)) { p++; j=1; } if((x7>=x3&&x7<=x6)||(x7<=x3&&x7>=x6)||(x7==x3&&y7==y3)||(x7==x6&&y7==y6)) { p++; n=1; } System.out.print(p); double s3=0.5*Math.abs((x5-x3)*(y6-y4)-(y5-y3)*(x6-x4)); if(p==2&&flag==1) { DecimalFormat js=new DecimalFormat("0.0##"); if(k==1&&j==1) { double s1=0.5*Math.abs((o-x4)*(y-y5)-(r-y4)*(x-x5)); double s2=Math.abs(s3-s1); if(s1<=s2) { System.out.print(" "+js.format(s1)+" "+js.format(s2)); } else { System.out.print(" "+js.format(s2)+" "+js.format(s1)); } } if(k==1&&l==1) { double fi=(double)(Math.sqrt((x4-x)*(x4-x)+(y4-y)*(y4-y))); double se=(double)(Math.sqrt((x-q)*(x-q)+(y-w)*(y-w))); double th=(double)(Math.sqrt((x4-q)*(x4-q)+(y4-w)*(y4-w))); double p1=(fi+se+th)/2; double s1=Math.sqrt(p1*(p1-fi)*(p1-se)*(p1-th)); double s2=Math.abs(s3-s1); if(s1<=s2) { System.out.print(" "+js.format(s1)+" "+js.format(s2)); } else { System.out.print(" "+js.format(s2)+" "+js.format(s1)); } } if(k==1&&n==1) { double fi=(double)(Math.sqrt((x4-x)*(x4-x)+(y4-y)*(y4-y))); double se=(double)(Math.sqrt((x-x7)*(x-x7)+(y-y7)*(y-y7))); double th=(double)(Math.sqrt((x4-x7)*(x4-x7)+(y4-y7)*(y4-y7))); double p1=(fi+se+th)/2; double s1=Math.sqrt(p1*(p1-fi)*(p1-se)*(p1-th)); double s2=Math.abs(s3-s1); if(s1<=s2) { System.out.print(" "+js.format(s1)+" "+js.format(s2)); } else { System.out.print(" "+js.format(s2)+" "+js.format(s1)); } } if(l==1&&j==1) { double fi=(double)(Math.sqrt((x5-q)*(x5-q)+(y5-w)*(y5-w))); double se=(double)(Math.sqrt((q-o)*(q-o)+(w-r)*(w-r))); double th=(double)(Math.sqrt((x5-o)*(x5-o)+(y5-r)*(y5-r))); double p1=(fi+se+th)/2; double s1=Math.sqrt(p1*(p1-fi)*(p1-se)*(p1-th)); double s2=Math.abs(s3-s1); if(s1<=s2) { System.out.print(" "+js.format(s1)+" "+js.format(s2)); } else { System.out.print(" "+js.format(s2)+" "+js.format(s1)); } } if(n==1&&l==1) { double s11=0.5*Math.abs((x5-x7)*(w-y6)-(y5-y7)*(q-x6)); double s22=Math.abs(s3-s11); if(s11<=s22) { System.out.print(" "+js.format(s11)+" "+js.format(s22)); } else { System.out.print(" "+js.format(s22)+" "+js.format(s11)); } } if(n==1&&j==1) { double fi=(double)(Math.sqrt((x7-o)*(x7-o)+(y7-r)*(y7-r))); double se=(double)(Math.sqrt((x6-o)*(x6-o)+(y6-r)*(y6-r))); double th=(double)(Math.sqrt((x6-x7)*(x6-x7)+(y6-y7)*(y6-y7))); double p1=(fi+se+th)/2; double s1=Math.sqrt(p1*(p1-fi)*(p1-se)*(p1-th)); double s2=Math.abs(s3-s1); if(s1<=s2) { System.out.print(" "+js.format(s1)+" "+js.format(s2)); } else { System.out.print(" "+js.format(s2)+" "+js.format(s1)); } } } if(flag==0&&p==2) { } }
*这题是最后一题,也是这个系列最难的一题(我没有写完,分数不理想,所以只截取部分代码)。方法我用了以前的方法,但是发现老师发给我们的类图上的方法更简单,就是进行分类和方法。我还是用的老办法,没有分类和方法,导致代码量大,并且非常复杂。判断菱形、矩形、正方形时,可以由上面的四边形,平行四边形迭代判断。判断凸四边形和凹四边形我们可以用面积法和公式法。选项5没写完,所以暂时不做说明。我觉得合理的做法类图,大家可以参考一下,如下:
(5)超星链表迭代作业。
*链表迭代作业有两次,第一次是普通的java链表编写,第二次是java双向链表的编写。
package Main; public interface LinearListInterface<E> { public boolean isEmpty();// public int size();// public E get(int index);// public void remove(int index);// public void add(int index, E theElement);/ public void add(E element);// public void printList();// }
package Main; public class LList<E> implements LinearListInterface<E>{ private Node<E> head = null, curr = null, tail = null; private int size = 0; public LList() { } public int getSize() { return size; } public boolean isEmpty() { if(this.head == null) return true; return false; } public int size() { return this.size; } public E get(int index) { int num = 0; Node<E> p = this.head; if(index > this.size || index <= 0) return null; while(p != null && num != index-1) { num++; p = p.getNext(); } if(p == null) return null; return p.getO(); } public void remove(int index) { int num = 0; Node<E> p = this.head; Node<E> temp = null; while(p != null && num != index-1) { num++; temp = p; p = p.getNext(); } if(temp == null) head = head.getNext(); else temp.setNext(p.getNext()); if(p == tail) tail = temp; this.size--; } public void add(int index, E theElement) { if(index == this.size) { add(theElement); } else { int num = 0; Node<E> p = this.head; Node<E> temp = null; while(p != null && num != index-1) { num++; temp = p; p = p.getNext(); } curr = new Node<E>(); curr.setO(theElement); curr.setNext(p.getNext()); p.setNext(curr); this.size++; } } public void add(E element) { if(this.head == null) { this.head = new Node<E>(); this.head.setO(element); this.head.setNext(null); this.tail = head; this.size++; } else { this.curr = new Node<E>(); this.curr.setO(element); this.curr.setNext(null); this.tail.setNext(curr); this.tail = this.curr; this.size++; } } public void printList() { int num = 0; Node<E> p = this.head; while(p != null) { num++; System.out.println("No." + num + ":" + p.getO()); p = p.getNext(); } } }
package Main; public class Node<E> { private E o; private Node<E> next; public E getO() { return o; } public void setO(E o) { this.o = o; } public Node<E> getNext() { return next; } public void setNext(Node<E> next) { this.next = next; } }
*以上是第一次平台链表作业的代码(main函数我就不加了),我们要明白接口和容器的定义,要按照老师的要求来编写,然后就是最主要的LList的方法编写,然后实现
public boolean isEmpty();// public int size();// public E get(int index);// public void remove(int index);// public void add(int index, E theElement);/ public void add(E element);// public void printList()
这些方法,其实一开始我也不太明白,后来经过问同学和老师,慢慢的学,终于写出来了,如下是类图:

*第二题双向链表我就是在老师给的模板上改,就是加了一个可以双向输出的previous,然后在改动一下其他地方。代码如下
package test47; public class DoubleLinkedList<E> implements DoubleLinkedListImpl<E> { // public class ListNode { // public int val; //当前节点中的数值 // public ListNode prev; //前节点的地址 // public ListNode next; //后节点的地址 // //有参构造 // public ListNode(int val){ // this.val = val; // } private Node<E> head;//头结点,非第一个节点 private Node<E> curr;//当前节点 private Node<E> tail;//最后一个节点 private int size;//当前链表节点数 public DoubleLinkedList() { //super(); // TODO Auto-generated constructor stub head = new Node<E>(); head.setNext(null); curr = tail = null; this.size = 0; } @Override public boolean isEmpty() { // TODO Auto-generated method stub if(size == 0) { return true; } else { return false; } } @Override public int getSize() { // TODO Auto-generated method stub return this.size; } public E getData(int index) { // TODO Auto-generated method stub if(size < 1 || size > this.size) { return null; } curr = head; for(int i = 0; i < index; i ++) { curr = curr.getNext(); } return curr.getData(); } @Override public void remove(int index) { // TODO Auto-generated method stub if(index < 1 || index > this.size) { return ; } curr = head; if(index == 1) { curr = head; curr = head.getNext(); head.setNext(curr.getNext()); head.setPrevious(curr.getPrevious()); }else {//找到第index - 1个节点赋给curr for(int i = 1;i < index; i++) { curr = curr.getNext(); } curr.setNext(curr.getNext().getNext()); head.getNext().setPrevious(curr); } if(index == this.size) {//如果删除的是最后一个节点 tail = curr; } this.size --;//整个链表的节点数量-1 } @Override public void add(int index, E theElement) { // TODO Auto-generated method stub if(index < 1 || index > this.size + 1) { return ; } Node<E> curr = new Node<>(); curr.setData(theElement); curr.setNext(null); //curr.getPrevious(); if(this.size == 0) { head.setNext(curr); tail = curr; }else if(index == this.size + 1) { this.tail.setNext(curr); tail = curr; }else { Node<E> tempNode = head; for(int i = 1; i < index;i++) { tempNode = tempNode.getNext(); } curr.setNext(tempNode.getNext()); curr.setPrevious(tempNode); tempNode.setNext(curr); tempNode.setPrevious(curr); } this.size ++; } // node.next = cur; // node.prev = cur.prev; // cur.prev.next = node; // cur.prev = node; @Override public void add(E element) { // TODO Auto-generated method stub this.add(this.size + 1,element); } @Override public void printList() { // TODO Auto-generated method stub curr = head.getNext(); for(int i = 1; i <= this.size;i ++) { System.out.print(curr.getData() + " "); curr = curr.getNext(); } System.out.println(""); } public E getLast() { if(this.size != 0) { return tail.getData(); } return null; } @Override public void remove() { // TODO 自动生成的方法存根 } @Override public E getFirst() { if(this.size != 0) { return head.getNext().getData(); } return null; } }
package test47; public interface DoubleLinkedListImpl<E> { public boolean isEmpty(); public int getSize(); public E getData(int index); / *删除链表中第index位置的节点 * @param index:节点在链表中的位置 */ public void remove(int index); /** * 在链表的第index个位置之前插入一个节点,值为theElement,index∈[1,size] * @param index:插入节点在链表中的位置 * @param theElement:新插入节点的data值 */ public void add(int index, E theElement); /** * 在链表尾插入节点,插入节点data值为element * @param element */ public void add(E element); /** * 输出链表 */ public void printList(); /** * 获取第一个节点的data值 * @return */ public E getFirst(); /** * 获取链表最后一个节点的data值 * @return */ public E getLast(); }
package test47; public class Node<E> { private E data; private Node<E> next; private Node<E> previous;//前驱引用(指针) public Node() { } public Node(E data, Node<E> next, Node<E> previous) { super(); this.data = data; this.next = next; this.previous = previous; } public E getData() { return data; } public void setData(E data) { this.data = data; } public Node<E> getNext() { return next; } public void setNext(Node<E> next) { this.next = next; } public Node<E> getPrevious() { return previous; } public void setPrevious(Node<E> previous) { this.previous = previous; } }
*因为是迭代作业,我们可以直接在第一题上改,
主要我们要学会前驱引用(指针)的使用。
(5)期中考试三道题目:
*期中考试的题目也是图形类设计的题目,并且也是迭代题目,前一题可以拿到后一题用,可以在前一题的基础上改,并且为了降低难度,老师还给了类图。
1、第一题,代码和类图如下:
import java.text.DecimalFormat; import java.util.Scanner; public class Main{ public static void main(String []args) { Scanner input =new Scanner(System.in); Point point1= new Point(input.nextDouble(),input.nextDouble()); Point point2= new Point(input.nextDouble(),input.nextDouble()); Line line = new Line(point1,point2,input.next()); if((point1.getX()<=0||point1.getX()>200)||(point1.getY()<=0)||(point1.getY()>200)) { System.out.println("Wrong Format"); System.exit(0); } if((point2.getX()<=0||point2.getX()>200)||(point2.getY()<=0)||(point2.getY()>200)) { System.out.println("Wrong Format"); System.exit(0); } line.display(); } } class Point{ private double x; private double y; public Point() { } public Point(double x, double y) { super(); 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() { if((x<=0||x>200)||(y<=0)||(y>200)) { System.out.println("Wrong Format"); System.exit(0); } } } class Line{ private Point point1; private Point point2; private String color; public Line() { } public Line(Point point1, Point point2, String color ) { super(); 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 double getDistance(Point point1,Point point2) { double a; a=Math.sqrt((point1.getX()-point2.getX())*(point1.getX()-point2.getX())+(point1.getY()-point2.getY())*(point1.getY()-point2.getY())); return a; } public void display() { System.out.println("The line's color is:"+getColor()); System.out.println("The line's begin point's Coordinate is:"); System.out.print("("); System.out.printf("%.2f,%.2f",point1.getX(),point1.getY()); System.out.println(")"); System.out.println("The line's end point's Coordinate is:"); System.out.print("("); System.out.printf("%.2f,%.2f",point2.getX(),point2.getY()); System.out.println(")"); System.out.print("The line's length is:"); System.out.printf("%.2f",getDistance(point1,point2)); } }

*这题我们直接按照类图设计即可。
2、第二题,代码和类图如下:
import java.text.DecimalFormat; import java.util.Scanner; public class Main{ public static void main(String []args) { Scanner input =new Scanner(System.in); Point point1= new Point(input.nextDouble(),input.nextDouble()); Point point2= new Point(input.nextDouble(),input.nextDouble()); Line line = new Line(point1,point2,input.next()); Plane plane=new Plane(line.getColor()); if((point1.getX()<=0||point1.getX()>200)||(point1.getY()<=0)||(point1.getY()>200)) { System.out.println("Wrong Format"); System.exit(0); } if((point2.getX()<=0||point2.getX()>200)||(point2.getY()<=0)||(point2.getY()>200)) { System.out.println("Wrong Format"); System.exit(0); } line.display(); plane.display(); } } class Point extends Element{ private double x; private double y; public Point() { } public Point(double x, double y) { super(); 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() { if((x<=0||x>200)||(y<=0)||(y>200)) { System.out.println("Wrong Format"); System.exit(0); } } } class Line extends Element{ private Point point1; private Point point2; private String color; public Line() { } public Line(Point point1, Point point2, String color ) { super(); 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 static double getDistance(Point point1,Point point2) { double a; a=Math.sqrt((point1.getX()-point2.getX())*(point1.getX()-point2.getX())+(point1.getY()-point2.getY())*(point1.getY()-point2.getY())); return a; } public void display() { System.out.print("("); System.out.printf("%.2f,%.2f",point1.getX(),point1.getY()); System.out.println(")"); System.out.print("("); System.out.printf("%.2f,%.2f",point2.getX(),point2.getY()); System.out.println(")"); System.out.println("The line's color is:"+getColor()); System.out.println("The line's begin point's Coordinate is:"); System.out.print("("); System.out.printf("%.2f,%.2f",point1.getX(),point1.getY()); System.out.println(")"); System.out.println("The line's end point's Coordinate is:"); System.out.print("("); System.out.printf("%.2f,%.2f",point2.getX(),point2.getY()); System.out.println(")"); System.out.print("The line's length is:"); System.out.printf("%.2f\n",getDistance(point1,point2)); } } class Plane extends Element{ private String color; public Plane(String color) { super(); 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:"+getColor()); } } class Element{ private double x; private double y; private Point point1; private Point point2; private String color; public void display() { System.out.print("("); System.out.printf("%.2f,%.2f",point1.getX(),point1.getY()); System.out.println(")"); System.out.print("("); System.out.printf("%.2f,%.2f",point2.getX(),point2.getY()); System.out.println(")"); System.out.println("The line's begin point's Coordinate is:"); System.out.print("("); System.out.printf("%.2f,%.2f",point1.getX(),point1.getY()); System.out.println(")"); System.out.println("The line's end point's Coordinate is:"); System.out.print("("); System.out.printf("%.2f,%.2f",point1.getX(),point1.getY()); System.out.println(")"); System.out.print("The line's length is:"); System.out.printf("%.2f",Line.getDistance(point1,point2)); } }
*这题要求以实现继承与多态的技术性需求,我们要再定义一个Element类的子类面Plane,然后定义一个Element类的引用,分别使用该引用调用以上四个对象的display()方法,
从而实现多态特性。
3、第三题,代码和类图如下:
import java.text.DecimalFormat; import java.util.ArrayList; import java.util.Scanner; public class Main{ public static void main(String []args) { Scanner input =new Scanner(System.in); int choice = input.nextInt(); ArrayList<Element> list = new ArrayList<Element>(); while(choice != 0) { switch(choice) { case 1://insert Point object into list Point point1= new Point(input.nextDouble(),input.nextDouble()); list.add(point1); break; case 2://insert Line object into list Point point3= new Point(input.nextDouble(),input.nextDouble()); Point point2= new Point(input.nextDouble(),input.nextDouble()); Line line = new Line(point3,point2,input.next()); list.add(line); break; case 3://insert Plane object into list Plane plane=new Plane(input.next()); list.add(plane); break; case 4://delete index - 1 object from list int index = input.nextInt(); list.remove(index-1); } choice = input.nextInt(); } for (Element element : list) { element.display(); } } } class Point extends Element{ private double x; private double y; public Point() { } public Point(double x, double y) { super(); 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() { if((x<=0||x>200)||(y<=0)||(y>200)) { System.out.println("Wrong Format"); System.exit(0); }else { System.out.print("("); System.out.printf("%.2f,%.2f",x,y); System.out.println(")"); } } } class Line extends Element{ private Point point1; private Point point2; private String color; public Line() { } public Line(Point point1, Point point2, String color ) { super(); 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 static double getDistance(Point point1,Point point2) { double a; a=Math.sqrt((point1.getX()-point2.getX())*(point1.getX()-point2.getX())+(point1.getY()-point2.getY())*(point1.getY()-point2.getY())); return a; } public void display() { System.out.println("The line's color is:"+getColor()); System.out.println("The line's begin point's Coordinate is:"); System.out.print("("); System.out.printf("%.2f,%.2f",point1.getX(),point1.getY()); System.out.println(")"); System.out.println("The line's end point's Coordinate is:"); System.out.print("("); System.out.printf("%.2f,%.2f",point2.getX(),point2.getY()); System.out.println(")"); System.out.print("The line's length is:"); System.out.printf("%.2f\n",getDistance(point1,point2)); } } class Plane extends Element{ private String color; public Plane(String color) { super(); 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:"+getColor()); } } class Element{ private double x; private double y; private Point point1; private Point point2; private String color; public void display() { System.out.print("("); System.out.printf("%.2f,%.2f",point1.getX(),point1.getY()); System.out.println(")"); System.out.print("("); System.out.printf("%.2f,%.2f",point2.getX(),point2.getY()); System.out.println(")"); System.out.println("The line's begin point's Coordinate is:"); System.out.print("("); System.out.printf("%.2f,%.2f",point1.getX(),point1.getY()); System.out.println(")"); System.out.println("The line's end point's Coordinate is:"); System.out.print("("); System.out.printf("%.2f,%.2f",point1.getX(),point1.getY()); System.out.println(")"); System.out.print("The line's length is:"); System.out.printf("%.2f",Line.getDistance(point1,point2)); } } class GeometryObject{ ArrayList<Element> list = new ArrayList<Element>(); public GeometryObject() { super(); } public void add(Element element) { list.add(element); } public void remove(int index) { if(index>0) list.remove(index); } public ArrayList<Element> getList(){ return list; } }
ArrayList<Element>
add()
remove(int index)
index - 1
三·踩坑心得:
1、问题1与心得:
*题目集4 7-2:忘记判断选项4两直线平行的情况:
*解决方法:加上如下代码。
else if((x1==x2)&&(y1!=y2)&&(x3==x4)&&(y3!=y4)) { System.out.println("true"); System.exit(0);
*心得:要仔细考虑问题,综合考虑各种情况。
2、问题2与心得:
*题目集4 7-3 求面积,周长小数保留问题,注意:输出的数据若小数点后超过6位,只保留小数点后6位,多余部分采用四舍五入规则进到
最低位。小数点后若不足6位,按原始位数显示,不必补齐。例如:1/3的结果按格式输出为 0.333333,1.0按格式输出为1.0。一开始我没
注意到这个问题导致我始终不对,最后才发现问题。
*解决方法:使用下列函数:


*心得:要好好看问题,多学新东西。
3、问题3与心得:
*期中考试第一题:无法输出颜色。

*解决方法:将nextLine()改为next();

*心得:注意字符串基本用法,next()和nextLine()的区别。
4、问题4与心得:
*期中考试第三题:remove 的index超界。
*解决方法:如下:

*心得:注意边界问题。
四·改进建议:
1、图形界面类的格式判断我用了简单if语句,其实还可以用正则表达式进行改进。对比如下:
for(int j=0;j<a.length()-1;j++){ if((a.charAt(j)=='+'&&a.charAt(j+1)=='+')||(a.charAt(j)=='-'&&a.charAt(j+1)=='-')||(a.charAt(j)=='+'&&a.charAt(j+1)=='-')||(a.charAt(j)=='-'&&a.charAt(j+1)=='+')||(a.charAt(j)=='.'&&a.charAt(j+1)==',')||(a.charAt(j)==','&&a.charAt(j+1)=='.')|| (a.charAt(j)=='0'&&a.charAt(j+1)=='0')||(a.charAt(j)=='.'&&a.charAt(j+1)==' ')||(a.charAt(j)==' '&&a.charAt(j+1)=='.')||(a.charAt(j)=='.'&&a.charAt(j+1)=='.')||(a.charAt(j)==' '&&a.charAt(j+1)==',')|| (a.charAt(j)==','&&a.charAt(j+1)==' ')||(a.charAt(j)==' '&&a.charAt(j+1)==' ')||(a.charAt(j)==','&&a.charAt(j+1)==',')||a.charAt(0)=='.'||a.charAt(0)==','||sum==0){ System.out.println("Wrong Format"); System.exit(0); }
if(a.matches("[1-5]:((\\+|\\-)?(\\d+)(\\.)?(\\d+)?,(\\+|\\-)?(\\d+)(\\.)?(\\d+)?\\s)*"+ "((\\+|\\-)?(\\d+)(\\.)?(\\d+)?\\,(\\+|\\-)?(\\d+)(\\.)?(\\d+)?)" + "\\s?")) { System.out.println("Wrong Format"); System.exit(0); }
2、图形界面类的问题,我直接在主方法写的,其实也可以建立类和方法进行编写。对比如下:
import java.text.DecimalFormat; import java.util.Scanner; public class Main{ public static void main(String []args) { Scanner in =new Scanner(System.in); int sum=0; double m=0,x1=0,x2=0,y1=0,y2=0,x3=0,x4=0,y3=0,y4=0,t=0,kab=0,kac=0,kbc=0,kad=0,kbd=0,kcd=0,x5=0,y5=0,x6=0,y6=0; int flag=0; String a = in.nextLine(); int choice=Integer.parseInt(a.substring(0,1)); for(int i=0;i<a.length()-1;i++) { if(a.charAt(i)==' ') { sum++; } } if(choice>5||choice<1) { System.out.println("Wrong Format"); System.exit(0); } if(sum==0){ System.out.println("Wrong Format"); System.exit(0); } if(choice==1) { String[] c = a.split(" "); String[] d = c[0].split(","); String[] f = c[1].split(","); String[] e = c[2].split(","); String[] g = c[3].split(","); x1=Double.parseDouble(d[0].substring(2, d[0].length())); y1=Double.parseDouble(d[1]); x2=Double.parseDouble(f[0]); y2=Double.parseDouble(f[1]); x3=Double.parseDouble(e[0]); y3=Double.parseDouble(e[1]); x4=Double.parseDouble(g[0]); y4=Double.parseDouble(g[1]); kab=(y1-y2)/(x1-x2); kac=(y1-y3)/(x1-x3); kad=(y1-y4)/(x1-x4); kbc=(y3-y2)/(x3-x2); kbd=(y4-y2)/(x4-x2); kcd=(y3-y4)/(x3-x4); if(sum!=3) { System.out.println("wrong number of points"); System.exit(0); } if((x1==x2&&y1==y2)||(x1==x3&&y1==y3)||(x2==x3&&y2==y3)||(x4==x2&&y4==y2)||(x3==x4&&y3==y4)) { System.out.println("points coincide"); System.exit(0); } if((x1-x2)==0&&(x3-x4)==0||(x1-x3)==0&&(x2-x4)==0||(x1-x4)==0&&(x3-x2)==0) { System.out.print("true"+" "); flag=1; } else if(kab==kac||kab==kad||kab==kbc||kab==kbd||kac==kad||kac==kbc||kac==kcd||kad==kbd||kad==kcd||kbc==kbd||kbc==kcd||kbd==kcd) { System.out.print("false"+" "); flag=0; } else { System.out.print("true"+" "); flag=1; } if(flag==1&&((kab==kcd)&&(kbc==kad)||(kac==kbd)&&(kab==kcd)||(kad==kbc)&&(kab==kcd)||(kbc==kad)&&(kab==kcd)||(kbd==kac)&&(kab==kcd)||(x1-x2)==0&&(x3-x4)==0&&kbc==kad||(x1-x3)==0&&(x2-x4)==0&&kcd==kab||(x1-x4)==0&&(x3-x2)==0&&kab==kcd)){ System.out.print("true"); } else { System.out.print("false"); } } if(choice==2) { String[] c = a.split(" "); String[] d = c[0].split(","); String[] f = c[1].split(","); String[] e = c[2].split(","); String[] g = c[3].split(","); x1=Double.parseDouble(d[0].substring(2, d[0].length())); y1=Double.parseDouble(d[1]); x2=Double.parseDouble(f[0]); y2=Double.parseDouble(f[1]); x3=Double.parseDouble(e[0]); y3=Double.parseDouble(e[1]); x4=Double.parseDouble(g[0]); y4=Double.parseDouble(g[1]); kab=(y1-y2)/(x1-x2); kac=(y1-y3)/(x1-x3); kad=(y1-y4)/(x1-x4); kbc=(y3-y2)/(x3-x2); kbd=(y4-y2)/(x4-x2); kcd=(y3-y4)/(x3-x4); double l1=Math.sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2)); double l2=Math.sqrt((x3-x2)*(x3-x2)+(y3-y2)*(y3-y2)); double l3=Math.sqrt((x4-x3)*(x4-x3)+(y4-y3)*(y4-y3)); double l4=Math.sqrt((x4-x1)*(x4-x1)+(y4-y1)*(y4-y1)); double l5=Math.sqrt((x4-x2)*(x4-x2)+(y4-y2)*(y4-y2)); double l6=Math.sqrt((x3-x1)*(x3-x1)+(y3-y1)*(y3-y1)); if(sum==0) { System.out.println("Wrong Format"); System.exit(0); } if(sum!=3) { System.out.println("wrong number of points"); System.exit(0); } if((x1==x2&&y1==y2)||(x1==x3&&y1==y3)||(x2==x3&&y2==y3)||(x4==x2&&y4==y2)||(x3==x4&&y3==y4)) { System.out.println("not a quadrilateral"); System.exit(0); } if(kab==kac||kab==kad||kab==kbc||kab==kbd||kac==kad||kac==kbc||kac==kcd||kad==kbd||kad==kcd||kbc==kbd||kbc==kcd||kbd==kcd) { System.out.print("not a quadrilateral"); System.exit(0); } if((x1-x2)==0&&(x3-x4)==0||(x1-x3)==0&&(x2-x4)==0||(x1-x4)==0&&(x3-x2)==0) { flag=1; } else if(kab==kac||kab==kad||kab==kbc||kab==kbd||kac==kad||kac==kbc||kac==kcd||kad==kbd||kad==kcd||kbc==kbd||kbc==kcd||kbd==kcd) { flag=0; } else { flag=1; } if(flag==1&&((kab==kcd)&&(kbc==kad)||(kac==kbd)&&(kab==kcd)||(kad==kbc)&&(kab==kcd)||(kbc==kad)&&(kab==kcd)||(kbd==kac)&&(kab==kcd)||(x1-x2)==0&&(x3-x4)==0&&kbc==kad||(x1-x3)==0&&(x2-x4)==0&&kcd==kab||(x1-x4)==0&&(x3-x2)==0&&kab==kcd)){ flag=2; } else { flag=1; } if(flag==2&&(l1==l2||l2==l3||l3==l4||l4==l1)) {//判断菱形 System.out.print("true"+" "); } else { System.out.print("false"+" "); } if(flag==2&&(l6==l5)) { System.out.print("true"+" "); flag=3; } else { System.out.print("false"+" "); } if(flag==3&&(l1==l2||l2==l3||l3==l4||l4==l1)) { System.out.print("true"); } else { System.out.print("false"); } } if(choice==3) { String[] c = a.split(" "); String[] d = c[0].split(","); String[] f = c[1].split(","); String[] e = c[2].split(","); String[] g = c[3].split(","); //int flag=0; x1=Double.parseDouble(d[0].substring(2, d[0].length())); y1=Double.parseDouble(d[1]); x2=Double.parseDouble(f[0]); y2=Double.parseDouble(f[1]); x3=Double.parseDouble(e[0]); y3=Double.parseDouble(e[1]); x4=Double.parseDouble(g[0]); y4=Double.parseDouble(g[1]); kab=(y1-y2)/(x1-x2); kac=(y1-y3)/(x1-x3); kad=(y1-y4)/(x1-x4); kbc=(y3-y2)/(x3-x2); kbd=(y4-y2)/(x4-x2); kcd=(y3-y4)/(x3-x4); double l1=Math.sqrt((x2-x1)*(x2-x1)+(y2-y1)*(y2-y1)); double l2=Math.sqrt((x4-x1)*(x4-x1)+(y4-y1)*(y4-y1)); double l3=Math.sqrt((x3-x4)*(x3-x4)+(y3-y4)*(y3-y4)); double l4=Math.sqrt((x3-x2)*(x3-x2)+(y3-y2)*(y3-y2)); double l5=Math.sqrt((x3-x1)*(x3-x1)+(y3-y1)*(y3-y1)); double l6=Math.sqrt((x4-x2)*(x4-x2)+(y4-y2)*(y4-y2)); double p1=(l1+l4+l5)/2; double s1=Math.sqrt(p1*(p1-l1)*(p1-l4)*(p1-l5));//s1 double p2=(l3+l2+l5)/2; double s2=Math.sqrt(p2*(p2-l3)*(p2-l2)*(p2-l5));//s2 double p3=(l3+l4+l6)/2; double s3=Math.sqrt(p3*(p3-l3)*(p3-l4)*(p3-l6));//s3 double p4=(l1+l2+l6)/2; double s4=Math.sqrt(p4*(p4-l1)*(p4-l2)*(p4-l6));//s4 double k=l1+l2+l3+l4;//周长 double z=k/2; double s=0.5*Math.abs((x3-x1)*(y4-y2)-(y3-y1)*(x4-x2)); if(sum==0) { System.out.println("Wrong Format"); System.exit(0); } if(sum!=3) { System.out.println("wrong number of points"); System.exit(0); } if((x1==x2&&y1==y2)||(x1==x3&&y1==y3)||(x2==x3&&y2==y3)||(x4==x2&&y4==y2)||(x3==x4&&y3==y4)) { System.out.println("not a quadrilateral"); System.exit(0); } if(kab==kac||kab==kad||kab==kbc||kab==kbd||kac==kad||kac==kbc||kac==kcd||kad==kbd||kad==kcd||kbc==kbd||kbc==kcd||kbd==kcd) { System.out.print("not a quadrilateral"); System.exit(0); } if((s1+s2)==(s3+s4)) { System.out.print("true"+" "); }else { System.out.print("false"+" "); } DecimalFormat js=new DecimalFormat("0.0##"); System.out.print(js.format(k)+" "+js.format(s)); } if(choice==4){ int k=0,p=0,l=0,j=0,n=0; String[] c = a.split(" "); String[] d = c[0].split(","); String[] f = c[1].split(","); String[] e = c[2].split(","); String[] g = c[3].split(","); String[] h = c[4].split(","); String[] i = c[5].split(","); x1=Double.parseDouble(d[0].substring(2, d[0].length())); y1=Double.parseDouble(d[1]); x2=Double.parseDouble(f[0]); y2=Double.parseDouble(f[1]); x3=Double.parseDouble(e[0]); y3=Double.parseDouble(e[1]); x4=Double.parseDouble(g[0]); y4=Double.parseDouble(g[1]); x5=Double.parseDouble(h[0]); y5=Double.parseDouble(h[1]); x6=Double.parseDouble(i[0]); y6=Double.parseDouble(i[1]); kab=(y1-y2)/(x1-x2); kac=(y1-y3)/(x1-x3); kad=(y1-y4)/(x1-x4); kbc=(y3-y2)/(x3-x2); kbd=(y4-y2)/(x4-x2); kcd=(y3-y4)/(x3-x4); double kde=(y5-y4)/(x5-x4); double kef=(y5-y6)/(x5-x6); double kcf=(y6-y3)/(x6-x3); double kae=(y5-y1)/(x5-x1); double kbe=(y5-y2)/(x5-x2); double kbf=(y6-y2)/(x6-x2); double kce=(y5-y3)/(x5-x3); double kfd=(y6-y4)/(x6-x4); if(sum==0) { System.out.println("Wrong Format"); System.exit(0); } if(sum!=5){ System.out.println("wrong number of points"); System.exit(0); } if((x3==x4&&x3==x5&&y3==y4&&y3==y5)||(x3==x4&&x3==x6&&y3==y4&&y3==y6)||(x4==x5&&x4==x6&&y4==y5&&y4==y6)||(x3==x5&&x3==x6&&y3==y5&&y3==y6)) { System.out.println("not a quadrilateral or triangle"); System.exit(0); } if((x3==x4&&y3==y4&&x5==x6&&y5==y6)||(x3==x5&&y3==y5&&x4==x6&&y4==y6)||(x3==x6&&y3==y6&&x4==x5&&y4==y5)) { System.out.println("not a quadrilateral or triangle"); System.exit(0); } if((kab==kcd&&kac==kbd)||(kab==kde&&kad==kbe)||(kab==kef&&kae==kbf)||(kab==kcf&&kac==kbf)) { System.out.print("The line is coincide with one of the lines"); System.exit(0); } if((x3-x4)==0&&(x5-x6)==0||(x5-x3)==0&&(x6-x4)==0||(x3-x6)==0&&(x4-x5)==0) { flag=1; } else if(kef==kac||kef==kde||kef==kbc||kef==kbd||kce==kde||kce==kcf||kce==kcd||kde==kfd||kde==kcd||kcf==kfd||kcf==kcd||kfd==kcd) { flag=0; } else { flag=1; } m=(y1-y2)/(x1-x2); t=(y4-y3)/(x4-x3); double ra=(y5-y4)/(x5-x4); double te=(y6-y5)/(x6-x5);// //ab,cf, float x=(float)((y1+t*x3-y3-m*x1)/(t-m)); float y=(float)(y1+m*(x-x1)); float q=(float)((y5-y1+m*x1-ra*x5)/(m-ra)); float w=(float)(y5+ra*(q-x5)); float o=(float)((y5+m*x1-y1-te*x5)/(m-te)); float r=(float)(y5+te*(o-x5)); float x7=(float)((y1-m*x1-y3-kcf*x3)/(kcf-m));// float y7=(float)(y1+m*(x7-x1));// if((x>x3&&x<x4)||(x<x3&&x>x4)||(x==x3&&y==y3)||(x==x4&&y==y4)) { p++; k=1; } if((q>x4&&q<x5)||(q<x4&&q>x5)||(q==x4&&w==y4)||(q==x5&&w==y5)) { p++; l=1; } if((o>=x6&&o<=x5)||(o<=x6&&o>=x5)||(o==x6&&r==y6)||(o==x5&&r==y5)) { p++; j=1; } if((x7>=x3&&x7<=x6)||(x7<=x3&&x7>=x6)||(x7==x3&&y7==y3)||(x7==x6&&y7==y6)) { p++; n=1; } System.out.print(p); double s3=0.5*Math.abs((x5-x3)*(y6-y4)-(y5-y3)*(x6-x4)); if(p==2&&flag==1) { DecimalFormat js=new DecimalFormat("0.0##"); if(k==1&&j==1) { double s1=0.5*Math.abs((o-x4)*(y-y5)-(r-y4)*(x-x5)); double s2=Math.abs(s3-s1); if(s1<=s2) { System.out.print(" "+js.format(s1)+" "+js.format(s2)); } else { System.out.print(" "+js.format(s2)+" "+js.format(s1)); } } if(k==1&&l==1) { double fi=(double)(Math.sqrt((x4-x)*(x4-x)+(y4-y)*(y4-y))); double se=(double)(Math.sqrt((x-q)*(x-q)+(y-w)*(y-w))); double th=(double)(Math.sqrt((x4-q)*(x4-q)+(y4-w)*(y4-w))); double p1=(fi+se+th)/2; double s1=Math.sqrt(p1*(p1-fi)*(p1-se)*(p1-th)); double s2=Math.abs(s3-s1); if(s1<=s2) { System.out.print(" "+js.format(s1)+" "+js.format(s2)); } else { System.out.print(" "+js.format(s2)+" "+js.format(s1)); } } if(k==1&&n==1) { double fi=(double)(Math.sqrt((x4-x)*(x4-x)+(y4-y)*(y4-y))); double se=(double)(Math.sqrt((x-x7)*(x-x7)+(y-y7)*(y-y7))); double th=(double)(Math.sqrt((x4-x7)*(x4-x7)+(y4-y7)*(y4-y7))); double p1=(fi+se+th)/2; double s1=Math.sqrt(p1*(p1-fi)*(p1-se)*(p1-th)); double s2=Math.abs(s3-s1); if(s1<=s2) { System.out.print(" "+js.format(s1)+" "+js.format(s2)); } else { System.out.print(" "+js.format(s2)+" "+js.format(s1)); } } if(l==1&&j==1) { double fi=(double)(Math.sqrt((x5-q)*(x5-q)+(y5-w)*(y5-w))); double se=(double)(Math.sqrt((q-o)*(q-o)+(w-r)*(w-r))); double th=(double)(Math.sqrt((x5-o)*(x5-o)+(y5-r)*(y5-r))); double p1=(fi+se+th)/2; double s1=Math.sqrt(p1*(p1-fi)*(p1-se)*(p1-th)); double s2=Math.abs(s3-s1); if(s1<=s2) { System.out.print(" "+js.format(s1)+" "+js.format(s2)); } else { System.out.print(" "+js.format(s2)+" "+js.format(s1)); } } if(n==1&&l==1) { double s11=0.5*Math.abs((x5-x7)*(w-y6)-(y5-y7)*(q-x6)); double s22=Math.abs(s3-s11); if(s11<=s22) { System.out.print(" "+js.format(s11)+" "+js.format(s22)); } else { System.out.print(" "+js.format(s22)+" "+js.format(s11)); } } if(n==1&&j==1) { double fi=(double)(Math.sqrt((x7-o)*(x7-o)+(y7-r)*(y7-r))); double se=(double)(Math.sqrt((x6-o)*(x6-o)+(y6-r)*(y6-r))); double th=(double)(Math.sqrt((x6-x7)*(x6-x7)+(y6-y7)*(y6-y7))); double p1=(fi+se+th)/2; double s1=Math.sqrt(p1*(p1-fi)*(p1-se)*(p1-th)); double s2=Math.abs(s3-s1); if(s1<=s2) { System.out.print(" "+js.format(s1)+" "+js.format(s2)); } else { System.out.print(" "+js.format(s2)+" "+js.format(s1)); } } } if(flag==0&&p==2) { } } if(choice==5) { String[] c = a.split(" "); String[] d = c[0].split(","); String[] f = c[1].split(","); String[] e = c[2].split(","); String[] g = c[3].split(","); String[] h = c[4].split(","); x1=Double.parseDouble(d[0].substring(2, d[0].length())); y1=Double.parseDouble(d[1]); x2=Double.parseDouble(f[0]); y2=Double.parseDouble(f[1]); x3=Double.parseDouble(e[0]); y3=Double.parseDouble(e[1]); x4=Double.parseDouble(g[0]); y4=Double.parseDouble(g[1]); x5=Double.parseDouble(h[0]); y5=Double.parseDouble(h[1]); double z1, z2, z3, z4; z1 = ((x2 - x1) * (y4 - y1) - (x4 - x1) * (y2 - y1)); z2 = ((x4 - x1) * (y3 - y1) - (x3 - x1) * (y4 - y1)); z3 = ((x4 - x2) * (y3 - y2) - (x3 - x2) * (y4 - y2)); z4 = ((x3 - x2) * (y1 - y2) - (x1 - x2) * (y3 - y2)); if((z1 * z2 > 0) && (z3 * z4 > 0)) { flag=1;//是凸四边形 System.out.println("in the quadrilateral"); } else { System.out.println("in the triangle"); flag=0; } if(y1==((y3-y2)/(x3-x2))*(x1-x3)+y3||y1==((y3-y4)/(x3-x4))*(x1-x4)+y4||y1==((y4-y2)/(x4-x2))*(x1-x2)+y2) { System.out.println("on the quadrilateral"); System.exit(0); } if((x3==x4&&x3==x5&&y3==y4&&y3==y5)||(x3==x4&&x3==x6&&y3==y4&&y3==y6)||(x4==x5&&x4==x6&&y4==y5&&y4==y6)||(x3==x5&&x3==x6&&y3==y5&&y3==y6)) { System.out.println("not a quadrilateral or triangle"); System.exit(0); } if((x3==x4&&y3==y4&&x5==x6&&y5==y6)||(x3==x5&&y3==y5&&x4==x6&&y4==y6)||(x3==x6&&y3==y6&&x4==x5&&y4==y5)) { System.out.println("not a quadrilateral or triangle"); System.exit(0); } } } }
if(parallelogram(x1,y1,x2,y2,x3,y3,x4,y4)&&k1*k2==-1||x1==x2&&y2==y3){ return true; }else return false; } public static boolean Square(double x1,double y1,double x2,double y2,double x3,double y3,double x4,double y4){//判断正方形 136 if(Rectangle(x1,y1,x2,y2,x3,y3,x4,y4)&&Linxing(x1,y1,x2,y2,x3,y3,x4,y4)){ return true; }else return false; } public static double judge(double x1,double y1,double x2,double y2,double x3,double y3){ double a=Distance(x1,y1,x2,y2)+Distance(x1,y1,x3,y3)+Distance(x3,y3,x2,y2); double b=a/2; return Math.sqrt(b*(b-Distance(x1,y1,x2,y2))*(b-Distance(x1,y1,x3,y3))*(b-Distance(x3,y3,x2,y2))); } public static boolean aotu(double x1,double y1,double x2,double y2,double x3,double y3,double x4,double y4){ double a = judge(x1,y1,x2,y2,x3,y3); double b = judge(x2,y2,x3,y3,x4,y4); double c = judge(x1,y1,x3,y3,x4,y4); double d = judge(x1,y1,x2,y2,x4,y4); 153 if((a+c)==(b+d)) { return true; } else { return false; } } public static double Perimeter(double x1,double y1,double x2,double y2,double x3,double y3,double x4,double y4) { double p = Distance(x1,y1,x2,y2)+Distance(x2,y2,x3,y3)+Distance(x3,y3,x4,y4)+Distance(x1,y1,x4,y4); double q = p*1000; double m = Math.round(q); return m/1000; }(仅截取部分代码)
五·总结:
*经过7-10周的学习,我认为我主要还是提升了主在各种数据的处理方面,对类和对象的理解,逻辑思维能力,考虑问题全面能力。PTA作业。
*说实话作业的时间是够写的,但是我感觉有难度,pta作业图形界面迭代作业有一定难度,我有好几题没有满分;超星链表题目我也慢慢地写,经过询问多次同学才解决部分;期中考试比较而言更简单,但是最后还是差一点。考察了我们对面向对象的思考了,不再只是写在一个主类了,不只是考察我们的基本写一些代码的问题了,更多的是考察我们对面向对象这一实质的思考与研究,利用数据的私有和不同类之间的关联,考虑问题的全面性。我以后一定要更加努力。
*希望老师能开放多一些测试点供我们学习,没有在规定时间写完也能出一下不计分的原题,可以让没有及时解决问题的同学继续尝试解决,老师也可以讲一讲PTA的题目(在规定时间之后)。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 因为Apifox不支持离线,我果断选择了Apipost!
· 通过 API 将Deepseek响应流式内容输出到前端