HJL777

博客作业(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语言非常相像的,判断语句循环语句,就是输入输出稍有改变但形式依然是固定的。然后就是不要经常图方便用很多会增加圈复杂度的语句,设计者自己看的时候觉得非常的通俗易懂,但镇定有需求去读代码的人看起来确实不容易看,单独列出类也可以让代码更美观。

比较大的收获就是正则表达式,字符串的分割,多个点坐标的储存,多个选项的不同功能调用,计算数学结果的时候有固定的计算语句去实现等一些功能的实现。

posted on 2022-09-29 23:03  就是贺峻霖  阅读(86)  评论(0编辑  收藏  举报

导航