面向对象程序设计A第一次blog
一、前言
第一次题目集总结——
- 题量:较多
- 难度:较低
- 知识点:
- 简单的输入输出
- 一些简单的运算和类型转换
- 一些简单的循环、选择、字符串、数组的使用
- 总结:题目比较简单,题量较多,内容就是一些简单的输入输出和简单的数学运算。
第二次题目集总结——
- 题量:较少
- 难度:较高
- 知识点:
- 输入格式判断
- 输出格式控制
- 字符串的应用
- 循环
- 总结:题目数量少,难度较高,需对字符串进行遍历、查找。
第三次题目集总结——
- 题量:较少
- 难度:高
- 知识点:
- 判断多种输入格式并对应不同的输出
- 从字符串中获取数据
- 字符串的应用
- 数学运算
二、设计与分析
题目集2——
7-2 串口字符解析
1 import java.util.Scanner; 2 3 public class Main { 4 5 6 public static void main(String[] args) { 7 try (// TODO Auto-generated method stub 8 Scanner scanf = new Scanner(System.in)) { 9 String shuru= scanf.next(); 10 int i=0; 11 int time=0; 12 int no=1; 13 int k=1; 14 for( i=0;i<=shuru.length();i+=k) 15 { 16 k=1; 17 if(shuru.length()<11||(time==0&&i==shuru.length())) 18 {System.out.println("null data"); 19 break; 20 } 21 if(shuru.charAt(i)==0) 22 { 23 time=time+1; 24 int jiou=0; 25 26 27 28 29 for(int j=1;j<=8;j++) 30 { 31 if(shuru.charAt(i+j)==1) 32 { 33 jiou=jiou+1; 34 } 35 36 } 37 if(jiou%2!=0&&shuru.charAt(i+8+1)!=1&&shuru.charAt(i+8+2)==1) 38 { 39 System.out.println(no+":"+"parity check error"); 40 no=no+1; 41 k=11; 42 } 43 else if(jiou%2!=0&&shuru.charAt(i+8+1)!=1&&shuru.charAt(i+8+2)!=1) 44 { 45 System.out.println(no+":"+"validate error"); 46 no=no+1; 47 k=11; 48 } 49 else { 50 System.out.print(no+":"); 51 for(int j=1;j<=8;j++) 52 { 53 if(j==7) 54 { 55 System.out.println(shuru.charAt(i+j)); 56 k=11; 57 } 58 else 59 { 60 System.out.print(shuru.charAt(i+j)); 61 k=11; 62 } 63 64 } 65 } 66 67 68 69 70 71 } 72 73 74 } 75 } 76 } 77 78 }
完成度低,实现功能少,没有完成对字符串的多次检索,不知道怎么实现循环多次对字符串进行查找。
题目集3——
7-1 点线形系列1-计算两点之间的距离
1 import java.util.Scanner; 2 public class Main { 3 4 5 public static void main(String[] args) { 6 7 Scanner sc=new Scanner(System.in); 8 double x1,x2,y1,y2; 9 String str; 10 str=sc.nextLine(); 11 String[] StrArray = str.split(",| "); 12 13 try 14 { 15 x1=Double.valueOf(StrArray[0]); 16 y1=Double.valueOf(StrArray[1]); 17 x2=Double.valueOf(StrArray[2]); 18 y2=Double.valueOf(StrArray[3]); 19 for (int i = 4; i < StrArray.length; i++) { 20 double t=Double.valueOf(StrArray[i]); 21 } 22 if(StrArray.length>4) 23 { 24 System.out.println("wrong number of points"); 25 } 26 else 27 { 28 double d=(x1-x2)*(x1-x2)+(y1-y2)*(y1-y2); 29 d=Math.sqrt(d); 30 System.out.println(d); 31 } 32 }catch(Exception e) 33 { 34 System.out.println("Wrong Format"); 35 } 36 37 } 38 39 }
使用try catch 错误处理,首先执行try中的代码,如果抛出异常会由catch去捕获并执行,如果没有发生异常catch会被忽略掉。try语句中测试代码中的错误,而catch语句处理错误。valueof()函数用于返回指定对象的原始值。split将字符串按“,”或“ ”分割为子字符串,然后将结果作为字符串数组返回。
7-2 点线形系列2-线的计算
1 import java.util.Scanner; 2 3 public class Main { 4 5 public static void main(String[] args) { 6 // TODO code application logic here 7 Scanner sc = new Scanner(System.in); 8 int op; 9 double x1, x2, y1, y2, x3, y3, x4, y4; 10 String str; 11 str = sc.nextLine(); 12 String[] StrArray = str.split(":|,| "); 13 try { 14 op = Integer.valueOf(StrArray[0]); 15 x1 = Double.valueOf(StrArray[1]); 16 y1 = Double.valueOf(StrArray[2]); 17 x2 = Double.valueOf(StrArray[3]); 18 y2 = Double.valueOf(StrArray[4]); 19 for (int i = 5; i < StrArray.length; i++) { 20 double t = Double.valueOf(StrArray[i]); 21 } 22 if (op == 1) { 23 if (StrArray.length > 5) { 24 System.out.println("wrong number of points"); 25 } else if (x1 == x2 && y1 == y2) { 26 System.out.println("points coincide"); 27 } else if (x1 == x2) { 28 System.out.println("Slope does not exist"); 29 } else { 30 double k = (y2 - y1) / (x2 - x1); 31 System.out.println(k); 32 } 33 34 } else if (op == 2) { 35 x3 = Double.valueOf(StrArray[5]); 36 y3 = Double.valueOf(StrArray[6]); 37 if (StrArray.length >=7) { 38 System.out.println("wrong number of points"); 39 } else if (x1 == x2 && y1 == y2 || x1 == x3 && y1 == y3 || x2 == x3 && y2 == y3) { 40 System.out.println("points coincide"); 41 } else if (x1 == x2) { 42 double d = Math.abs(x3 - x1); 43 System.out.println(d); 44 } else { 45 46 double k = (y2 - y1) / (x2 - x1); 47 double d = Math.abs(y3 - k * x3 + k * x1 - k * y1); 48 d = d / Math.sqrt(1 + k * k); 49 /* 50 double s1=Math.sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2)); 51 double s2=Math.sqrt((x1-x3)*(x1-x3)+(y1-y3)*(y1-y3)); 52 double s3=Math.sqrt((x3-x2)*(x3-x2)+(y3-y2)*(y3-y2)); 53 double s=(s1+s2+s3)/2; 54 double d=Math.sqrt(s*(s-s1)*(s-s2)*(s-s3)); 55 d=2*d/s1;*/ 56 System.out.println(d); 57 } 58 59 } else if (op == 3) { 60 x3 = Double.valueOf(StrArray[5]); 61 y3 = Double.valueOf(StrArray[6]); 62 if (StrArray.length > 7) { 63 System.out.println("wrong number of points"); 64 } else if (x1 == x2 && y1 == y2 || x1 == x3 && y1 == y3 || x2 == x3 && y2 == y3) { 65 System.out.println("points coincide"); 66 } else { 67 68 double k1 = (y3 - y2) * (x2 - x1); 69 double k2 = (y2 - y1) * (x3 - x2); 70 if (k1 == k2) { 71 System.out.println("true"); 72 } else { 73 System.out.println("false"); 74 } 75 } 76 } else if (op == 4) { 77 x3 = Double.valueOf(StrArray[5]); 78 y3 = Double.valueOf(StrArray[6]); 79 x4 = Double.valueOf(StrArray[7]); 80 y4 = Double.valueOf(StrArray[8]); 81 if (StrArray.length > 9) { 82 System.out.println("wrong number of points"); 83 } else if (x1 == x2 && y1 == y2 || x1 == x3 && y1 == y3 || x2 == x3 && y2 == y3) { 84 System.out.println("points coincide"); 85 } else { 86 double k1 = (y2 - y1) / (x2 - x1); 87 double k2 = (y3 - y4) / (x3 - x4); 88 if (k1 == k2) { 89 System.out.println("true"); 90 } else { 91 System.out.println("false"); 92 } 93 } 94 } else if (op == 5) { 95 x3 = Double.valueOf(StrArray[5]); 96 y3 = Double.valueOf(StrArray[6]); 97 x4 = Double.valueOf(StrArray[7]); 98 y4 = Double.valueOf(StrArray[8]); 99 if (StrArray.length > 9) { 100 System.out.println("wrong number of points"); 101 } else if (x1 == x2 && y1 == y2 || x1 == x3 && y1 == y3 || x2 == x3 && y2 == y3) { 102 System.out.println("points coincide"); 103 } else { 104 double k1 = (y2 - y1) / (x2 - x1); 105 double k2 = (y3 - y4) / (x3 - x4); 106 if (k1 == k2) { 107 System.out.println("is parallel lines,have no intersection point"); 108 } else { 109 double b=y1-k1*x1; 110 double d=y3-k2*x3; 111 double x0=(d-b)/(k1-k2); 112 double y0=k1*(d-b)/(k1-k2)+b; 113 System.out.println(x0+","+y0); 114 d=(x0-x1)*(x0-x1)+(y0-y1)*(y0-y1); 115 b=(x1-x2)*(x1-x2)+(y1-y2)*(y1-y2); 116 if(d<b) 117 System.out.println("true"); 118 else 119 System.out.println("false"); 120 } 121 } 122 123 } 124 125 } catch (Exception e) { 126 System.out.println("Wrong Format"); 127 } 128 129 } 130 131 }
同7-1一样使用try catch 错误处理,首先执行try中的代码,如果抛出异常会由catch去捕获并执行,如果没有发生异常catch会被忽略掉。try语句中测试代码中的错误,而catch语句处理错误。split将字符串按“,”或“ ”分割为子字符串,然后将结果作为字符串数组返回。valueof()函数用于返回指定对象的原始值。数学运算不合理,有几处运算错误,对输入格式的判断不充分,很多错误输入格式的测试点没过。没有类的建立,直接一个Main函数写完所有功能,导致代码繁琐以及不易阅读。
7-3 点线形系列3-三角形的计算
1 import java.util.Scanner; 2 public class Main { 3 4 5 public static void main(String[] args) { 6 7 Scanner sc=new Scanner(System.in); 8 String str; 9 str=sc.nextLine(); 10 11 System.out.println("Wrong Format"); 12 13 } 14 15 }
该题目未完成。
三、踩坑心得
1 Scanner input = new Scanner(System.in); 2 float kg = input.nextFloat(); 3 float m = input.nextFloat(); 4 double newkg,newm; 5 newkg = kg/(0.45359237); 6 newm = m/(0.0254); 7 System.out.println((float)newkg+" "+(float)newm);
- 数据浮点数类型不同时,需看输出需求进行强制转换。
- 要注意题目要求,充分理解题目再做,对于题目中的一些不理解的名词要查询,比如第二次作业中的7-2中的奇偶校验。
- 要创建类来完成代码所需要的功能,只用一个main来完成所有功能的话会造成代码非常冗杂,并且可读性较低
1 import java.util.Scanner; 2 public class Main { 3 4 5 public static void main(String[] args) { 6 7 Scanner sc=new Scanner(System.in); 8 double x1,x2,y1,y2; 9 String str; 10 str=sc.nextLine(); 11 String[] StrArray = str.split(",| "); 12 13 try 14 { 15 x1=Double.valueOf(StrArray[0]); 16 y1=Double.valueOf(StrArray[1]); 17 x2=Double.valueOf(StrArray[2]); 18 y2=Double.valueOf(StrArray[3]); 19 for (int i = 4; i < StrArray.length; i++) { 20 double t=Double.valueOf(StrArray[i]); 21 } 22 if(StrArray.length>4) 23 { 24 System.out.println("wrong number of points"); 25 } 26 else 27 { 28 double d=(x1-x2)*(x1-x2)+(y1-y2)*(y1-y2); 29 d=Math.sqrt(d); 30 System.out.println(d); 31 } 32 }catch(Exception e) 33 { 34 System.out.println("Wrong Format"); 35 } 36 37 } 38 39 }
4.要多注意细节,很多条件的判断经常出错。
四、总结
- 通过这三次题目集,对Java的实际应用在书本知识之外有了一些初步的认识,同时,通过实际练习,对于Java的一些简单的输入输出、简单的逻辑应用、一些数学运算以及一些特殊的函数和方法的应用更加熟练。
- 在做题目的过程中,通过查找资料,发现了许多新的方法,比如try catch。
- 同时,在做题过程中也更加清楚的了解到自己的不足之处,在哪一方面不太清楚,比如正则表达式就不会用,查找资料一时也不会用,需要多加学习。
- 希望老师在每次题目集时间截止之后能把题目集中比较难的题目集的答案或者思路发出来让我们自己进行对照。