前三次作业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.适当对变量和操作等做一些必要的注释,方便自己记忆,找寻错误,方便读者明白你的变量代表的是什么,进行的是何种操作。

总结:

  此三次练习,让我学会了基本的数据输入输出,简单的数据处理,还有字符串的各项操作,只能说是一些皮毛吧,真正需要学习的东西其实都还没学会,要走的路还长着呢,这也让我意识到了这门课是真真正正很难的一门课,不用心不花时间是学不好的,总之呢,不管怎么样,多花心思多钻研永远不会吃亏......

posted @ 2022-04-10 04:25  0^-^0  阅读(219)  评论(0)    收藏  举报