标签:总结 题目 String Double parseDouble PTA System x2 y3
前三次作业总结
对于前三次作业考察的点都相似:
(1)考察了输入数据合法的判断
(2)考察了字符串,数字,字符数组之间的转换
(3)考察了字符串的分割,提取等等对于字符的操作
前三章主要考察了学生对于字符串的解析能力,对于字符串方法的操作
读入
第一次作业
体重是反映和衡量一个人健康状况的重要标志之一,过胖和过瘦都不利于健康,BMI(身体质量指数)计算方法:体重(以千克为单位)除以身高(以米为单位)的平方。中国成人正常的BMI应在18.5-24之间,如果小于18.5为体重不足,如果大于等于24为超重,大于等于28为肥胖。请编写程序,测算身体状态。 |
输入格式:两个数值:体重(以千克为单位),身高(以米为单位),数值间以空格分隔。例如:65.5 1.75。 |
输出格式:输入数值超出范围 :输出“input out of range”。例如:-2 3或者125 5。 |
1 import java.util.Scanner; 2 3 public class Main{ 4 public static void main(String[] args){ 5 Scanner in = new Scanner(System.in); 6 double weight = in.nextDouble(); 7 double high = in.nextDouble(); 8 double BMI = weight/Math.pow(high,2); 9 if(high<=0||weight<=0||high>=2.72||weight>=727||BMI>=727/Math.pow(2.72,2)) 10 { 11 System.out.print("input out of range"); 12 } 13 else if(BMI<18.5) 14 { 15 System.out.print("thin"); 16 } 17 else if(BMI<=24) 18 { 19 System.out.print("fit"); 20 } 21 else if(BMI<=28) 22 { 23 System.out.print("overweight"); 24 } 25 else 26 { 27 System.out.print("fat"); 28 } 29 } 30 } 第一题倒是没什么难度,但是题目的给出的要求与实际的测试点不符合,刚开始做的时候顺着题目要求来吃了点亏 |
学校的学号由8位数字组成,前两位是入学年份(省略了20);第3、4位是学院编号,01代表材料学院,02代表机械学院,03代表外语学院,20代表软件学院;第5、6位是学院内部班级编号,最后两位是班级内部学号。如:18011103,入学年份是2018年,材料学院,11班,03号 |
输入格式:8位数字组成的学号。例如:18011103 |
输出格式:学号每一项的完整说明。例如: 注意:如非法输入,输出“Wrong Format" |
1 import java.util.Scanner; 2 public class Main { 3 public static void main(String[] args){ 4 Scanner in = new Scanner(System.in); 5 String arr = in.next(); 6 if(arr.length()!=8) 7 { 8 System.out.print("Wrong Format"); 9 } 10 else 11 { 12 char []arr1 = new char[arr.length()]; 13 for(int i=0 ; i<arr.length() ; i++) 14 { 15 arr1[i]=arr.charAt(i); 16 } 17 if((arr1[2]=='0')||(arr1[2]=='2')) 18 { 19 if((arr1[3]=='1'||arr1[3]=='2'||arr1[3]=='3')&&(arr1[2]=='0')) 20 { 21 System.out.println("入学年份:20"+arr1[0]+arr1[1]+"年"); 22 if(arr1[3]=='1') 23 { 24 System.out.println("学院:材料学院"); 25 } 26 else if(arr1[3]=='2') 27 { 28 System.out.println("学院:机械学院"); 29 } 30 else 31 { 32 System.out.println("学院:外语学院"); 33 } 34 System.out.println("班级:"+arr1[4]+arr1[5]); 35 System.out.print("学号:"+arr1[6]+arr1[7]); 36 } 37 else if((arr1[2]=='2')&&(arr1[3]=='0')) 38 { 39 System.out.println("入学年份:20"+arr1[0]+arr1[1]+"年"); 40 System.out.println("学院:软件学院"); 41 System.out.println("班级:"+arr1[4]+arr1[5]); 42 System.out.print("学号:"+arr1[6]+arr1[7]); 43 } 44 else 45 { 46 System.out.print("Wrong Format"); 47 } 48 } 49 else 50 { 51 System.out.print("Wrong Format"); 52 } 53 } 54 } 55 } |
1 import java.util.Scanner; 2 3 public class Main { 4 5 public static void main(String[] args) { 6 String a; 7 String year,college,clas,num; 8 Scanner in = new Scanner(System.in); 9 a = in.next(); 10 if(8!=a.length()) { 11 System.out.print("Wrong Format"); 12 return; 13 } 14 year = a.substring(0,2); 15 college = a.substring(2,4); 16 clas = a.substring(4,6); 17 num = a.substring(6,8); 18 if(college.equalsIgnoreCase("01")) { 19 college = "材料学院"; 20 }else if(college.equalsIgnoreCase("02")) { 21 college = "机械学院"; 22 }else if(college.equalsIgnoreCase("03")) { 23 college = "外语学院"; 24 }else if(college.equalsIgnoreCase("20")) { 25 college = "软件学院"; 26 }else { 27 System.out.print("Wrong Format"); 28 return; 29 } 30 31 System.out.print("入学年份:20"+year+"年\n" 32 + "学院:"+college+"\n" 33 + "班级:"+clas+"\n" 34 + "学号:"+num); 35 } 36 37 } 这次判断变得简单了,输出也将前面的整合到了一起,代码变得较为整洁 |
输入三角形三条边,判断该三角形为什么类型的三角形。 |
输入格式:在一行中输入三角形的三条边的值(实型数),可以用一个或多个空格或回车分隔,其中三条边的取值范围均为[1,200]。 |
输出格式:(1)如果输入数据非法,则输出“Wrong Format”; |
1 import java.util.Scanner; 2 3 public class Main { 4 public static void main(String[] args){ 5 Scanner in =new Scanner (System.in); 6 double a = in.nextDouble(); 7 double b = in.nextDouble(); 8 double c = in.nextDouble(); 9 double error=0.000001; 10 if(a<1||a>200||b<1||b>200||c<1||c>200) 11 { 12 System.out.print("Wrong Format"); 13 } 14 else if(a+b<c+error||a+c<b+error||b+c<a+error) 15 { 16 System.out.println("Not a triangle"); 17 } 18 else if(a==b||a==c||b==c) 19 { 20 if(a==b&&a==c) 21 { 22 System.out.println("Equilateral triangle"); 23 } 24 else if((a*a+b*b<c*c+error&&a*a+b*b>c*c-error)||(a*a+c*c<b*b+error&&a*a+c*c>b*b-error)||(c*c+b*b<a*a+error&&c*c+b*b>a*a-error)) 25 { 26 System.out.println("Isosceles right-angled triangle"); 27 } 28 else 29 { 30 System.out.println("Isosceles triangle"); 31 } 32 } 33 else if((a*a+b*b<c*c+error&&a*a+b*b>c*c-error)||(a*a+c*c<b*b+error&&a*a+c*c>b*b-error)||(c*c+b*b<a*a+error&&c*c+b*b>a*a-error)) 34 { 35 System.out.println("Right-angled triangle"); 36 } 37 else 38 { 39 System.out.print("General triangle"); 40 } 41 } 42 } 本题难度不大,但是判断的条件却严丝合缝,确实困扰了一会,对于逻辑判断更加得熟练了。 |
第一次作业总的来说不难,也算是Java入门的开始吧。
都二次作业
RS232是串口常用的通信协议,在异步通信模式下,串口可以一次发送5~8位数据,收发双方之间没有数据发送时线路维持高电平,相当于接收方持续收到数据“1”(称为空闲位),发送方有数据发送时,会在有效数据(5~8位,具体位数由通信双方提前设置)前加上1位起始位“0”,在有效数据之后加上1位可选的奇偶校验位和1位结束位“1”。请编写程序,模拟串口接收处理程序,注:假定有效数据是8位,奇偶校验位采用奇校验。 |
输入格式:由0、1组成的二进制数据流。例如:11110111010111111001001101111111011111111101111 |
输出格式:过滤掉空闲、起始、结束以及奇偶校验位之后的数据,数据之前加上序号和英文冒号。 |
1 import java.util.Scanner; 2 3 public class Main { 4 public static void main(String[] args) { 5 Scanner in = new Scanner(System.in); 6 String a=in.next(); 7 if(a.length()<11||a.matches("^+[1]+$")) 8 { 9 System.out.println("null data"); 10 return; 11 } 12 int sum=1; 13 for(int i=0;i<a.length()-10;i++) 14 { 15 int num=0; 16 if(a.charAt(i)=='0') 17 { 18 if(a.charAt(i+10)=='0') 19 { 20 System.out.println(sum+":"+"validate error"); 21 sum++; 22 i=i+10; 23 } 24 else 25 { 26 for(int j=i+1;j<i+9;j++) 27 { 28 if(a.charAt(j)=='1') 29 { 30 num++; 31 } 32 } 33 if((num%2==0&&a.charAt(i+9)=='1')||(num%2==1&&a.charAt(i+9)=='0')) 34 { 35 System.out.println(sum+":"+a.substring(i+1,i+9)); 36 sum++; 37 i=i+10; 38 } 39 else 40 { 41 System.out.println(sum+":"+"parity check error"); 42 sum++; 43 i=i+10; 44 } 45 } 46 } 47 } 48 } 49 } 具体思路实现: 1.判断是否是长度大于11位: 2.判断的输入的字符串中是否有0; 3.找到0后对其后面10位进行分析; 4.先判断最后一位是不是结束1; 5.再判断是否奇校验正确; 6.通过两次判断结果来输出。 本题开始的话会有点蒙圈但是上网浏览关于奇偶效验的规则后思路就会变得明确起来。 |
第二次作业比第一次对于字符串处理的要求更高了,更注重方法的作用。
第三次作业
输入连个点的坐标,计算两点之间的距离 |
输入格式:4个double类型的实数,两个点的x,y坐标,依次是x1、y1、x2、y2,两个点的坐标之间以空格分隔,每个点的x,y坐标以英文“,”分隔。例如:0,0 1,1或0.1,-0.3 +3.5,15.6。 |
输出格式:计算所得的两点之间的距离。例如:1.4142135623730951 |
1 import java.util.Scanner; 2 public class Main { 3 public static void main(String[] args) { 4 Scanner in = new Scanner(System.in); 5 String arr = in.nextLine(); 6 double dist=0; 7 String []a0 = arr.split(" "); 8 panduan zhi = new panduan(); 9 if(a0.length>2) 10 { 11 System.out.print("wrong number of points"); 12 } 13 else 14 { 15 String []a1 = a0[0].split(","); 16 String []a2 = a0[1].split(","); 17 if(zhi.fact(a1[0])&&zhi.fact(a1[1])&&zhi.fact(a2[0])&&zhi.fact(a2[1])) 18 { 19 double q,w,p,r; 20 q = Double.parseDouble(a1[0]); 21 w = Double.parseDouble(a1[1]); 22 p = Double.parseDouble(a2[0]); 23 r = Double.parseDouble(a2[1]); 24 dist = Math.sqrt((q-p)*(q-p)+(w-r)*(w-r)); 25 System.out.print(dist); 26 } 27 else 28 System.out.print("Wrong Format"); 29 } 30 } 31 } 32 class panduan { 33 boolean fact(String a) 34 { 35 boolean b = true; 36 for(int i=0;i<a.length();i++) 37 { 38 if(a.charAt(i)=='-'||a.charAt(i)=='+') 39 { 40 if(a.charAt(i+1)=='-'||a.charAt(i+1)=='+') 41 { 42 b=false; 43 } 44 } 45 } 46 return b; 47 } 48 } 本题虽然比较题目意思比较简明,但是非法输入的情况种类太多了,定义了一个panduan类用来校验字符串输入的是否正确。 |
用户输入一组选项和数据,进行与直线有关的计算。选项包括: 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 import java.util.Scanner; 2 public class Main { 3 4 public static void main(String[] args) { 5 // TODO 自动生成的方法存根 6 Scanner in = new Scanner(System.in); 7 String arr = in.nextLine(); 8 panduan zhi = new panduan(); 9 double x1=0,x2=0,y1=0,y2=0,k1=0,x3=0,x4=0,y3=0,y4=0,dist=0,k2=0; 10 String []a0 = arr.split(":"); 11 if(!zhi.fact(a0[1])) 12 { 13 System.out.print("Wrong Format"); 14 } 15 else 16 { 17 char [] a = a0[0].toCharArray(); 18 String []a01 = a0[1].split(" "); 19 if(a01.length<2||a01.length>4) 20 { 21 System.out.print("wrong number of points"); 22 } 23 else 24 { 25 switch(a[0]) 26 { 27 case '1': 28 { 29 String []a1 = a0[1].split(" "); 30 if(a1.length!=2) 31 { 32 System.out.println("wrong number of points"); 33 } 34 else 35 { 36 String []a2 = a1[0].split(","); 37 String []a3 = a1[1].split(","); 38 if(!zhi.fact(a2[0])||!zhi.fact(a2[1])||!zhi.fact(a3[0])||!zhi.fact(a3[1])) 39 { 40 System.out.print("Wrong Format"); 41 } 42 else 43 { 44 x1 = Double.parseDouble(a2[0]); 45 y1 = Double.parseDouble(a2[1]); 46 x2 = Double.parseDouble(a3[0]); 47 y2 = Double.parseDouble(a3[1]); 48 if(x1==x2&&y1==y2) 49 { 50 System.out.print("points coincide"); 51 } 52 else 53 { 54 if(x1==x2) 55 { 56 System.out.print("Slope does not exist"); 57 } 58 else 59 { 60 System.out.print((y1-y2)/(x1-x2)); 61 } 62 } 63 } 64 } 65 } 66 break; 67 case '2': 68 { 69 String []a1 = a0[1].split(" "); 70 if(a1.length!=3) 71 { 72 System.out.println("wrong number of points"); 73 } 74 else 75 { 76 String []a2 = a1[0].split(","); 77 String []a3 = a1[1].split(","); 78 String []a4 = a1[2].split(","); 79 if(!zhi.fact(a2[0])||!zhi.fact(a2[1])||!zhi.fact(a3[0])||!zhi.fact(a4[0])||!zhi.fact(a4[1])) 80 { 81 System.out.print("Wrong Format"); 82 } 83 else 84 { 85 x1 = Double.parseDouble(a2[0]); 86 y1 = Double.parseDouble(a2[1]); 87 x2 = Double.parseDouble(a3[0]); 88 y2 = Double.parseDouble(a3[1]); 89 x3 = Double.parseDouble(a4[0]); 90 y3 = Double.parseDouble(a4[1]); 91 if(x3==x2&&y3==y2) 92 { 93 System.out.print("points coincide"); 94 } 95 else 96 { 97 dist = Math.abs((y2-y3)*x1/(x2-x3)-y1-(y2-y3)*x2/(x2-x3)+y2)/Math.sqrt(1+((y2-y3)*(y2-y3))/((x2-x3)*(x2-x3))); 98 System.out.print(dist); 99 } 100 } 101 } 102 } 103 break; 104 case '3': 105 { 106 String []a1 = a0[1].split(" "); 107 if(a1.length!=3) 108 { 109 System.out.println("wrong number of points"); 110 } 111 else 112 { 113 String []a2 = a1[0].split(","); 114 String []a3 = a1[1].split(","); 115 String []a4 = a1[2].split(","); 116 x1 = Double.parseDouble(a2[0]); 117 y1 = Double.parseDouble(a2[1]); 118 x2 = Double.parseDouble(a3[0]); 119 y2 = Double.parseDouble(a3[1]); 120 x3 = Double.parseDouble(a4[0]); 121 y3 = Double.parseDouble(a4[1]); 122 if(!zhi.fact(a2[0])||!zhi.fact(a2[1])||!zhi.fact(a3[0])||!zhi.fact(a4[0])||!zhi.fact(a4[1])) 123 { 124 System.out.print("Wrong Format"); 125 } 126 else 127 { 128 if((x1==x2&&y1==y2)||(x1==x3&&y1==y3)||(x3==x2&&y3==y2)) 129 { 130 System.out.print("points coincide"); 131 } 132 else 133 { 134 k1 = (y2-y3)/(x2-x3); 135 k2 = x1/y1; 136 if(k1==k2) 137 { 138 System.out.print("true"); 139 } 140 else 141 { 142 System.out.print("false"); 143 } 144 } 145 } 146 } 147 } 148 break; 149 case '4': 150 { 151 String []a1 = a0[1].split(" "); 152 if(a1.length!=4) 153 { 154 System.out.println("wrong number of points"); 155 } 156 else 157 { 158 String []a2 = a1[0].split(","); 159 String []a3 = a1[1].split(","); 160 String []a4 = a1[2].split(","); 161 String []a5 = a1[3].split(","); 162 x1 = Double.parseDouble(a2[0]); 163 y1 = Double.parseDouble(a2[1]); 164 x2 = Double.parseDouble(a3[0]); 165 y2 = Double.parseDouble(a3[1]); 166 x3 = Double.parseDouble(a4[0]); 167 y3 = Double.parseDouble(a4[1]); 168 x4 = Double.parseDouble(a5[0]); 169 y4 = Double.parseDouble(a5[1]); 170 if(!zhi.fact(a2[0])||!zhi.fact(a2[1])||!zhi.fact(a3[0])||!zhi.fact(a4[0])||!zhi.fact(a5[0])||!zhi.fact(a5[1])) 171 { 172 System.out.print("Wrong Format"); 173 } 174 else 175 { 176 if((x1==x2&&y1==y2)||(x1==x3&&y1==y3)||(x3==x2&&y3==y2)||(x1==x4&&y1==y4)||(x2==x4&&y2==y4)||(x3==x4&&y3==y4)) 177 { 178 System.out.print("points coincide"); 179 } 180 else 181 { 182 if(Math.abs((y1-y2)*(x3-x4)-(y3-y4)*(x1-x2))<=1e-6) 183 { 184 System.out.println("true"); 185 } 186 else 187 { 188 System.out.println("false"); 189 } 190 } 191 } 192 } 193 } 194 break; 195 case '5': 196 { 197 String []a1 = a0[1].split(" "); 198 if(a1.length!=4) 199 { 200 System.out.println("wrong number of points"); 201 } 202 else 203 { 204 String []a2 = a1[0].split(","); 205 String []a3 = a1[1].split(","); 206 String []a4 = a1[2].split(","); 207 String []a5 = a1[3].split(","); 208 x1 = Double.parseDouble(a2[0]); 209 y1 = Double.parseDouble(a2[1]); 210 x2 = Double.parseDouble(a3[0]); 211 y2 = Double.parseDouble(a3[1]); 212 x3 = Double.parseDouble(a4[0]); 213 y3 = Double.parseDouble(a4[1]); 214 x4 = Double.parseDouble(a5[0]); 215 y4 = Double.parseDouble(a5[1]); 216 if(!zhi.fact(a2[0])||!zhi.fact(a2[1])||!zhi.fact(a3[0])||!zhi.fact(a4[0])||!zhi.fact(a5[0])||!zhi.fact(a5[1])) 217 { 218 System.out.print("Wrong Format"); 219 } 220 else 221 { 222 if((x1==x2&&y1==y2)||(x1==x3&&y1==y3)||(x3==x2&&y3==y2)||(x1==x4&&y1==y4)||(x2==x4&&y2==y4)||(x3==x4&&y3==y4)) 223 { 224 System.out.print("points coincide"); 225 } 226 else 227 { 228 if(Math.abs((y1-y2)*(x3-x4)-(y3-y4)*(x1-x2))<=1e-6) 229 { 230 System.out.println("is parallel lines,have no intersection point"); 231 } 232 else 233 { 234 double x=(x4*(x3-x4)*(y1-y2)-x2*(x1-x2)*(y3-y4)-(y4-y2)*(y3-y4)*(y1-y2))/((x3-x4)*(y1-y2)-(x1-x2)*(y3-y4)); 235 double y=((x-x2)*(x1-x2)+y2*(y1-y2))/(y1-y2); 236 System.out.print(x+","+y); 237 if((x>x1&&x<x2)||((x<x1)&&(x<x2))||(x>x3&&x<x4)||((x<x3)&&(x<x3))) 238 { 239 System.out.println(" true"); 240 } 241 else 242 { 243 System.out.println(" false"); 244 } 245 } 246 } 247 } 248 break; 249 } 250 } 251 } 252 } 253 } 254 } 255 } 256 class panduan { 257 boolean fact(String a) 258 { 259 boolean b = true; 260 for(int i=0;i<a.length();i++) 261 { 262 if(a.charAt(i)=='-'||a.charAt(i)=='+') 263 { 264 if(a.charAt(i+1)=='-'||a.charAt(i+1)=='+') 265 { 266 b=false; 267 } 268 } 269 } 270 return b; 271 } 272 } 本题条件繁多内容复杂,本题引用了第一题中的panduan类用来校验字符串输入的是否合理,用Double.parseDouble()放法将字符类型转化为double类型的数据进行运算,使用split对字符串进行分割,再用 switch函数判断输入哪种情况,再进行相应的实现。 具体思路实现 1.先对输入的字符串用split方法进行分割; 2.再用switch函数对其进行判断,具体要求具体实现; 3.再将分割后的字符串进行进一步分割,再用pandua类进行校验; 4.最后再按照题目的要求进行相应的输出; |
用户输入一组选项和数据,进行与三角形有关的计算。选项包括: 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坐标之间以英文","分隔,点与点之间以一个英文空格分隔。 |
输出格式:基本输出格式见每种选项的描述。 选项4中所输入线的两个点坐标重合,输出"points coincide", |
import java.util.Scanner; public class Main { public static void main(String[] args) { // TODO 自动生成的方法存根 Scanner in = new Scanner(System.in); String arr = in.nextLine(); double x1=0,x2=0,y1=0,y2=0,k1=0,x3=0,x4=0,y3=0,y4=0,dist=0,k2=0; String []a0 = arr.split(":"); char [] a = a0[0].toCharArray(); String []a01 = a0[1].split(" "); if(a01.length!=3||a01.length!=5) { System.out.print("wrong number of points"); } else { switch(a[0]) { case '1': { String []a1 = a0[1].split(" "); String []a2 = a1[0].split(","); String []a3 = a1[1].split(","); String []a4 = a1[2].split(","); x1 = Double.parseDouble(a2[0]); y1 = Double.parseDouble(a2[1]); x2 = Double.parseDouble(a3[0]); y2 = Double.parseDouble(a3[1]); x3 = Double.parseDouble(a4[0]); y3 = Double.parseDouble(a4[1]); if(Math.abs(Math.sqrt(x1-x2)*(x1-x2)+(y1-y2)*(y1-y2))==Math.abs(Math.sqrt(x1-x3)*(x1-x3)+(y1-y3)*(y1-y3))) { System.out.print("true "); } else { System.out.print("false "); } if((Math.abs(Math.sqrt(x2-x3)*(x2-x3)+(y2-y3)*(y2-y3))==Math.abs(Math.sqrt(x2-x3)*(x2-x3)+(y2-y3)*(y2-y3)))&&(Math.abs(Math.sqrt(x1-x2)*(x1-x2)+(y1-y2)*(y1-y2))==Math.abs(Math.sqrt(x1-x3)*(x1-x3)+(y1-y3)*(y1-y3)))) { System.out.print("true"); } else { System.out.print("false "); } } break; case '2': { String []a11 = a0[1].split(" "); String []a21 = a11[0].split(","); String []a31 = a11[1].split(","); String []a41 = a11[2].split(","); x1 = Double.parseDouble(a21[0]); y1 = Double.parseDouble(a21[1]); x2 = Double.parseDouble(a31[0]); y2 = Double.parseDouble(a31[1]); x3 = Double.parseDouble(a41[0]); y3 = Double.parseDouble(a41[1]); double zhou = Math.abs(Math.sqrt(x1-x2)*(x1-x2)+(y1-y2)*(y1-y2))+Math.abs(Math.sqrt(x1-x3)*(x1-x3)+(y1-y3)*(y1-y3))+Math.abs(Math.sqrt(x2-x3)*(x2-x3)+(y2-y3)*(y2-y3)); System.out.print(zhou+" "); double S = Math.abs((x1*y2-x1*y3+x2*y3-x2*y1+x3*y1-x2*y2)); System.out.print(S+" "); double heng = (x1+x2+x3)/3; double zong = (y1+y2+y3)/3; System.out.print(heng+","+zong); } break; case '3': { String []a11 = a0[1].split(" "); String []a21 = a11[0].split(","); String []a31 = a11[1].split(","); String []a41 = a11[2].split(","); x1 = Double.parseDouble(a21[0]); y1 = Double.parseDouble(a21[1]); x2 = Double.parseDouble(a31[0]); y2 = Double.parseDouble(a31[1]); x3 = Double.parseDouble(a41[0]); y3 = Double.parseDouble(a41[1]); double d3 = Math.abs(Math.sqrt(x2-x3)*(x2-x3)+(y2-y3)*(y2-y3)); double d2 = Math.abs(Math.sqrt(x1-x3)*(x1-x3)+(y1-y3)*(y1-y3)); double d1 = Math.abs(Math.sqrt(x1-x2)*(x1-x2)+(y1-y2)*(y1-y2)); if(d1+d2<=d3&&d3+d2<=d1&&d1+d3<=d2) { System.out.print("false false false"); } else { if(d1*d1+d2*d2>d3*d3) { System.out.print("true "); } else { System.out.print("false "); } if(d1*d1+d2*d2==d3*d3) { System.out.print("true "); } else { System.out.print("false "); } if(d1*d1+d2*d2<d3*d3) { System.out.print("true"); } else { System.out.print("false"); } } } break; case '4': { String m[]=b[0].split(","); class panduan { boolean fact(String a) 本题可以说是第二题的进阶版,条件比第二题更加复杂,需要使用的知识涉及几何学,偏难具体思路与第二题相差不多就不再赘述. |
设计与分析:见源代码末尾。
踩坑心得:第三次题目集的题目非法输入的种类太多,用if else太过繁琐,输入样例不太全不好对代码进行修改,只能根据多次提交来猜测测试点。
改进建议:建议多提供输入样例,方便进行判断,修善代码。
总结:三次题目集让我对于循环语句和条件语句的使用更加熟练,更加熟练的运用字符串的方法,对字符串的解析,建议老师能够抽空讲一讲某些题目,也希望老师不要将题目设置的过于繁琐,应该更贴近于教学内容。
标签:总结,题目,String,Double,parseDouble,PTA,System,x2,y3 来源: https://www.cnblogs.com/xsxyyds/p/16124369.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。