前三次作业blog
前言:
用Scanner类从控制台获得输入,使用println方法在控制台上显示基本数据类型数值或字符串;Java中为数值、字符和布尔值数据提供了8种基本数据类型,此次题目集中用到了多数据类型,加深了我们对各种数据类型的了解和应用;也涉及了许多标准的算术操作符:如加(+),减(-),乘(*),除(/)和取模(%);强制类型转换是在括号中指定目标类型,紧跟其后的是要转换的变量名或值;if语句允许程序确定可选的执行路径;Java在Math类中提供了许多实用的方法,用于计算常用的数学函数,如Math.abs(int、long、float或double类型)返回一个数的绝对值;String是一个字符串序列,char类型只表示一个字符,可以调用length()方法得到其长度,方法的调用就是执行方法中的代码,空方法不返回值;方法s.charAt(index)用于提取字符串s中的某个特定字符,index为下标;变量的作用域是指变量在程序中被引用的范围;
题目集01
这一题目集总体来说比较简单,主要考查的是简单数据的输入与输出
1.第一小题除了输入与输出还有数据的比较
2.第二小题用到了强制转换数据类型以便进行单位换算
3.第三小题简单的应用了一下奇偶判断
4.第四小题对数据进行了简单的运算
5.第五小题是对数据的双重判断
6.第六小题考察的是字符串的比较
7.第七小题用新定义的特殊方法求值
8.第八小题是数据的提取和非法输入的判断
9.第九小题是判断三角形的类型,此处逻辑性比较强,是为此题目集的难点
题目集01——7-7判断三角形类型
输入三角形三条边,判断该三角形为什么类型的三角形。(考察数据的处理和选择结构的应用)
整体思路:
1.输入三条边,判断是否符合条件。
2.数据为double类型,范围在[0,200]之间。
3.三角形类型包括:等边三角形、等腰三角形、等腰直角三角、直角三角形和一般三角形。
4.利用if语句进行层层筛选,选出最特殊的三角形。
度量分析:

核心代码分析:
if(a>=1&&a<=200&&b>=1&&b<=200&&c>=1&&c<=200)
else
System.out.println("Wrong Format");
判断是否符合题目所给的数值范围;
if(a+b>c&&a+c>b&&b+c>a)
else
System.out.println("Not a triangle");
判断是否是三角形;
if(a==b&&b==c)
System.out.println("Equilateral triangle");
判断是否为等边三角形;
if((a==b)||(b==c)||(a==c))
判断是否为等腰三角形,在此基础下又衍生出2种情况:
if((Math.abs(a*a+b*b-c*c)<0.1)||(Math.abs(a*a+c*c-b*b)<0.1)||(Math.abs(b*b+c*c-a*a)<0.1))
System.out.println("Isosceles right-angled triangle");
判断是否为直角三角形,以及是否是等腰三角;
优点:
1.思路清晰,层次清楚
2.直角三角形的判断考虑的比较周到,Math.abs(a*a+c*c-b*b)<0.1想到了有些三角形的边长为无理数
缺点:
1.整个程序看起来复杂纷乱
2.语句单一,几乎全篇都是if-else语句;
题目集02
这一题目集主要考查的是对字符串的输入输出及其他的一些操作
1.第一小题为字母-数字转换偏重于对单个字符的读取和比较
2.第二小题7-2 串口字符解析考察的东西比较广泛,题目也比较难以读懂
3.第三小题7-3 String的格式判断与内容提取着重于对字符串的处理
题目集02——7-2 串口字符解析
RS232是串口常用的通信协议,在异步通信模式下,串口可以一次发送5~8位数据,收发双方之间没有数据发送时线路维持高电平,相当于接收方持续收到数据“1”(称为空闲位),发送方有数据发送时,会在有效数据(5~8位,具体位数由通信双方提前设置)前加上1位起始位“0”,在有效数据之后加上1位可选的奇偶校验位和1位结束位“1”。请编写程序,模拟串口接收处理程序,注:假定有效数据是8位,奇偶校验位采用奇校验。(这个题目我当时真的读了好多遍,一直都不理解到底是什么意思)
整体思路:
1.获取输入,判断有效性
2.找到起始位,进行其他的校验位和结束位的比对
3.得到输出结果,输出在控制台上
核心代码分析:
for(int i=0;i<str.length();i++){
if(str.charAt(i)!='1')
format=1;
}//判断是否为全1
if(str.length()<11||format==0)
System.out.print("null data");
判断数据的有效性,以便执行后面的操作;
if(str.charAt(t+10)!='1') {
System.out.printf("%d:",a);
System.out.println("validate error");
}
else if(str.charAt(t+10)!='1') {
System.out.printf("%d:",a);
System.out.println("validate error");}
此两处皆为奇偶校验不合格;
优点:
1.利用循环使程序看起来更加简洁明了
2.合理利用选择结构使程序往正确的方向运行
3.正确调用合适的方法减小程序工程大小
缺点:
1.变量多而杂,命名不够清晰,分辨不清变量的作用
2.缺少适当的注释使程序更不易懂
题目集03
该题目集涉及的知识点就比较难啦,相当棘手啊......
1.第一题7-1 点线形系列1-计算两点之间的距离还是不太难的,但是测试点过不太去
2.第二题7-2 点线形系列2-线的计算 (这个题吧,我真不知道该怎么判断这些条件呀......)
3.第三题7-3 点线形系列3-三角形的计算(看完这个都不信自己学过Java)
题目集03——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.获取输入,判断是否合法
2.判断合法数据个数,决定输出结果
3.计算并输出结果
核心代码分析:
char[] c=s.toCharArray();//将字符串转化为字符数组
for(int i=0;i<c.length;i++)
{
if(c[i]==',')
flag++;
}
判断数据个数;
if(a.length>2)
format=2;
if(format==2)
{
System.out.print("wrong number of points");
}
if(flag>2)
format=1;
if(format==1)
System.out.print("Wrong Format");
判断两种非法输入并获得输出;
String m[]=a[0].split(",");
double x1=Double.parseDouble(m[0]);//将String类型转化为double类型
double y1=Double.parseDouble(m[1]);
String n[]=a[1].split(",");
double x2=Double.parseDouble(n[0]);
double y2=Double.parseDouble(n[1]);
d=Math.sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2));
System.out.print(d);
进行数据类型的转换,以“,”为分隔分割字符串获得坐标值,调用sqrt方法计算距离。
题目集03——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",
题目集03——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坐标之间以英文","分隔,点与点之间以一个英文空格分隔。
(以上两题我没有成功写出,所以不做分析......)
采坑心得:
1.根据对象创建类,类里面再创建方法,这一块还是需要进一步的学习;
2.做题是快速提升实力的一种方法,做出题目的成就感也会让我们更加热爱学习,学习与实践应该是相辅相成的;
3.学无止境,老师不会时时刻刻都在,时间有限,不会所有的知识点都拿出来讲,所以自学是一种提升自己途径,也是一种能力,我们不能只依靠老师,我们应当学会自己去利用我们能接触到的资源去学习,去提升自己。
改进建议:
1.代码的格式(例如缩进等)需要有一套完整的良好的习惯,这样不仅美观,修改起来也很方便;
2.尽量多使用现有的方法进行一些简单常见的操作,节约时间和空间;
3.适当对变量和操作等做一些必要的注释,方便自己记忆,找寻错误,方便读者明白你的变量代表的是什么,进行的是何种操作。
总结:
此三次练习,让我学会了基本的数据输入输出,简单的数据处理,还有字符串的各项操作,只能说是一些皮毛吧,真正需要学习的东西其实都还没学会,要走的路还长着呢,这也让我意识到了这门课是真真正正很难的一门课,不用心不花时间是学不好的,总之呢,不管怎么样,多花心思多钻研永远不会吃亏......
浙公网安备 33010602011771号