标签:判断 题目 String double pta Blog java charAt
一:前言
首先,总结一下这几周的java学习和对pta题目集的分析。这学期我才刚刚接触到java语言的学习中来,但由于先前学习过C语言,所以入门起来还是相对轻松的。PTA题目集的第一次作业题目难度相对简单,主要就是考察java语言的一些基本运用(字符串,数组等简单运用)和简单的编写,虽然题比较多,但是都是比较容易就能完成的。第二次作业相对来说难度就有所提高,主要考察字符串的一些用法,刚刚做的时候由于对一些java自带的类不熟,所以还是有点难度的,虽然只有三道题不过完成得还是有些艰难。第三次作业难度应该是最大的,虽然也是只有三道题,但是每道题的题量也是很大的,刚刚拿到是甚至无从下手,经过多方查找资料自学相关内容后才磕磕绊绊得完成,而且完成得并不是特别好,还是非常遗憾的。
二:设计分析与总结
(1)PTA题目集一:
1.设计分析
题目集一的作业相对简单,代码的长度也比较小,都是一些比较简单的输入输出,做为我们接触java编程的第一次作业还是非常友好的,测试点都非常容易得都通过了,所有其实并没有什么好分析的。
2.踩坑心得
如此简单的题目其实也有坑的,我第一次提交时也有不过的点,经过研究题目我发现,是我的输出格式不对导致的,控制输出格式后再输出就成功通过了,经过这次踩坑,我也学会了使用类似于:String D1 = String.format("%02d", D);的格式控制方法,也是有很多收获的。
(2)PTA题目集二:
1.设计分析
题目:
题目集二的作业难度有所提升,但是1,3题还是很基础的,2题的难度相对更大,所以,我在这里主要分析2题。第2题是模拟串口接收处理程序,需要我们分析输入的一串由0和1数字,然后根据要求进行相应的判断,再根据判断进行不同的输出,其中需要判断的点很多,包括数据足不足11位,有无起始位,空闲位,结束符,奇偶判断是否通过等,判断起来相对复杂,比较繁琐。更进一步理解题目,我们会发现,除了最基本的11位字数判断,用到最多的还有起始位“0”的判断,只有找到起始位“0”,才能进行下一步的判断,所有,我们在这里把起始位“0”的判断分成一个单独的区域:
这样,我们每次需要判断起始位“0”时只需要引用panduan()就能完成了。然后就是编写主函数,先判断前提,是否足11位,是否有起始符“0”,如果都满足再进行下一步判断,一步步判断空闲位,结束符和奇偶判断,用循环判断,依次输出。这样这道题就解决了,做完了发现其实难度并不是很高,只是有些许繁琐而已,将其中一些部分做成方法确实简便了很多,剩下的就是循环判断,用charAt()锁定字符判断的方法非常好用,由于11位数字的判断点很有规律,所以操作起来并不难,剩下的只需要自己细心就行了,代码附下:
import java.util.Scanner; public class Main { //判断 private static boolean panduan(char[] chars, int len) { boolean ling = false; for (int i = 0; i < len; i++) if (chars[i] == '0') { ling = true; break; } return ling; } public static void main(String[] args) { Scanner in = new Scanner(System.in); String str = in.next(); int c = 1; char[] str2 = str.toCharArray(); if (str.length() >= 11 && panduan(str2, str.length())) { String str3; for (int i = 0; i < str.length(); i++) { int n = 0; if (str2[i] == '0' && str.length() - i >= 11) { str3 = str.substring(i + 1, i + 11); for (int j = 0; j < 8; j++) n = n + str3.charAt(j); //n&1:与操作,判断 n 二进制最右一位是否为 1 。奇==1 偶==0 final boolean duan = ((n & 1) == 1 && str3.charAt(8) == '0') || ((n & 1) == 0 && str3.charAt(8) == '1'); if (duan==true) { if (str3.charAt(9) != '1') { System.out.println(c++ + ":" + "validate error"); } else { System.out.println(c++ + ":" + str3.substring(0, 8));//0到7 } } else if (!(str3.charAt(9) != '1')) { System.out.println(c + ":parity check error"); c++; } else { System.out.println(c+ ":validate error"); c++; } i = i + 10; } } } else { System.out.println("null data"); } } }
2.踩坑心得
在做这道题时,我也遇到了一些坑,比如输出格式的控制等,我刚开始时没有做到判断正确输出后提行在进行判断输出,并且递加前面的序号(没有什么经验),但是经过我的思考,我发现再增加一个大循环就可以实现判断输出后继续重复判断剩下的字符输出,在每次判断后递加“1”就可以完成序号的递加,再控制控制格式,题目就完成了。还有就是奇偶判断,我学到了n&1这样的操作,能够更简便得进行奇偶判断,也算是很有收获。
3.改进建议
其实,后来我发现我的编码还有很多改进的空间,比如,我可以把别的判断也单独做成方法,这样的话我的代码会更加简洁明了,更容易看懂。
(3)PTA题目集三q1:
1.设计分析
题目:
先看题目,我们要读取输入坐标的各个坐标的数值,判断是否格式输入正确,是否非法输入,输入点是否重合,满足各个判断后再进行两点坐标距离的计算,看似很简单,其实暗藏难点,对于我来说,要取出输入坐标的数值(带符号)是很难的,于是我开始在网上学习,找到了用substring()截取字符串的方法(其实很麻烦,后面学会了正则表达式),成功分割出数值:
也算是解决了这个难点,剩下的判断就非常好做了,这次我采用了分很多方法的方式,使得main函数很简洁,包括panduan1(),panduan2(),juli()等,代码附下:
import java.util.Scanner; public class Main { //距离 void jishuan(double a1,double a2,double a3,double a4) { double s1; s1 = Math.sqrt((a1-a3)*(a1-a3)+(a2-a4)*(a2-a4)); System.out.println(s1); } //判断1 int panduan1(String s) { int ttt=0; int tt=0; for(int i = 0;i<s.length();i++) { if(s.charAt(i)==',') { tt++; } } if(tt<=1) { System.out.println("Wrong Format"); } else { for(int i=0;i<s.length();i++) { if(s.charAt(i)=='+'&&(s.charAt(i+1)=='+'||s.charAt(i+1)=='-'||s.charAt(i+1)=='.')) { System.out.println("Wrong Format"); } else if(s.charAt(i)=='-'&&(s.charAt(i+1)=='+'||s.charAt(i+1)=='-'||s.charAt(i+1)=='.')) { System.out.println("Wrong Format"); } else if(s.charAt(i)=='.'&&(s.charAt(i+1)=='+'||s.charAt(i+1)=='-'||s.charAt(i+1)=='.')) { System.out.println("Wrong Format"); } else if(s.charAt(i)=='0'&&s.charAt(i+1)=='0') { ttt=4; } else { ttt=1; } } } return ttt; } //判断2 int panduan2(String s) { int c=0; int vvv=0; for(int i = 0;i<s.length();i++) { if(s.charAt(i)==',') { c++; } } if(c>2) { System.out.println("wrong number of points"); } else { vvv=1; } return vvv; } // public static void main(String[] args) { Scanner in = new Scanner(System.in); String s = in.nextLine(); Main js = new Main(); if(js.panduan1(s)==1&&js.panduan2(s)==1) { //x1 String x1 = s.substring(0, s.indexOf(",")); double a1 = Double.parseDouble(x1); //y1 String y1 = s.substring(x1.length()+1,s.indexOf(" ")); double a2 = Double.parseDouble(y1); //y2 int index=s.indexOf(","); index=s.indexOf(",", index+1); String y2=s.substring(index+1); double a4 = Double.parseDouble(y2); //x2 String x2 = s.substring(s.indexOf(" ")+1,index); double a3 = Double.parseDouble(x2); js.jishuan(a1,a2,a3,a4); } } }
2.踩坑心得
这道题的坑点比想象中要多很多,其中输入格式的判断折磨了我好久,我一直在苦苦的找什么时候会属于格式错误,但始终有格式错误的测试点过不了,折腾了很久还是没有发现,由于不知道测试点设置的是什么,所以一直留了测试点没有过,看来是我实力还不够好,还需要多加练习才行。
3.改进建议
在截取字符串中坐标数值时,我使用了很麻烦的substring()方法,一个一个手动去截取的,虽然说取出的数字都是正确的,但是真的很麻烦,代码也很长,一点都不清晰明了,这里如果使用正则表达式的分割功能其实会简单很多,而且要取出超过2个坐标点的坐标数值也能轻易办到,十分灵活。
(4)PTA题目集三q2:
1.设计分析
题目:
这到题需要我们输入一串字符串,根据判断我们输入的选项和坐标来进行判断,包括格式判断,点重合判断,不符合要求判断等,并且根据输入的选项进行不同的操作。这道题相对上一道题来说难度提升了不少,不仅要判断输入的选项,坐标点的数量也增加了,且变得不确定了,所以我们上一题使用的截取字符串中数字的方法变得不再适用,于是我学了正则表达式,只需要用它把字符串从指定字符处切断,将分割开的字符存入数组中便可以了,具体操作方法如下:
这样我们就可以灵活得提取字符串中的内容并转化为double类型了。最核心的问题解决了,剩下的就是老套路,编写判断的方法和操作的方法就行了,要判断输入的选项其实很简单,只需要用charAt()判断字符串输入的第一个字是几,再跳转到对应的方法中就可以完成了,实现起来也很简单,如下:
其中fangfa1(),fangfa2(),fangfa3(),fangfa4(),fangfa5()就是编写的对应的方法了,此外几个判断的方法也要单独做成函数,这样引用起来就非常简单了,每个选项对应方法的编写其实都是一些一些简单的数学公式,如果忘了的话,网上都是可以查到的,并没有什么难度,将上述东西结合起来,就编写完成了,代码附下:
import java.util.Scanner; import java.util.regex.Matcher; import java.util.regex.Pattern; public class Main { boolean panduan(String s) { boolean flag = false; int m=0; //else if((s.charAt(0)!='1'&&s.charAt(0)!='2'&&s.charAt(0)!='3'&&s.charAt(0)!='4'&&s.charAt(0)!='5')||s.charAt(1)!=':') //{ //System.out.println("Wrong Format") //} //else //{ for(int i = 0;i<s.length();i++) { if(s.charAt(i)=='+'&&(s.charAt(i+1)=='+'||s.charAt(i+1)=='-'||s.charAt(i+1)=='.'||s.charAt(i+1)==' ')) { System.out.println("Wrong Format");break; } else if(s.charAt(i)=='-'&&(s.charAt(i+1)=='+'||s.charAt(i+1)=='-'||s.charAt(i+1)=='.'||s.charAt(i+1)==' ')) { System.out.println("Wrong Format");break; } else if(s.charAt(i)=='.'&&(s.charAt(i+1)=='+'||s.charAt(i+1)=='-'||s.charAt(i+1)=='.'||s.charAt(i+1)==' ')) { System.out.println("Wrong Format");break; } else if(s.charAt(i)==' '&&(s.charAt(i+1)=='.'||s.charAt(i+1)==' ')) { System.out.println("Wrong Format");break; } else if((s.charAt(0)!='1'&&s.charAt(0)!='2'&&s.charAt(0)!='3'&&s.charAt(0)!='4'&&s.charAt(0)!='5')||s.charAt(1)!=':') { System.out.println("Wrong Format");flag=true;break; } else { int c=0; for(int j = 0;j<s.length();j++) { if(s.charAt(j)==',') { c++; } } if(s.charAt(0)=='1'&&c!=2) { flag=false; } else if(s.charAt(0)=='2'&&c!=3) { flag=false; } else if(s.charAt(0)=='3'&&c!=3) { flag=false; } else if(s.charAt(0)=='4'&&c!=4) { flag=false; } else if(s.charAt(0)=='5'&&c!=4) { flag=false; } else if(m==0) { flag=true; } } } return flag; } //---------------------------------------------------正则表达式引用---------------------------------------------------------- //输入方法一 void fangfa1(String s) { String reg = "\\:|\\,|\\ "; String[] arr = s.split(reg); String X1 = arr[1]; double x1 = Double.valueOf(X1.toString()); String Y1 = arr[2]; double y1 = Double.valueOf(Y1.toString()); String X2 = arr[3]; double x2 = Double.valueOf(X2.toString()); String Y2 = arr[4]; double y2 = Double.valueOf(Y2.toString()); if(x1==x2&&y1==y2) { System.out.println("points coincide"); } else if(x1==x2&&y1!=y2) { System.out.println("Slope does not exist"); } else { double k = (y2-y1)/(x2-x1); System.out.println(k); } } //输入方法二 void fangfa2(String s) { String reg = "\\:|\\,|\\ "; String[] arr = s.split(reg); String X1 = arr[1]; double x1 = Double.valueOf(X1.toString()); String Y1 = arr[2]; double y1 = Double.valueOf(Y1.toString()); String X2 = arr[3]; double x2 = Double.valueOf(X2.toString()); String Y2 = arr[4]; double y2 = Double.valueOf(Y2.toString()); String X3 = arr[5]; double x3 = Double.valueOf(X3.toString()); String Y3 = arr[6]; double y3 = Double.valueOf(Y3.toString()); if(x3==x2&&y3==y2) { System.out.println("points coincide"); } else { double L = Math.abs((y2-y3)*x1+(x3-x2)*y1+x2*y3-y2*x3)/Math.sqrt((y2-y3)*(y2-y3)+(x2-x3)*(x2-x3)); System.out.println(L); } } //输入方法三 void fangfa3(String s) { String reg = "\\:|\\,|\\ "; String[] arr = s.split(reg); String X1 = arr[1]; double x1 = Double.valueOf(X1.toString()); String Y1 = arr[2]; double y1 = Double.valueOf(Y1.toString()); String X2 = arr[3]; double x2 = Double.valueOf(X2.toString()); String Y2 = arr[4]; double y2 = Double.valueOf(Y2.toString()); String X3 = arr[5]; double x3 = Double.valueOf(X3.toString()); String Y3 = arr[6]; double y3 = Double.valueOf(Y3.toString()); double S = Math.abs((y3-y1)*(x2-x1)-(y2-y1)*(x3-x1)); if(S<=1e-6) { System.out.println("true"); } else { System.out.println("false"); } } //输入方法四 void fangfa4(String s) { String reg = "\\:|\\,|\\ "; String[] arr = s.split(reg); String X1 = arr[1]; double x1 = Double.valueOf(X1.toString()); String Y1 = arr[2]; double y1 = Double.valueOf(Y1.toString()); String X2 = arr[3]; double x2 = Double.valueOf(X2.toString()); String Y2 = arr[4]; double y2 = Double.valueOf(Y2.toString()); String X3 = arr[5]; double x3 = Double.valueOf(X3.toString()); String Y3 = arr[6]; double y3 = Double.valueOf(Y3.toString()); String X4 = arr[7]; double x4 = Double.valueOf(X4.toString()); String Y4 = arr[8]; double y4 = Double.valueOf(Y4.toString()); if(x1==x2&&y1==y2||x3==x4&&y3==y4) { System.out.println("points coincide"); } else if((x1==x2&&y1!=y2)&&(x3==x4&&y3!=y4)) { System.out.println("true"); } else { double k1 = (y2-y1)/(x2-x1); double k2 = (y4-y3)/(x4-x3); if(k1==k2) { System.out.println("true"); } else { System.out.println("false"); } } } //输入方法五 void fangfa5(String s) { String reg = "\\:|\\,|\\ "; String[] arr = s.split(reg); String X1 = arr[1]; double x1 = Double.valueOf(X1.toString()); String Y1 = arr[2]; double y1 = Double.valueOf(Y1.toString()); String X2 = arr[3]; double x2 = Double.valueOf(X2.toString()); String Y2 = arr[4]; double y2 = Double.valueOf(Y2.toString()); String X3 = arr[5]; double x3 = Double.valueOf(X3.toString()); String Y3 = arr[6]; double y3 = Double.valueOf(Y3.toString()); String X4 = arr[7]; double x4 = Double.valueOf(X4.toString()); String Y4 = arr[8]; double y4 = Double.valueOf(Y4.toString()); if(x1==x2&&y1==y2||x3==x4&&y3==y4) { System.out.println("points coincide"); } else if((x1==x2&&y1!=y2)&&(x3==x4&&y3!=y4)) { System.out.println("is parallel lines,have no intersection point"); } else { double k1 = (y2-y1)/(x2-x1); double k2 = (y4-y3)/(x4-x3); if(k1==k2) { System.out.println("is parallel lines,have no intersection point"); } else { double x5=((x2-x1)*(x4*y3-x3*y4)-(x4-x3)*(x2*y1-x1*y2))/((y2-y1)*(x4-x3)-(y4-y3)*(x2-x1)); double y5=((x4*y3-x3*y4)*(y1-y2)-(x2*y1-x1*y2)*(y3-y4))/((x1-x2)*(y3-y4)-(x3-x4)*(y1-y2)); //double x5 = (x1*(y2-y1)/(x2-x1)-x3*(y4-y3)/(x4-x3)+y3-y1)/(y2-y1)/(x2-x1)-(y4-y3)/(x4-x3); //double y5 = (y2-y1)*(x5-x1)/(x2-x1)+y1; // double x5= ((x2 - x1) * (x3 - x4) * (y3 - y1)-x3 * (x2 - x1) * (y3 - y4) + x1 * (y2 - y1) * (x3 - x4))/((y2 - y1) * (x3 - x4) - (x2 - x1) * (y3 - y4)); //double y5=((y2 - y1) * (y3 - y4) * (x3 - x1) - y3 * (y2 - y1) * (x3 - x4) + y1 * (x2 - x1) * (y3 - y4))/((y2 - y1) * (y3 - y4) - (y2 - y1) * (x3 - x4)); if((x5-x1)*(y2-y1)==(x2-x1)*(y5-y1)&&Math.min(x1,x2)<x5&&x5<Math.max(x1,x2)&&Math.min(y1,y2)<y5&&y5<Math.max(y1,y2)) { System.out.println(x5+","+y5+" ture"); } else if((x5-x3)*(y4-y3)==(x4-x3)*(y5-y3)&&Math.min(x3,x4)<x5&&x5<=Math.max(x3,x4)&&Math.min(y3,y4)<y5&&y5<Math.max(y3,y4)) { System.out.println(x5+","+y5+" ture"); } else { System.out.println(x5+","+y5+" false"); } } } } //主函数------------------------------------------------------------------------------------------------------------------- public static void main(String[] args) { Scanner in = new Scanner(System.in); String s = in.nextLine(); Main js = new Main(); if(!js.panduan(s)) { System.out.println("wrong number of points"); } else { if(s.charAt(0)=='1') { js.fangfa1(s); } else if(s.charAt(0)=='2') { js.fangfa2(s); } else if(s.charAt(0)=='3') { js.fangfa3(s); } else if(s.charAt(0)=='4') { js.fangfa4(s); } else if(s.charAt(0)=='5') { js.fangfa5(s); } } } }
2.踩坑心得
这道题着实有很多坑,我还犯了很低级的错误,刚开始我运行代码时一直运行不了,后来才发现时没有引正则表达式的import,如果要用正则表达式,记得加上:
别犯和我一样的,的错误。还有就是和上题一样的格式错误总是找不全,且至今没有找到
也不知道时哪里出了问题,一定要想办法解决。还有就是交点计算的公式,特别繁琐,一不小心就会写错出事,当时我交点一直都过不了,后面发现是公式错了,大家一定要小心再小心,特别是在用这些复杂的公式时,要格外注意。
3.改进建议
在写完PTA后,我发现,其实我的代码还是太长太麻烦了,应该把所以点的截取放在一个方法里面,不用再每个要用的地方都去截取,不仅麻烦,还一点都不美观,属实是费力不讨好錒,写之前应该考虑一下这方面的设计才行呀。
(5)PTA题目集三q3:
1.设计分析
题目:
相对于前两道题,其实编写框架的难度其实一样,难点在于具体的选项中的方法的实现特别有难度,特别是第4,5选项的实现很难(说实话,换成数学题我都不会),在网上找了很多资料都没有找到解决方法,所以说,这道题我只得了一半分。这道题还有一个难点就是输出保留的控制,四舍五入保留6位小数,不足6位小数,不保留,我当时思考了了好久才想到数乘以1000000再向10取余来判断是否要保留小数的情况:
这样就能控制输出的格式了,完整代码附下:
import java.util.Scanner; import java.util.regex.Matcher; import java.util.regex.Pattern; import java.text.DecimalFormat; public class Main { //判断 boolean panduan(String s) { boolean flag = false; if((s.charAt(0)!='1'&&s.charAt(0)!='2'&&s.charAt(0)!='3'&&s.charAt(0)!='4'&&s.charAt(0)!='5')||s.charAt(1)!=':') { System.out.println("Wrong Format");flag=true; } else { for(int i = 0;i<s.length();i++) { if(s.charAt(i)=='+'&&(s.charAt(i+1)=='+'||s.charAt(i+1)=='-'||s.charAt(i+1)=='.'||s.charAt(i+1)==' ')) { System.out.println("Wrong Format");break; } else if(s.charAt(i)=='-'&&(s.charAt(i+1)=='+'||s.charAt(i+1)=='-'||s.charAt(i+1)=='.'||s.charAt(i+1)==' ')) { System.out.println("Wrong Format");break; } else if(s.charAt(i)=='.'&&(s.charAt(i+1)=='+'||s.charAt(i+1)=='-'||s.charAt(i+1)=='.'||s.charAt(i+1)==' ')) { System.out.println("Wrong Format");break; } else if(s.charAt(i)==' '&&(s.charAt(i+1)=='.'||s.charAt(i+1)==' ')) { System.out.println("Wrong Format");break; } else { int c=0; for(int j = 0;j<s.length();j++) { if(s.charAt(j)==',') { c++; } } if(s.charAt(0)=='1'&&c!=3) { flag=false; } else if(s.charAt(0)=='2'&&c!=3) { flag=false; } else if(s.charAt(0)=='3'&&c!=3) { flag=false; } else if(s.charAt(0)=='4'&&c!=5) { flag=false; } else if(s.charAt(0)=='5'&&c!=4) { flag=false; } else { flag=true; } } } } return flag; } //1 void fangfa1(String s) { int m=-1; String reg = "\\:|\\,|\\ "; String[] arr = s.split(reg); String X1 = arr[1]; double x1 = Double.valueOf(X1.toString()); String Y1 = arr[2]; double y1 = Double.valueOf(Y1.toString()); String X2 = arr[3]; double x2 = Double.valueOf(X2.toString()); String Y2 = arr[4]; double y2 = Double.valueOf(Y2.toString()); String X3 = arr[5]; double x3 = Double.valueOf(X3.toString()); String Y3 = arr[6]; double y3 = Double.valueOf(Y3.toString()); double s1 = Math.sqrt((x2-x1)*(x2-x1)+(y2-y1)*(y2-y1)); double s2 = Math.sqrt((x2-x3)*(x2-x3)+(y2-y3)*(y2-y3)); double s3 = Math.sqrt((x1-x3)*(x1-x3)+(y1-y3)*(y1-y3)); if(s1+s2<=s3||s1+s3<=s2||s2+s3<=s1) { System.out.println("data error"); } else { if(s1==s2&&s1==s3&&s2==s3) { m=0; System.out.println("true true"); } else if((s1==s2||s1==s3||s2==s3)&&m!=0) { System.out.println("true false"); } else if(s1!=s2&&s2!=s3&&s1!=s3) { System.out.println("false false"); } } } //2 void fangfa2(String s) { String reg = "\\:|\\,|\\ "; String[] arr = s.split(reg); String X1 = arr[1]; double x1 = Double.valueOf(X1.toString()); String Y1 = arr[2]; double y1 = Double.valueOf(Y1.toString()); String X2 = arr[3]; double x2 = Double.valueOf(X2.toString()); String Y2 = arr[4]; double y2 = Double.valueOf(Y2.toString()); String X3 = arr[5]; double x3 = Double.valueOf(X3.toString()); String Y3 = arr[6]; double y3 = Double.valueOf(Y3.toString()); double s1 = Math.sqrt((x2-x1)*(x2-x1)+(y2-y1)*(y2-y1)); double s2 = Math.sqrt((x2-x3)*(x2-x3)+(y2-y3)*(y2-y3)); double s3 = Math.sqrt((x1-x3)*(x1-x3)+(y1-y3)*(y1-y3)); if(s1+s2<=s3||s1+s3<=s2||s2+s3<=s1) { System.out.println("data error"); } else { double Z=s1+s2+s3; if((Z*1e6)%10!=0) { System.out.printf("%.6f ",Z); }else { System.out.print(Z+" "); } double L = Math.abs((y2-y3)*x1+(x3-x2)*y1+x2*y3-y2*x3)/Math.sqrt((y2-y3)*(y2-y3)+(x2-x3)*(x2-x3)); double B = s2*L/2; if((B*1e6)%10!=0) { System.out.printf("%.6f ",B); } else{ System.out.print(B+" "); } double xz=(x1+x2+x3)/3; double yz=(y1+y2+y3)/3; if((xz*1e6)%10!=0) { System.out.printf("%.6f",xz); System.out.print(","); } else { System.out.print(xz+","); } if((yz*1e6)%10!=0) { System.out.printf("%.6f",yz); } else{ System.out.print(yz); } //System.out.println(A1+" "+A2+" "+A3+","+A4); } } //3 void fangfa3(String s) { String reg = "\\:|\\,|\\ "; String[] arr = s.split(reg); String X1 = arr[1]; double x1 = Double.valueOf(X1.toString()); String Y1 = arr[2]; double y1 = Double.valueOf(Y1.toString()); String X2 = arr[3]; double x2 = Double.valueOf(X2.toString()); String Y2 = arr[4]; double y2 = Double.valueOf(Y2.toString()); String X3 = arr[5]; double x3 = Double.valueOf(X3.toString()); String Y3 = arr[6]; double y3 = Double.valueOf(Y3.toString()); double s1 = Math.sqrt((x2-x1)*(x2-x1)+(y2-y1)*(y2-y1)); double s2 = Math.sqrt((x2-x3)*(x2-x3)+(y2-y3)*(y2-y3)); double s3 = Math.sqrt((x1-x3)*(x1-x3)+(y1-y3)*(y1-y3)); if(s1+s2<=s3||s1+s3<=s2||s2+s3<=s1) { System.out.println("data error"); } else { if(Math.abs(s1*s1+s2*s2-s3*s3)==0||Math.abs(s1*s1+s3*s3-s2*s2)==0|Math.abs(s2*s2+s3*s3-s1*s1)==0) { System.out.println("false true false"); } else if(s1*s1+s2*s2-s3*s3<0||s1*s1+s3*s3-s2*s2<0|s2*s2+s3*s3-s1*s1<0) { System.out.println("true false false"); } else if(s1*s1+s2*s2-s3*s3>0||s1*s1+s3*s3-s2*s2>0|s2*s2+s3*s3-s1*s1>0) { System.out.println("false false true"); } } } //4 void fangfa4(String s) { String reg = "\\:|\\,|\\ "; String[] arr = s.split(reg); String X1 = arr[1]; double x1 = Double.valueOf(X1.toString()); String Y1 = arr[2]; double y1 = Double.valueOf(Y1.toString()); String X2 = arr[3]; double x2 = Double.valueOf(X2.toString()); String Y2 = arr[4]; double y2 = Double.valueOf(Y2.toString()); String X3 = arr[5]; double x3 = Double.valueOf(X3.toString()); String Y3 = arr[6]; double y3 = Double.valueOf(Y3.toString()); String X4 = arr[7]; double x4 = Double.valueOf(X4.toString()); String Y4 = arr[8]; double y4 = Double.valueOf(Y4.toString()); String X5 = arr[9]; double x5 = Double.valueOf(X5.toString()); String Y5 = arr[10]; double y5 = Double.valueOf(Y5.toString()); double s1 = Math.sqrt((x4-x3)*(x4-x3)+(y4-y3)*(y4-y3)); double s2 = Math.sqrt((x4-x5)*(x4-x5)+(y4-y5)*(y4-y5)); double s3 = Math.sqrt((x3-x5)*(x3-x5)+(y3-y5)*(y3-y5)); if(s1+s2<=s3||s1+s3<=s2||s2+s3<=s1) { System.out.println("data error"); } else if(x1==x2&&y1==y2) { System.out.println("points coincide"); } else{ System.out.println("points coincide"); } } //5 void fangfa5(String s) { String reg = "\\:|\\,|\\ "; String[] arr = s.split(reg); String X1 = arr[1]; double x1 = Double.valueOf(X1.toString()); String Y1 = arr[2]; double y1 = Double.valueOf(Y1.toString()); String X2 = arr[3]; double x2 = Double.valueOf(X2.toString()); String Y2 = arr[4]; double y2 = Double.valueOf(Y2.toString()); String X3 = arr[5]; double x3 = Double.valueOf(X3.toString()); String Y3 = arr[6]; double y3 = Double.valueOf(Y3.toString()); String X4 = arr[7]; double x4 = Double.valueOf(X4.toString()); String Y4 = arr[8]; double y4 = Double.valueOf(Y4.toString()); double s1 = Math.sqrt((x3-x2)*(x3-x2)+(y3-y2)*(y3-y2)); double s2 = Math.sqrt((x3-x4)*(x3-x4)+(y3-y4)*(y3-y4)); double s3 = Math.sqrt((x2-x4)*(x2-x4)+(y3-y4)*(y3-y4)); if(s1+s2<=s3||s1+s3<=s2||s2+s3<=s1) { System.out.println("data error"); } else{ System.out.println("in the triangle"); } } //主函数-------------------------------------------------------------------------------------------------------------------- public static void main(String[] args) { Scanner in = new Scanner(System.in); String s = in.nextLine(); Main js = new Main(); if(!js.panduan(s)) { System.out.println("wrong number of points"); } else { if(s.charAt(0)=='1') { js.fangfa1(s); } else if(s.charAt(0)=='2') { js.fangfa2(s); } else if(s.charAt(0)=='3') { js.fangfa3(s); } else if(s.charAt(0)=='4') { js.fangfa4(s); } else if(s.charAt(0)=='5') { js.fangfa5(s); } } } }
2.踩坑心得
此题坑太多,首先就是保留小数的控制,在输出时不能直接输出,要先判断是否需要保留,然后再输出。还有就是格式的老问题,无论如何,有几个格式错误的点始终过不了,不知道什么原因:
我会花时间再想办法解决一下。
3.改进建议
其实应该把坐标数值的截取放在一个方法里面,这样会更加简便,还有就是可以把三角形单独分为一类,判断是否可以组成三角形等等,不用再在每一个方法里再去写了,这样会做很多重复的无用功,总之,以后再编写程序时要多考虑这方面的问题,少走弯路。
三:总结
通过这阶段的Java学习以及对这三次题目集的编写,我学到了特别多的东西,包括一些用法如正则表达式等实用的东西,同时也增长了我编写java程序的熟练度,让我真真正正地进入了java学习的大门,同时,我也存在很多问题,我对Java语言的运用还是不够熟练,遇到一些问题还是需要通过百度搜索来解决,非常浪费时间,导致我完成PTA的速度很慢,甚至也导致我最后一题还没有完成完整就结束了,下次我要更加抓紧时间完成,不留到后面几天才慌忙地去做,并且我还要继续加紧时间学习java,掌握基本的一些方法运用,以后遇到问题不至于没有任何头绪而再去学习,为我的编程生涯打好坚实的基础。
同时,我也希望在PTA题目集的测试点的提示可以给明确一点,因为有的点真的不知道是什么,特别难过,要弄出来要花费大量的时间与精力,这样很不好。
四:结语
这是第一阶段的java学习成果总结而成的我的第一个博客,之后学习java的路还很长,我要不断努力去研究,做到最好的自己。
标签:判断,题目,String,double,pta,Blog,java,charAt 来源: https://www.cnblogs.com/yzflqqq/p/16123212.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。