面向对象程序设计A第一次blog
2024-10-21 10:04:16
一、前言
第一次题目集总结——
- 题量:较多
- 难度:较低
- 知识点:
- 简单的输入输出
- 一些简单的运算和类型转换
- 一些简单的循环、选择、字符串、数组的使用
- 总结:题目比较简单,题量较多,内容就是一些简单的输入输出和简单的数学运算。
第二次题目集总结——
- 题量:较少
- 难度:较高
- 知识点:
- 输入格式判断
- 输出格式控制
- 字符串的应用
- 循环
- 总结:题目数量少,难度较高,需对字符串进行遍历、查找。
第三次题目集总结——
- 题量:较少
- 难度:高
- 知识点:
- 判断多种输入格式并对应不同的输出
- 从字符串中获取数据
- 字符串的应用
- 数学运算
二、设计与分析
题目集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。
- 同时,在做题过程中也更加清楚的了解到自己的不足之处,在哪一方面不太清楚,比如正则表达式就不会用,查找资料一时也不会用,需要多加学习。
- 希望老师在每次题目集时间截止之后能把题目集中比较难的题目集的答案或者思路发出来让我们自己进行对照。
最新文章
- 【转载】使用Lucene.NET实现数据检索功能
- sqlmap写文件为空之谜
- Compound Words
- java前端选择
- 基于Hbase数据的Mapreduce程序环境开发
- 【C#】面试题整理
- 【转载】java InputStream读取数据问题
- Github Atom开源文本代码编辑器- 由 Github 打造的下一代编程开发利器
- Elasticsearch笔记三之版本控制和插件
- Luogu5283 十二省联考2019异或粽子(trie/可持久化trie+堆)
- python3-基础2
- Python基础-数据类型-转摘
- Django-ORM 复习
- CentOS 7 nginx+tomcat9 session处理方案之session复制
- 【计算机视觉】seetaFace
- jquery的radio和checkbox的标签的操作集合
- ceph mon更换ip地址
- 解决ios safari中按钮圆角问题【原创】
- 腾讯云服务器部署 django项目整个流程
- tr td 移动变色
热门文章
- 记一次在CentOS上安装GitLab的流程
- 分享一个自己在用的.net 中mysql事务控制类(支持多条sql,参数化,自定义判断条件,错误点返回等)
- idea 函数名灰色
- 软件安装——tortoiseGit安装和配置
- 前端向后端发送请求(FormData),你们不要吐槽我,有的时候我也不想写注释
- 【随笔记】XR872 Codec 驱动移植和应用程序实例(附芯片调试方法)
- 数据湖Hudi与对象存储Minio及Hive\Spark\Flink的集成
- Spring AOP与AspectJ的对比及应用
- SQL笔试真题练习
- Excel文件 利用MySQL/Python 实现自动处理数据的功能