博客作业(1)
前言
在连续三周完成pta作业后,写出此博客。
第一周的pta作业即使我当时对JAVA各种语法掌握不熟练,还是打眼一瞅就知道很简单的地步,是的,虽然当时的我确实不会。于是开始在前几天去看视频学习基础语法。编译环境在第一次上JAVA课之前就已经安装成功,还好在不知道具体哪个好用的情况下选择了eclipse,确实是方便快捷,包括老师发的实验附件也是以eclipse作为例子。
综合来说三次习题的难度是层层递进的,而第一次很基础但是题量较大,很有效的让我记住了一些基础语法,第二题难度稍有提升,但总体完成度与完成速率还是不错的,第三次是困难较大的,并没有得到优秀的分数,也借鉴了很多同学的博客,由于代码逻辑复杂以及涉及到选项以及数学解决问题,去看大家的代码就已经花了很长时间了,一点点摸清逻辑,和自己的代码比对看问题出在哪里加以改正;
因为第一次pta的题量很大,虽然很简单,但是因为我自身掌握还很不熟练,所以对于我自己来说是有一点小困难的。于是第一次属于边学边写的状态,发现JAVA语言和C语言有很多共通之处的时候还是很庆幸的,说明学习难度会减少很多。
第一周PTA
由于代码总体较简单,所以不进行题目与代码粘贴,只输出相应圈复杂度衡量图。笔者自身是很喜欢用“if else”“while”等语句的,而圈复杂度判断正是主要根据这些语句,所以有很多题目我的六边形都有边超出了绿色部分。
老师有讲到有效的办法之一是将所有相关语句都拎出来单独构成函数,但是!很鸡肋的是我不仅喜欢用如上的语句,还很不喜欢用太多函数,啊,难搞,但是还好目前的代码不太难搞哦。
PTA11
PTA12
PTA13
PTA14
PTA15
PTA16
PTA17
PTA18
PTA19
第二周PTA
第一题
第二周PTA由于上一周有效的题量训练,基础还不错。第一题涉及到阿斯克码,有些忘记了进行了查询,在用if语句进行判断的时候本来还是想用阿斯克码的,但是在其他同学的博客里首次接触到了正则表达式,很巧的是刚进行了学习,老师在下一次课上就讲到了正则表达式,然后发现书上也有相关内容,但是介绍的都是比较典型的用法,有点看不懂还感觉不是很全面,就自己进行了视频学习。
PTA21
第二题
第二题是我放在最后写的,因为连续两天一直没有读懂题,但是在某天我读了n遍一下子就读懂题后,觉得这个题还是很简单的。可以根据代码看出来我用了很多的判断语句,所以圈复杂度的图里六个点中有四个点都超出了绿色部分。判断“数据全为1”的正则表达式是我按照第一题照葫芦画瓢写出来的,没想到竟然真的对了。在判断奇偶校验是否正确的时候一开始没想用1的个数来判断,因为这样的话还要设置一个“count”变量,我想让我的代码尽量简洁一点,所以就用“if”语句判断所有数据是否全为0,但是感觉脱离题意不太正确,就用了“count”变量来计数,判断奇偶校验。其他的问题并没有出现。
题目与代码如下:
7-2 串口字符解析
RS232是串口常用的通信协议,在异步通信模式下,串口可以一次发送5~8位数据,收发双方之间没有数据发送时线路维持高电平,相当于接收方持续收到数据“1”(称为空闲位),发送方有数据发送时,会在有效数据(5~8位,具体位数由通信双方提前设置)前加上1位起始位“0”,在有效数据之后加上1位可选的奇偶校验位和1位结束位“1”。请编写程序,模拟串口接收处理程序,注:假定有效数据是8位,奇偶校验位采用奇校验。
输入格式:
由0、1组成的二进制数据流。例如:11110111010111111001001101111111011111111101111
输出格式:
过滤掉空闲、起始、结束以及奇偶校验位之后的数据,数据之前加上序号和英文冒号。
如有多个数据,每个数据单独一行显示。
若数据不足11位或者输入数据全1没有起始位,则输出"null data",
若某个数据的结束符不为1,则输出“validate error”。
若某个数据奇偶校验错误,则输出“parity check error”。
若数据结束符和奇偶校验均不合格,输出“validate error”。
如:11011或11111111111111111。
例如:
1:11101011
2:01001101
3:validate error
输入样例:
在这里给出一组输入。例如:
1111011101011111111111
输出样例:
在这里给出相应的输出。例如:
1:11101011
输入样例1:
在这里给出一组输入。例如:
11110111010111111001001101111111011111111101111
输出样例1:
在这里给出相应的输出。例如:
1:11101011
2:01001101
3:validate error
输入样例2:
输入数据不足11位。例如:
111101
输出样例2:
在这里给出相应的输出。例如:
null data
输入样例3:
输入数据全1没有起始位。例如:
1111111111111111
输出样例3:
在这里给出相应的输出。例如:
null data
输入样例4:
输入数据全1没有起始位。例如:
111101110101111111101111111101
输出样例4:
在这里给出相应的输出。例如:
1:11101011
2:parity check error
输入样例5:
两组数据结束符和奇偶校验均不合格。例如:
111000000000000011100000000000000
输出样例5:
在这里给出相应的输出。例如:
1:validate error
2:validate error
输入样例6:
两组数据,数据之间无空闲位。例如:
1110000000001100111000001
输出样例6:
在这里给出相应的输出。例如:
1:00000000
2:01110000
1 import java.util.Scanner; 2 public class Main{ 3 public static void main(String[] args){ 4 Scanner i=new Scanner(System.in); 5 String s=i.nextLine(); 6 int n=1; 7 if(s.matches("^[1]*$")||s.length()<11){//数据不足11位或者输入数据全1没有起始位 8 System.out.print("null data"); 9 10 } 11 else{ 12 for(int a=0;a<s.length();a++){ 13 if(s.charAt(a)=='0'&&a+10<s.length()){ 14 int count=0; 15 for(int b=a+1;b<=a+9;b++){ 16 if(s.charAt(b)=='1'){ 17 count++; 18 } 19 } 20 21 if(count%2!=0&&s.charAt(a+10)=='1'){ 22 System.out.println(n+":"+s.substring(a+1,a+9)); 23 n++; 24 25 } 26 else if(count%2==0&&s.charAt(a+10)=='1'){ 27 System.out.println(n+":"+"parity check error"); 28 n++; 29 } 30 else{//某个数据的结束符不为1 31 System.out.println(n+":"+"validate error"); 32 n++; 33 } 34 a=a+10; 35 } 36 } 37 } 38 } 39 }
PTA22
第三题
第三题首先就是学会了用“nextLine”,刚开始因为字符串里每一个单独的数据都是整数,所以用了nextInt,然后就是s.substring(),括号中的两个数据是字符下标十五起点和终点,而终点并不包含在内。其他问题没有出现
PTA23
第三周PTA
第一题
这道题的思路是把两个点的坐标用空格作为识别符,分成一个字符串中的两个字符,然后再建立一个数组num来储存每个点的横纵坐标,通过字符串中字符下标不同的特点来用num可以储存两个点的横纵坐标。分割字符串也是进行了自主学习才明白“split”的用法,以及括号中是不同分隔符时所需要的“/”的个数有所不同。字符串的长度“s.length”后不需要加括号。进行double形式的赋值时语句是“double d= Double.valueOf(num[0]);”。刚开始求平方用了“^2”,编译有错误,改成“Math.sqrt()”,括号中老老实实用两位数相乘来计算。
题目与代码如下:
7-1 点线形系列1-计算两点之间的距离
输入连个点的坐标,计算两点之间的距离
输入格式:
4个double类型的实数,两个点的x,y坐标,依次是x1、y1、x2、y2,两个点的坐标之间以空格分隔,每个点的x,y坐标以英文“,”分隔。例如:0,0 1,1或0.1,-0.3 +3.5,15.6。
若输入格式非法,输出"Wrong Format"。
若输入格式合法但坐标点的数量超过两个,输出“wrong number of points”。
输出格式:
计算所得的两点之间的距离。例如:1.4142135623730951
输入样例:
整数输入。例如:
0,0 1,1
输出样例:
在这里给出相应的输出。例如:
1.4142135623730951
输入样例1:
带符号double类型实数输入。例如:
+2,-2.3 0.9,-3.2
输出样例1:
在这里给出相应的输出。例如:
1.42126704035519
输入样例2:
格式非法。例如:
++2,-2.3 0.9,-3.2
输出样例2:
在这里给出相应的输出。例如:
Wrong Format
输入样例3:
点的数量超过两个。例如:
+2,-2.3 0.9,-3.2 +2,-2.3
输出样例3:
在这里给出相应的输出。例如:
wrong number of points
1 import java.util.Scanner; 2 3 public class Main{ 4 public static void main(String[] args){ 5 Scanner i=new Scanner(System.in); 6 String a=i.nextLine(); 7 String s[]=a.split(" ");//定义一个字符串数组s用来保存分割后的字符串,用空格做分隔符 8 //i做为需要被分割的字符串 9 String num[]=null;//建立一个储存一个点横纵坐标的数组 10 for(String b:s){ 11 num=b.split(","); 12 for(String c:num){ 13 if(!c.matches("^[+-]?(0|(0\\.\\d+)?|[1-9][0-9]*(\\.\\d+)?)$")) { 14 System.out.print("Wrong Format"); 15 System.exit(0); 16 } 17 } 18 } 19 //不是两个点 20 if(s.length!=2) { 21 System.out.print("wrong number of points"); 22 System.exit(0); 23 } 24 //s储存的是点的坐标,s[0]指第一个点的坐标,以此类推 25 //num储存的是坐标分割成的两个数值,num[0]横坐标,num[1]纵坐标 26 num =s[0].split(","); 27 double d= Double.valueOf(num[0]);//横坐标的赋值给d 28 double e= Double.valueOf(num[1]);//纵坐标赋值给e 29 num =s[1].split(","); 30 double f= Double.valueOf(num[0]);//第二个点同上 31 double g= Double.valueOf(num[1]); 32 //输入了两个点但横纵坐标相同,错误输入 33 if(d==f&&e==g){ 34 System.out.print("Wrong Format"); 35 return; 36 } 37 System.out.println(Math.sqrt((d-f)*(d-f)+(e-g)*(e-g))); 38 //输出计算结果 39 40 i.close(); 41 } 42 }
PTA31
第二题
这道题涉及到新的方面首先就是要做选择,选项有5个最方便的就是switch语句,进行了学习后发现和C语言没什么区别,每一个选项都写生函数,否则就要用if语句,圈复杂度会增大,不利于代码的可读性。刚开始没有注意看到输入格式要求,发现代码健壮性很差,同时注意到了问题,加上了判断输入点个数的函数及其调用。判断相同点,计算斜率及两点间距离没什么问题,与之前写过代码的区别就是单独写出了一个函数进行相关计算。判断是否在线段内起初并没有打算再套用函数,因为不是很喜欢用函数,用的也不是很好,但是看过其他同学的代码之后发现在这个函数中用max和min函数,代码很容易看,也更美观,所以放弃了之前的想法。判断两条线是否平行时只考虑了斜率,没有考虑重合。综合来说,在每一处都有一些思路偏差,但是最终没有什么大问题。
题目和代码如下:
7-2 点线形系列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"。
输入格式:
基本格式:选项+":"+坐标x+","+坐标y+" "+坐标x+","+坐标y。
例如:1:0,0 1,1
如果不符合基本格式,输出"Wrong Format"。
如果符合基本格式,但输入点的数量不符合要求,输出"wrong number of points"。
不论哪个选项,如果格式、点数量都符合要求,但构成任一条线的两个点坐标重合,输出"points coincide",
输出格式:
见题目描述。
输入样例1:
选项1,两点重合。例如:
1:-2,+5 -2,+5
输出样例:
在这里给出相应的输出。例如:
points coincide
输入样例2:
选项1,斜率无穷大的线。例如:
1:-2,3 -2,+5
输出样例:
在这里给出相应的输出。例如:
Slope does not exist
输入样例3:
选项1,斜率无穷大。例如:
1:-2,3 -2,+5
输出样例:
在这里给出相应的输出。例如:
Slope does not exist
输入样例4:
选项1,符合格式输入,带符号/不带符号数混合。例如:
1:-2.5,3 -2,+5.3
输出样例:
在这里给出相应的输出。例如:
4.6
输入样例5:
选项2,计算第一个点到另外两点连线的垂直距离。例如:
2:0,1 1,0 2,0
输出样例:
在这里给出相应的输出。例如:
1.0
输入样例6:
选项3,判断三个点是否在一条线上。例如:
3:0,1 2,2 5,3
输出样例:
在这里给出相应的输出。例如:
false
输入样例7:
选项4,判断两条线是否平行。例如:
4:0,1 0,2 2,1 3,0
输出样例:
在这里给出相应的输出。例如:
false
输入样例8:
选项5,判断两条线的交点。例如:
5:0,0 -1,-1 0,2 3,-1
输出样例:
在这里给出相应的输出,交点坐标之间以英文","分隔,判断结果与坐标之间以一个英文空格分隔。例如:
1.0,1.0 true
输入样例9:
选项5,判断两条线的交点。但两条线平行例如:
5:0,0 -1,-1 2,3 3,4
输出样例:
在这里给出相应的输出,交点坐标之间以英文","分隔,判断结果与坐标之间以一个英文空格分隔。例如:
is parallel lines,have no intersection point
1 import java.util.Scanner; 2 import java.util.regex.Pattern; 3 public class Main{ 4 5 public static void main(String[] args) { 6 Stringhan a = new Stringhan(); 7 a.Stringhand(); 8 } 9 } 10 11 class Stringhan { 12 int cho = 0; 13 int chotr = 1; 14 String stco1; 15 String stco2; 16 String stco3; 17 String stco4; 18 String stco5; 19 pD s1 = new pD(); 20 pD s2 = new pD(); 21 pD s3 = new pD(); 22 pD s4 = new pD(); 23 pD s5 = new pD(); 24 double res; 25 26 void Stringhand(){ 27 Scanner input = new Scanner(System.in); 28 String hand = input.nextLine();//输入坐标 29 30 if(!true0(hand)) { 31 System.out.print("Wrong Format"); 32 return; 33 } 34 cho = (int)hand.charAt(0) - 48; 35 String c = hand.substring(2); 36 chotr =getCount(c);//获取坐标个数 37 if(!Check(cho,chotr)) {//检验坐标个数是否正确 38 System.out.print("wrong number of points"); 39 return; 40 } 41 cut(c); 42 switch(cho) { 43 case 1: 44 t1(c); 45 break; 46 case 2: 47 t2(c); 48 break; 49 case 3: 50 t3(c); 51 break; 52 case 4: 53 t4(c); 54 break; 55 case 5: 56 t5(c); 57 break; 58 } 59 60 } 61 62 Boolean true0(String s) {//检验输入 63 if(s.matches("[1-5][:](([+|-]?[1-9]+([\\.][0-9]+|[0-9]*)|([+|-]?[0]([\\.][0-9])?))[,]([+|-]?[1-9]+([\\.][0-9]+|[0-9]*)|([+|-]?[0]([\\.][0-9])?))" 64 + "[\\s]{1})+(([+|-]?[1-9]+([\\.][0-9]+|[0-9]*)|([+|-]?[0]([\\.][0-9])?))[,]([+|-]?[1-9]+([\\.][0-9]+|[0-9]*)|([+|-]?[0]([\\.][0-9])?)))+")) 65 return true; 66 else 67 return false; 68 } 69 70 int getCount(String s) {//获取坐标个数 71 int x = 1; 72 for(int i = 0; i < s.length(); i++) { 73 if(s.charAt(i) == ' ') { 74 x++; 75 } 76 } 77 return x; 78 } 79 80 boolean Check(int cho , int chotr) {//检验个数 81 if((cho == 1&&chotr == 2)||(cho == 2&&chotr == 3)||(cho == 3&&chotr == 3)||(cho == 4&&chotr == 4)||(cho == 5&&chotr == 4)) 82 return true; 83 else 84 return false; 85 } 86 87 void cut(String a) { 88 int []num = new int[4]; 89 int fax = 0; 90 for(int i = 0;i < a.length();i++) { 91 if(Character.isWhitespace(a.charAt(i))) {//判断是否是空格 92 num[fax] = i; 93 fax++; 94 } 95 } 96 if(fax==1) { 97 stco1 = a.substring(0 , num[0] ); 98 stco2 = a.substring(num[0] + 1); 99 } 100 if(fax==2) { 101 stco1 = a.substring(0 , num[0] ); 102 stco2 = a.substring(num[0]+1 , num[1] ); 103 stco3 = a.substring(num[1] + 1); 104 } 105 if(fax==3) { 106 stco1 = a.substring(0 , num[0] ); 107 stco2 = a.substring(num[0]+1 , num[1] ); 108 stco3 = a.substring(num[1] + 1,num[2]); 109 stco4 = a.substring(num[2] + 1); 110 } 111 } 112 113 Boolean issame(pD st1,pD st2) {//检验是否相同 114 if(st1.data1==st2.data1&&st1.data2==st2.data2) 115 return true; 116 else 117 return false; 118 } 119 120 double distan(double x1,double y1,double x2,double y2){//距离 121 double x = Math.sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2)); 122 return x; 123 124 } 125 126 double slope(pD st1,pD st2){//斜率 127 double x = (st1.data2 - st2.data2)/(st1.data1 - st2.data1); 128 return x; 129 130 } 131 132 Boolean line(pD st1,pD st2,double x ,double y){//判断点是否在线段内 133 double xmax = Math.max(st1.data1, st2.data1); 134 double xmin = Math.min(st1.data1, st2.data1); 135 double ymax = Math.max(st1.data2, st2.data2); 136 double ymin = Math.min(st1.data2, st2.data2); 137 if((x < xmax&&x > xmin)||(y < ymax&&y > ymin)) 138 return true; 139 else 140 return false; 141 } 142 143 void t1(String s) { 144 s1.strCo(stco1); 145 s2.strCo(stco2); 146 if(issame(s1,s2)) { //检查共点 147 System.out.print("points coincide"); 148 return; 149 } 150 151 if(s1.data1==s2.data1) //斜率不存在 152 System.out.print("Slope does not exist"); 153 else { 154 System.out.print(slope(s1,s2)); 155 } 156 157 } 158 159 void t2(String s) { 160 s1.strCo(stco1); 161 s2.strCo(stco2); 162 s3.strCo(stco3); 163 if(issame(s2,s3)) { //检查共点 164 System.out.print("points coincide"); 165 return; 166 } 167 if(s2.data1==s3.data1) { //检查斜率 168 System.out.print(Math.abs(s1.data1 - s2.data1)); 169 return; 170 } 171 double k = slope(s2,s3); 172 res = (Math.abs(s1.data2 - k * (s1.data1 - s2.data1) - s2.data2)/Math.sqrt(1+k*k)); 173 System.out.print(res); 174 175 } 176 177 void t3(String s) { 178 s1.strCo(stco1); 179 s2.strCo(stco2); 180 s3.strCo(stco3); 181 if(issame(s1,s2)||issame(s2,s3)||issame(s1,s3)) { 182 System.out.print("points coincide"); 183 return; 184 } 185 186 if(s1.data1==s2.data1||s2.data1==s3.data1) { 187 if(s1.data1==s2.data1&&s2.data1==s3.data1) 188 System.out.print("true"); 189 else 190 System.out.print("false"); 191 return; 192 } 193 if(slope(s1,s2)==slope(s2,s3))//三点共线 194 System.out.print("true"); 195 else 196 System.out.print("false"); 197 } 198 199 void t4(String s) { 200 s1.strCo(stco1); 201 s2.strCo(stco2); 202 s3.strCo(stco3); 203 s4.strCo(stco4); 204 if(issame(s1,s2)||issame(s3,s4)) { 205 System.out.print("points coincide"); 206 return; 207 } 208 if(s1.data1==s2.data1||s3.data1==s4.data1) { 209 if(s1.data1==s2.data1&&s3.data1==s4.data1) 210 System.out.print("true"); 211 else 212 System.out.print("false"); 213 return; 214 } 215 216 if(slope(s1,s2)==slope(s3,s4)) 217 System.out.print("true"); 218 else 219 System.out.print("false"); 220 } 221 222 void t5(String s) { 223 s1.strCo(stco1); 224 s2.strCo(stco2); 225 s3.strCo(stco3); 226 s4.strCo(stco4); 227 double x = 0; 228 double y = 0; 229 double k1; 230 double k2; 231 if(issame(s1,s2)||issame(s3,s4)) { 232 System.out.print("points coincide"); 233 return; 234 } 235 if(s1.data1==s2.data1&&s3.data1==s4.data1) { 236 System.out.print("is parallel lines,have no intersection point"); 237 return; 238 } 239 240 k1 = slope(s1,s2); 241 k2 = slope(s3,s4); 242 if(k1 == k2) { 243 System.out.print("is parallel lines,have no intersection point"); 244 return; 245 } 246 x = (s3.data2*s4.data1*s2.data1-s4.data2*s3.data1*s2.data1-s3.data2*s4.data1*s1.data1+s4.data2*s3.data1*s1.data1-s1.data2*s2.data1*s4.data1+s2.data2*s1.data1*s4.data1+s1.data2*s2.data1*s3.data1-s2.data2*s1.data1*s3.data1)/(s4.data1*s2.data2-s4.data1*s1.data2-s3.data1*s2.data2+s3.data1*s1.data2-s2.data1*s4.data2+s2.data1*s3.data2+s1.data1*s4.data2-s1.data1*s3.data2); 247 y = ((-s3.data2*s4.data1*s2.data2+s4.data2*s3.data1*s2.data2+s3.data2*s4.data1*s1.data2-s4.data2*s3.data1*s1.data2+s1.data2*s2.data1*s4.data2-s1.data2*s2.data1*s3.data2-s2.data2*s1.data1*s4.data2+s2.data2*s1.data1*s3.data2)/(s4.data2*s2.data1-s4.data2*s1.data1-s3.data2*s2.data1+s1.data1*s3.data2-s2.data2*s4.data1+s2.data2*s3.data1+s1.data2*s4.data1-s1.data2*s3.data1)); 248 System.out.print(x + "," + y + " "); 249 if(line(s1,s2,x,y)||line(s3,s4,x,y)) 250 System.out.print("true"); 251 else 252 System.out.print("false"); 253 } 254 255 } 256 257 class pD { 258 double data1; 259 double data2; 260 int istrue1num = 0; 261 String str1 = new String(); 262 String str2 = new String(); 263 public void strCo(String s){ 264 if(istrue1(s)) { 265 if(istrue2(s)) { 266 data1 = Double.parseDouble(str1); 267 data2 = Double.parseDouble(str2); 268 } 269 else 270 System.out.print("请重新进行输入"); 271 } 272 else 273 System.out.print("请重新进行输入"); 274 } 275 276 private boolean istrue1(String str) { 277 int num = 0; 278 char[] chars=str.toCharArray(); 279 for(int i = 0; i < chars.length; i++) { 280 281 if(chars[i] == ',') { 282 istrue1num = i; 283 num++; 284 if(num > 1) 285 return false; 286 } 287 } 288 return true; 289 } 290 291 private boolean istrue2(String str) { 292 str1 = str.substring(0 , istrue1num ); 293 str2 = str.substring(istrue1num + 1); 294 if((isDouble(str1)||isInt(str1))&&(isDouble(str2)||isInt(str2))) 295 return true; 296 else 297 return false; 298 } 299 300 private boolean isDouble(String str) { 301 if (null == str || "".equals(str)) { 302 return false; 303 } 304 Pattern pattern = Pattern.compile("^[-\\+]?\\d*[.]\\d+$"); 305 return pattern.matcher(str).matches(); 306 } 307 308 private boolean isInt(String str) { 309 if (null == str || "".equals(str)) { 310 return false; 311 } 312 Pattern pattern = Pattern.compile("^[-\\+]?[\\d]*$"); 313 return pattern.matcher(str).matches(); 314 } 315 }
PTA32
第三题
判断三角形类型在前边的题目做过,问题不大。第二小题根据坐标求三角形相关性质也还好,就是怎么求重心坐标忘了,求助了室友。第三小题也做过。第四点功能放在数学里都是我要算一会的地步了,代码中并没有实现。感觉这道题才是三道题里比较复杂难搞的,借鉴了很多同学的思路,改了又改才拿到一半分,竟然没太多想说的。
题目及代码如下:(并没有全部正确)
7-3 点线形系列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"
输入格式:
基本格式:选项+":"+坐标x+","+坐标y+" "+坐标x+","+坐标y。点的x、y坐标之间以英文","分隔,点与点之间以一个英文空格分隔。
输出格式:
基本输出格式见每种选项的描述。
异常情况输出:
如果不符合基本格式,输出"Wrong Format"。
如果符合基本格式,但输入点的数量不符合要求,输出"wrong number of points"。
如果输入的三个点无法构成三角形,输出"data error"。
注意:输出的数据若小数点后超过6位,只保留小数点后6位,多余部分采用四舍五入规则进到最低位。小数点后若不足6位,按原始位数显示,不必补齐。例如:1/3的结果按格式输出为 0.333333,1.0按格式输出为1.0
选项4中所输入线的两个点坐标重合,输出"points coincide",
输入样例1:
选项4,定义线的两点重合。例如:
4:1,0 1,0 0,0 2,0 4,0
输出样例:
在这里给出相应的输出。例如:
points coincide
输入样例2:
选项4,构成三角形的三个点在一条线上,无法构成三角形。例如:
4:1,0 0,2 0,0 0,0 4,0
输出样例:
在这里给出相应的输出。例如:
data error
输入样例3:
选项1,判断等腰、等边三角形。例如:
1:-2,0 2,0 0,4
输出样例:
两个判断结果。例如:
true false
输入样例4:
选项2,输出边长、面积、重心坐标。例如:
2:0,0 3,0 0,1
输出样例:
在这里给出相应的输出。例如:
7.162278 1.5 1.0,0.333333
输入样例5:
选项3,钝角、直角、锐角的判断。例如:
3:0,1 1,0 2,0
输出样例:
在这里给出相应的输出。例如:
true false false
输入样例6:
选项4,直线与三角形交点的数量等于2,输出数量值以及三角形被分割的两部分面积。例如:
4:1,0 0,2 0,0 0,2 4,0
输出样例:
在这里给出相应的输出。例如:
2 1.0 3.0
输入样例7:
选项4,直线与三角形交点的数量少于两个,只输出数量值。例如:
4:-1,0 1,2 0,1 0,-1 2,0
输出样例:
在这里给出相应的输出。例如:
1
输入样例8:
选项5,用射线法判断点是否在三角形内部。例如:
5:0.5,0.5 0,0 0,2 4,0
输出样例:
在这里给出相应的输出,交点坐标之间以英文","分隔,判断结果与坐标之间以一个英文空格分隔。例如:
in the triangle
输入样例9:
选项5,用射线法判断点是否在三角形内部。例如:
5:0,0 -1,-1 2,3 3,4
输出样例:
在这里给出相应的输出。例如:
outof the triangle
1 import java.util.Scanner; 2 3 public class Main { 4 5 public static void main(String[] args) { 6 Scanner in = new Scanner(System.in); 7 String s=in.nextLine(); 8 char []b=s.toCharArray(); 9 String c=s.substring(2); 10 boolean judge = true; 11 String regEx= "[\\+-]?([0]|([1-9](\\d?)+))(\\.\\d+)?\\,[\\+-]?([0]|([1-9](\\d?)+))(\\.\\d+)?"; 12 String[] a = c.split("\\s+"); 13 if(b[0]==49) { 14 Dian dian1=new Dian(); 15 if(a.length>3) { 16 System.out.println("wrong number of points"); 17 System.exit(0); 18 } 19 if(a.length<3) { 20 System.out.println("wrong number of points"); 21 System.exit(0); 22 } 23 if(a.length==3) { 24 for(int i=0;i<3;i++) { 25 judge=a[i].matches(regEx); 26 if(judge==false) 27 break; 28 } 29 } 30 if(judge) { 31 String[] s1 = a[0].split(","); 32 String[] s2 = a[1].split(","); 33 String[] s3 = a[2].split(","); 34 double x1 = Double.parseDouble(s1[0]); 35 double y1 = Double.parseDouble(s1[1]); 36 double x2 = Double.parseDouble(s2[0]); 37 double y2 = Double.parseDouble(s2[1]); 38 double x3 = Double.parseDouble(s3[0]); 39 double y3 = Double.parseDouble(s3[1]); 40 Dian dian2=new Dian(x1,y1); 41 Dian dian3=new Dian(x2,y2); 42 Dian dian4=new Dian(x3,y3); 43 if(dian1.triangle(dian2, dian3, dian4)) { 44 if(dian1.dengYao(dian2, dian3, dian4)) { 45 if(dian1.dengBian(dian2, dian3, dian4)) 46 System.out.println("true true"); 47 else System.out.println("true false"); 48 } 49 50 else { 51 if(dian1.dengBian(dian2, dian3, dian4)) 52 System.out.println("false true"); 53 else System.out.println("false false"); 54 } 55 } 56 else System.out.println("data error"); 57 58 } 59 else 60 System.out.println("Wrong Format"); 61 } 62 if(b[0]==50) { 63 Dian dian1=new Dian(); 64 if(a.length>3) { 65 System.out.println("wrong number of points"); 66 System.exit(0); 67 } 68 if(a.length<3) { 69 System.out.println("wrong number of points"); 70 System.exit(0); 71 } 72 if(a.length==3) { 73 for(int i=0;i<3;i++) { 74 judge=a[i].matches(regEx); 75 if(judge==false) 76 break; 77 } 78 } 79 if(judge) { 80 String[] s1 = a[0].split(","); 81 String[] s2 = a[1].split(","); 82 String[] s3 = a[2].split(","); 83 double x1 = Double.parseDouble(s1[0]); 84 double y1 = Double.parseDouble(s1[1]); 85 double x2 = Double.parseDouble(s2[0]); 86 double y2 = Double.parseDouble(s2[1]); 87 double x3 = Double.parseDouble(s3[0]); 88 double y3 = Double.parseDouble(s3[1]); 89 Dian dian2=new Dian(x1,y1); 90 Dian dian3=new Dian(x2,y2); 91 Dian dian4=new Dian(x3,y3); 92 if(dian1.triangle(dian2, dian3, dian4)) { 93 if(x1==x2&&y1==y2||x2==x3&&y2==y3||x1==x3&&y1==y3) { 94 System.out.println("points coincide"); 95 } 96 97 else 98 System.out.println(dian1.zhouChang(dian2, dian3, dian4)+" "+dian1.area(dian2, dian3, dian4) 99 +" "+dian1.zhongXin(dian2, dian3, dian4).showZuobiao()); 100 } 101 else System.out.println("data error"); 102 103 } 104 else 105 System.out.println("Wrong Format"); 106 } 107 if(b[0]==51) { 108 Dian dian1=new Dian(); 109 if(a.length>3) { 110 System.out.println("wrong number of points"); 111 System.exit(0); 112 } 113 if(a.length<3) { 114 System.out.println("wrong number of points"); 115 System.exit(0); 116 } 117 if(a.length==3) { 118 for(int i=0;i<3;i++) { 119 judge=a[i].matches(regEx); 120 if(judge==false) 121 break; 122 } 123 } 124 if(judge) { 125 String[] s1 = a[0].split(","); 126 String[] s2 = a[1].split(","); 127 String[] s3 = a[2].split(","); 128 double x1 = Double.parseDouble(s1[0]); 129 double y1 = Double.parseDouble(s1[1]); 130 double x2 = Double.parseDouble(s2[0]); 131 double y2 = Double.parseDouble(s2[1]); 132 double x3 = Double.parseDouble(s3[0]); 133 double y3 = Double.parseDouble(s3[1]); 134 Dian dian2=new Dian(x1,y1); 135 Dian dian3=new Dian(x2,y2); 136 Dian dian4=new Dian(x3,y3); 137 if(dian1.triangle(dian2, dian3, dian4)) { 138 if(dian1.dunJiao(dian2, dian3, dian4)) { 139 System.out.println("true false false"); 140 141 } 142 143 else { 144 if(dian1.zhiJiao(dian2, dian3, dian4)) { 145 System.out.println("false true false"); 146 } 147 else { 148 System.out.println("false false true"); 149 } 150 } 151 } 152 else System.out.println("data error"); 153 154 } 155 else 156 System.out.println("Wrong Format"); 157 } 158 if(b[0]==52) { 159 Dian dian1=new Dian(); 160 if(a.length>5) { 161 System.out.println("wrong number of points"); 162 System.exit(0); 163 } 164 if(a.length<5) { 165 System.out.println("wrong number of points"); 166 System.exit(0); 167 } 168 if(a.length==5) { 169 for(int i=0;i<5;i++) { 170 judge=a[i].matches(regEx); 171 if(judge==false) 172 break; 173 } 174 } 175 if(judge) { 176 String[] s1 = a[0].split(","); 177 String[] s2 = a[1].split(","); 178 String[] s3 = a[2].split(","); 179 String[] s4 = a[3].split(","); 180 String[] s5 = a[4].split(","); 181 double x1 = Double.parseDouble(s1[0]); 182 double y1 = Double.parseDouble(s1[1]); 183 double x2 = Double.parseDouble(s2[0]); 184 double y2 = Double.parseDouble(s2[1]); 185 double x3 = Double.parseDouble(s3[0]); 186 double y3 = Double.parseDouble(s3[1]); 187 double x4 = Double.parseDouble(s4[0]); 188 double y4 = Double.parseDouble(s4[1]); 189 double x5 = Double.parseDouble(s5[0]); 190 double y5 = Double.parseDouble(s5[1]); 191 Dian dian2=new Dian(x1,y1); 192 Dian dian3=new Dian(x2,y2); 193 Dian dian4=new Dian(x3,y3); 194 Dian dian5=new Dian(x4,y4); 195 Dian dian6=new Dian(x5,y5); 196 197 if(x1==x2&&y1==y2) { 198 System.out.println("points coincide"); 199 } 200 else { 201 if(dian1.triangle(dian4, dian5, dian6)) { 202 System.out.println(1); 203 204 } 205 else System.out.println("data error"); 206 } 207 208 } 209 else 210 System.out.println("Wrong Format"); 211 } 212 if(b[0]==53) { 213 Dian dian1=new Dian(); 214 if(a.length>4) { 215 System.out.println("wrong number of points"); 216 System.exit(0); 217 } 218 if(a.length<4) { 219 System.out.println("wrong number of points"); 220 System.exit(0); 221 } 222 if(a.length==4) { 223 for(int i=0;i<4;i++) { 224 judge=a[i].matches(regEx); 225 if(judge==false) 226 break; 227 } 228 } 229 if(judge) { 230 String[] s1 = a[0].split(","); 231 String[] s2 = a[1].split(","); 232 String[] s3 = a[2].split(","); 233 String[] s4 = a[3].split(","); 234 double x1 = Double.parseDouble(s1[0]); 235 double y1 = Double.parseDouble(s1[1]); 236 double x2 = Double.parseDouble(s2[0]); 237 double y2 = Double.parseDouble(s2[1]); 238 double x3 = Double.parseDouble(s3[0]); 239 double y3 = Double.parseDouble(s3[1]); 240 double x4 = Double.parseDouble(s4[0]); 241 double y4 = Double.parseDouble(s4[1]); 242 Dian dian2=new Dian(x1,y1); 243 Dian dian3=new Dian(x2,y2); 244 Dian dian4=new Dian(x3,y3); 245 Dian dian5=new Dian(x4,y4); 246 if(dian1.triangle(dian3, dian4, dian5)) { 247 if(dian1.inTriangle(dian2, dian3, dian4, dian5)) { 248 System.out.println("in the triangle"); 249 } 250 251 else System.out.println("outof triangle"); 252 253 } 254 else System.out.println("data error"); 255 256 } 257 else 258 System.out.println("Wrong Format"); 259 } 260 } 261 262 } 263 264 class Dian { 265 private double x; 266 private double y; 267 268 public Dian() { 269 270 } 271 272 public Dian(double x,double y) { 273 this.x = x; 274 this.y = y; 275 } 276 277 public double getX() { 278 return x; 279 } 280 281 public void setX(double x) { 282 this.x = x; 283 } 284 285 public double getY() { 286 return y; 287 } 288 289 public void setY(double y) { 290 this.y = y; 291 } 292 293 public boolean triangle(Dian dian1,Dian dian2,Dian dian3) { 294 if((dian3.y-dian2.y)*(dian3.x-dian1.x) != (dian3.y-dian1.y)*(dian3.x-dian2.x)) 295 return true; 296 else return false; 297 } 298 299 public boolean dengYao(Dian dian1,Dian dian2,Dian dian3) { 300 if((dian1.x-dian2.x)*(dian1.x-dian2.x) +(dian1.y-dian2.y)*(dian1.y-dian2.y) 301 ==(dian1.x-dian3.x)*(dian1.x-dian3.x) +(dian1.y-dian3.y)*(dian1.y-dian3.y)|| 302 (dian1.x-dian2.x)*(dian1.x-dian2.x) +(dian1.y-dian2.y)*(dian1.y-dian2.y) 303 ==(dian2.x-dian3.x)*(dian2.x-dian3.x) +(dian2.y-dian3.y)*(dian2.y-dian3.y)|| 304 (dian1.x-dian3.x)*(dian1.x-dian3.x) +(dian1.y-dian3.y)*(dian1.y-dian3.y) 305 ==(dian2.x-dian3.x)*(dian2.x-dian3.x) +(dian2.y-dian3.y)*(dian2.y-dian3.y)) { 306 return true; 307 } 308 else return false; 309 } 310 311 public boolean dengBian(Dian dian1,Dian dian2,Dian dian3) { 312 if((dian1.x-dian2.x)*(dian1.x-dian2.x) +(dian1.y-dian2.y)*(dian1.y-dian2.y) 313 ==(dian1.x-dian3.x)*(dian1.x-dian3.x) +(dian1.y-dian3.y)*(dian1.y-dian3.y)&& 314 (dian1.x-dian3.x)*(dian1.x-dian3.x) +(dian1.y-dian3.y)*(dian1.y-dian3.y) 315 ==(dian2.x-dian3.x)*(dian2.x-dian3.x) +(dian2.y-dian3.y)*(dian2.y-dian3.y)) { 316 return true; 317 } 318 else return false; 319 } 320 321 public double zhouChang(Dian dian1,Dian dian2,Dian dian3) { 322 double c; 323 c=Math.sqrt((dian1.x-dian2.x)*(dian1.x-dian2.x) +(dian1.y-dian2.y)*(dian1.y-dian2.y)) 324 +Math.sqrt((dian1.x-dian3.x)*(dian1.x-dian3.x) +(dian1.y-dian3.y)*(dian1.y-dian3.y)) 325 +Math.sqrt((dian2.x-dian3.x)*(dian2.x-dian3.x) +(dian2.y-dian3.y)*(dian2.y-dian3.y)); 326 String result = String.format("%.6f", c); 327 double n = Double.parseDouble(result); 328 return n; 329 } 330 331 public double area(Dian dian1,Dian dian2,Dian dian3) { 332 double k=(dian2.y-dian3.y)/(dian2.x-dian3.x); 333 double d=(Math.abs(dian1.y-k*dian1.x+k*dian3.x-dian3.y)/Math.sqrt(1+k*k)); 334 double area=d/2*Math.sqrt((dian2.x-dian3.x)*(dian2.x-dian3.x) +(dian2.y-dian3.y)*(dian2.y-dian3.y)); 335 String result = String.format("%.6f", area); 336 double m = Double.parseDouble(result); 337 return m; 338 } 339 340 public Dian zhongXin(Dian dian1,Dian dian2,Dian dian3) { 341 double a,b; 342 a=(dian1.x+dian2.x+dian3.x)/3; 343 b=(dian1.y+dian2.y+dian3.y)/3; 344 String result1 = String.format("%.6f", a); 345 String result2 = String.format("%.6f", b); 346 double m = Double.parseDouble(result1); 347 double n = Double.parseDouble(result2); 348 return new Dian(m,n); 349 } 350 351 public String showZuobiao(){ 352 return x+","+y; 353 } 354 355 public boolean dunJiao(Dian dian1,Dian dian2,Dian dian3) { 356 if(Math.sqrt((dian1.x-dian2.x)*(dian1.x-dian2.x) +(dian1.y-dian2.y)*(dian1.y-dian2.y)) 357 >Math.sqrt((dian1.x-dian3.x)*(dian1.x-dian3.x) +(dian1.y-dian3.y)*(dian1.y-dian3.y)) 358 &&Math.sqrt((dian1.x-dian2.x)*(dian1.x-dian2.x) +(dian1.y-dian2.y)*(dian1.y-dian2.y)) 359 >Math.sqrt((dian2.x-dian3.x)*(dian2.x-dian3.x) +(dian2.y-dian3.y)*(dian2.y-dian3.y))) { 360 if((dian1.x-dian2.x)*(dian1.x-dian2.x) +(dian1.y-dian2.y)*(dian1.y-dian2.y) 361 >(dian1.x-dian3.x)*(dian1.x-dian3.x) +(dian1.y-dian3.y)*(dian1.y-dian3.y)+ 362 (dian2.x-dian3.x)*(dian2.x-dian3.x) +(dian2.y-dian3.y)*(dian2.y-dian3.y)) { 363 return true; 364 } 365 else return false; 366 367 } 368 else if(Math.sqrt((dian1.x-dian3.x)*(dian1.x-dian3.x) +(dian1.y-dian3.y)*(dian1.y-dian3.y)) 369 >Math.sqrt((dian1.x-dian2.x)*(dian1.x-dian2.x) +(dian1.y-dian2.y)*(dian1.y-dian2.y)) 370 &&Math.sqrt((dian1.x-dian3.x)*(dian1.x-dian3.x) +(dian1.y-dian3.y)*(dian1.y-dian3.y)) 371 >Math.sqrt((dian2.x-dian3.x)*(dian2.x-dian3.x) +(dian2.y-dian3.y)*(dian2.y-dian3.y))) { 372 if((dian1.x-dian3.x)*(dian1.x-dian3.x) +(dian1.y-dian3.y)*(dian1.y-dian3.y) 373 >(dian1.x-dian2.x)*(dian1.x-dian2.x) +(dian1.y-dian2.y)*(dian1.y-dian2.y)+ 374 (dian2.x-dian3.x)*(dian2.x-dian3.x) +(dian2.y-dian3.y)*(dian2.y-dian3.y)) { 375 return true; 376 } 377 else return false; 378 } 379 else if(Math.sqrt((dian2.x-dian3.x)*(dian2.x-dian3.x) +(dian2.y-dian3.y)*(dian2.y-dian3.y)) 380 >Math.sqrt((dian1.x-dian2.x)*(dian1.x-dian2.x) +(dian1.y-dian2.y)*(dian1.y-dian2.y)) 381 &&Math.sqrt((dian2.x-dian3.x)*(dian2.x-dian3.x) +(dian2.y-dian3.y)*(dian2.y-dian3.y)) 382 >Math.sqrt((dian1.x-dian3.x)*(dian1.x-dian3.x) +(dian1.y-dian3.y)*(dian1.y-dian3.y))) { 383 if((dian2.x-dian3.x)*(dian2.x-dian3.x) +(dian2.y-dian3.y)*(dian2.y-dian3.y) 384 >(dian1.x-dian2.x)*(dian1.x-dian2.x) +(dian1.y-dian2.y)*(dian1.y-dian2.y)+ 385 (dian1.x-dian3.x)*(dian1.x-dian3.x) +(dian1.y-dian3.y)*(dian1.y-dian3.y)) { 386 return true; 387 } 388 else return false; 389 } 390 else return false; 391 } 392 393 public boolean ruiJiao(Dian dian1,Dian dian2,Dian dian3) { 394 if(Math.sqrt((dian1.x-dian2.x)*(dian1.x-dian2.x) +(dian1.y-dian2.y)*(dian1.y-dian2.y)) 395 <Math.sqrt((dian1.x-dian3.x)*(dian1.x-dian3.x) +(dian1.y-dian3.y)*(dian1.y-dian3.y)) 396 &&Math.sqrt((dian1.x-dian2.x)*(dian1.x-dian2.x) +(dian1.y-dian2.y)*(dian1.y-dian2.y)) 397 <Math.sqrt((dian2.x-dian3.x)*(dian2.x-dian3.x) +(dian2.y-dian3.y)*(dian2.y-dian3.y))) { 398 if((dian1.x-dian2.x)*(dian1.x-dian2.x) +(dian1.y-dian2.y)*(dian1.y-dian2.y) 399 <(dian1.x-dian3.x)*(dian1.x-dian3.x) +(dian1.y-dian3.y)*(dian1.y-dian3.y)+ 400 (dian2.x-dian3.x)*(dian2.x-dian3.x) +(dian2.y-dian3.y)*(dian2.y-dian3.y)) { 401 return true; 402 } 403 else return false; 404 405 } 406 else if(Math.sqrt((dian1.x-dian3.x)*(dian1.x-dian3.x) +(dian1.y-dian3.y)*(dian1.y-dian3.y)) 407 <Math.sqrt((dian1.x-dian2.x)*(dian1.x-dian2.x) +(dian1.y-dian2.y)*(dian1.y-dian2.y)) 408 &&Math.sqrt((dian1.x-dian3.x)*(dian1.x-dian3.x) +(dian1.y-dian3.y)*(dian1.y-dian3.y)) 409 <Math.sqrt((dian2.x-dian3.x)*(dian2.x-dian3.x) +(dian2.y-dian3.y)*(dian2.y-dian3.y))) { 410 if((dian1.x-dian3.x)*(dian1.x-dian3.x) +(dian1.y-dian3.y)*(dian1.y-dian3.y) 411 <(dian1.x-dian2.x)*(dian1.x-dian2.x) +(dian1.y-dian2.y)*(dian1.y-dian2.y)+ 412 (dian2.x-dian3.x)*(dian2.x-dian3.x) +(dian2.y-dian3.y)*(dian2.y-dian3.y)) { 413 return true; 414 } 415 else return false; 416 } 417 else if(Math.sqrt((dian2.x-dian3.x)*(dian2.x-dian3.x) +(dian2.y-dian3.y)*(dian2.y-dian3.y)) 418 <Math.sqrt((dian1.x-dian2.x)*(dian1.x-dian2.x) +(dian1.y-dian2.y)*(dian1.y-dian2.y)) 419 &&Math.sqrt((dian2.x-dian3.x)*(dian2.x-dian3.x) +(dian2.y-dian3.y)*(dian2.y-dian3.y)) 420 <Math.sqrt((dian1.x-dian3.x)*(dian1.x-dian3.x) +(dian1.y-dian3.y)*(dian1.y-dian3.y))) { 421 if((dian2.x-dian3.x)*(dian2.x-dian3.x) +(dian2.y-dian3.y)*(dian2.y-dian3.y) 422 <(dian1.x-dian2.x)*(dian1.x-dian2.x) +(dian1.y-dian2.y)*(dian1.y-dian2.y)+ 423 (dian1.x-dian3.x)*(dian1.x-dian3.x) +(dian1.y-dian3.y)*(dian1.y-dian3.y)) { 424 return true; 425 } 426 else return false; 427 } 428 else return false; 429 } 430 431 public boolean zhiJiao(Dian dian1,Dian dian2,Dian dian3) { 432 if(Math.sqrt((dian1.x-dian2.x)*(dian1.x-dian2.x) +(dian1.y-dian2.y)*(dian1.y-dian2.y)) 433 >Math.sqrt((dian1.x-dian3.x)*(dian1.x-dian3.x) +(dian1.y-dian3.y)*(dian1.y-dian3.y)) 434 &&Math.sqrt((dian1.x-dian2.x)*(dian1.x-dian2.x) +(dian1.y-dian2.y)*(dian1.y-dian2.y)) 435 >Math.sqrt((dian2.x-dian3.x)*(dian2.x-dian3.x) +(dian2.y-dian3.y)*(dian2.y-dian3.y))) { 436 if((dian1.x-dian2.x)*(dian1.x-dian2.x) +(dian1.y-dian2.y)*(dian1.y-dian2.y) 437 ==(dian1.x-dian3.x)*(dian1.x-dian3.x) +(dian1.y-dian3.y)*(dian1.y-dian3.y)+ 438 (dian2.x-dian3.x)*(dian2.x-dian3.x) +(dian2.y-dian3.y)*(dian2.y-dian3.y)) { 439 return true; 440 } 441 else return false; 442 443 } 444 else if(Math.sqrt((dian1.x-dian3.x)*(dian1.x-dian3.x) +(dian1.y-dian3.y)*(dian1.y-dian3.y)) 445 >Math.sqrt((dian1.x-dian2.x)*(dian1.x-dian2.x) +(dian1.y-dian2.y)*(dian1.y-dian2.y)) 446 &&Math.sqrt((dian1.x-dian3.x)*(dian1.x-dian3.x) +(dian1.y-dian3.y)*(dian1.y-dian3.y)) 447 >Math.sqrt((dian2.x-dian3.x)*(dian2.x-dian3.x) +(dian2.y-dian3.y)*(dian2.y-dian3.y))) { 448 if((dian1.x-dian3.x)*(dian1.x-dian3.x) +(dian1.y-dian3.y)*(dian1.y-dian3.y) 449 ==(dian1.x-dian2.x)*(dian1.x-dian2.x) +(dian1.y-dian2.y)*(dian1.y-dian2.y)+ 450 (dian2.x-dian3.x)*(dian2.x-dian3.x) +(dian2.y-dian3.y)*(dian2.y-dian3.y)) { 451 return true; 452 } 453 else return false; 454 } 455 else if(Math.sqrt((dian2.x-dian3.x)*(dian2.x-dian3.x) +(dian2.y-dian3.y)*(dian2.y-dian3.y)) 456 >Math.sqrt((dian1.x-dian2.x)*(dian1.x-dian2.x) +(dian1.y-dian2.y)*(dian1.y-dian2.y)) 457 &&Math.sqrt((dian2.x-dian3.x)*(dian2.x-dian3.x) +(dian2.y-dian3.y)*(dian2.y-dian3.y)) 458 >Math.sqrt((dian1.x-dian3.x)*(dian1.x-dian3.x) +(dian1.y-dian3.y)*(dian1.y-dian3.y))) { 459 if((dian2.x-dian3.x)*(dian2.x-dian3.x) +(dian2.y-dian3.y)*(dian2.y-dian3.y) 460 ==(dian1.x-dian2.x)*(dian1.x-dian2.x) +(dian1.y-dian2.y)*(dian1.y-dian2.y)+ 461 (dian1.x-dian3.x)*(dian1.x-dian3.x) +(dian1.y-dian3.y)*(dian1.y-dian3.y)) { 462 return true; 463 } 464 else return false; 465 } 466 else return false; 467 } 468 469 public boolean inTriangle(Dian dian1,Dian dian2,Dian dian3,Dian dian4) { 470 if((dian1.x-dian2.x)*(dian3.y-dian2.y)-(dian1.y-dian2.y)*(dian3.x-dian2.x)>0&& 471 (dian1.x-dian3.x)*(dian4.y-dian3.y)-(dian1.y-dian3.y)*(dian4.x-dian3.x)>0&& 472 (dian1.x-dian4.x)*(dian2.y-dian4.y)-(dian1.y-dian4.y)*(dian2.x-dian4.x)>0|| 473 (dian1.x-dian2.x)*(dian3.y-dian2.y)-(dian1.y-dian2.y)*(dian3.x-dian2.x)<0&& 474 (dian1.x-dian3.x)*(dian4.y-dian3.y)-(dian1.y-dian3.y)*(dian4.x-dian3.x)<0&& 475 (dian1.x-dian4.x)*(dian2.y-dian4.y)-(dian1.y-dian4.y)*(dian2.x-dian4.x)<0) { 476 return true; 477 } 478 else return false; 479 } 480 481 }
PTA33
总结
这几道题让我的一周变得漫长又难熬,老师提前提醒了题的难度较大,所以开放就立刻审题设计准备写,改代码的路非常的崎岖。正好老师在第三周PTA发布的时候讲了类的知识点,因为上课感觉没有太听懂所以不是每个块都用了类。是打算自主学习掉“类”后再写,但是时间有些紧迫。
三次PTA下来就是感觉没有单独学过JAVA但是有很多设计都是和C语言非常相像的,判断语句循环语句,就是输入输出稍有改变但形式依然是固定的。然后就是不要经常图方便用很多会增加圈复杂度的语句,设计者自己看的时候觉得非常的通俗易懂,但镇定有需求去读代码的人看起来确实不容易看,单独列出类也可以让代码更美观。
比较大的收获就是正则表达式,字符串的分割,多个点坐标的储存,多个选项的不同功能调用,计算数学结果的时候有固定的计算语句去实现等一些功能的实现。