OO课程第一阶段(前三次作业)总结Blog1

前言:学习OOP课程的第一阶段已经结束了,在此进行对于知识点,题量,难度的个人看法。

(1)相比于另外两次作业,第一次作业基本上是基本的编程的语法训练,题量大,难度小,利于我们熟悉Java的基本语法,旨在让同学们感受Java和c语言的联系和不同之处。这次作业虽然难度不大却是初学者很有必要掌握的,因此,第一次作业为我们带来的对Java语言的理解和认知作用不容小觑。

(2)第二次作业有明显难度上的提高,提高在需要自己去学习新的知识点: 字母-数字转换,串口字符解析,以及String的格式判断与内容提取。但相比于第三次作业,仍是没有很透彻的体现出Java语言的特点和优势,是c语言和Java的过度,第二次作业之后的题目,明显有浓烈的Java语言特点。

(3)第三次作业难度极具增加,开始展现出与C语言不同的编程方式,对于类的构造,运用,是这次作业需要掌握的内容,第三次作业中每道题目都有自己独特的难点,对于初学者来说有相当大的难度,其难度主要体现在知识点的综合运用,不仅仅需要类的知识,还需要大数,字符匹配,替代等方法去辅助题目的完成,其中许多的细节性的问题难以把控。最终是未达到满分遗憾结束,但是我积累了相当宝贵经验,学习到了宝贵的知识,正所谓“不积跬步,无以至千里”。

各题目:设计与分析、采坑心得、改进建议 。

(1)7-2 串口字符解析

设计与分析

import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
String a = in.next();
if(a.length()<11) {
System.out.print("null data");
return;
}
if(a.matches("^[1]*$")) {
System.out.print("null data");
return;
}
int start = 0,i=0,num = 1,sum = 0;
boolean parity = false,validate = false;
for(start = 0;start<a.length()-10;start++) {
if(a.charAt(start)=='0') {
System.out.print(num+":");
num++;
if(a.charAt(start+10)=='0') {
validate = false;
}else {
validate = true;
sum = 0;
for(i=start+1;i<start+9;i++) {
if(a.charAt(i)=='1') {
sum++;
}
}
if(sum%2==0) {
if(a.charAt(start+9)=='1') {
parity = true;
}else {
parity = false;
}
}else {
if(a.charAt(start+9)=='0') {
parity = true;
}else {
parity = false;
}
}
}
if(validate == true) {
if(parity == true) {
for(i=start+1;i<start+9;i++) {
System.out.print(a.charAt(i));
}
System.out.print("\n");
}else {
System.out.println("parity check error");
}
}else {
System.out.println("validate error");
}
start = start + 10;
}
}
} }

该题较简单,不需要构建多个类去完成,仅仅是通过简单的主函数便可以完成全部的功能,虽然形式简单,但是还是出现了对bug的不断调试。以下阐述我的采坑心得:

踩坑心得

开始的时候对奇偶校验位理解不够,后研究资料理解:

1.偶校验码

8位数据位和1位校验位,共9个数据,其中1的个数必须为偶数
一般校验位可以由八位数据位按照二进制方式直接相加(不考虑进位)得到。
11001010的校验位a=(1+1+0+0+1+0+1+0)=0;
所以发送数据时为110010100.
2.奇校验码

8位数据位和1位校验位,共9个数据,其中1的个数必须为奇数
一般校验位可以由八位数据位直接相加取反(同样不考虑进位)。
11001010的校验位a=~(1+1+0+0+1+0+1+0)=1;
所以发送数据时为110010101.
改进建议

1个起始位‘0’+八个有效数据+一个奇校验位+一个结束位 = 11位

找到0后开始对他后面10位做处理

先判断最后一位是不是结束1,再判断是否奇校验正确,通过两次判断结果来输出。

这个题只要是结尾错了,那就是“validate error”,所以可以先判断结尾,结尾正确再去判断是否奇校验正确。

(2)7-1 点线形系列1-计算两点之间的距离

设计与分析

import java.util.Scanner;
public class Main{
public static void main(String args[])
{
int flag=1;
Scanner in = new Scanner(System.in);
String str = in.nextLine();
String s[] = str.split(" ");
for(int i=0;i<s.length;i++)
{
String[] a = s[i].split(",");
if(a.length>2)
flag=0;
for(int j=0;j<a.length;j++)
{
int count=0;
if(a[j].charAt(0)=='0'&&a[j].length()>1)
if(a[j].charAt(1)!='.')
flag=0;
if(a[j].charAt(0)=='+'||a[j].charAt(0)=='-')
{
if(a[j].charAt(1)=='0')
{
if(a[j].charAt(2)!='.')
flag=0;
}
if(a[j].charAt(1)<'0'||a[j].charAt(1)>'9')
flag=0;
}
for(int k=0;k<a[j].length();k++)
{
if(a[j].charAt(k)=='.')
{
count++;
if(k==a[j].length()-1)
flag=0;
}
}
if(count>1)
flag=0;
}
}
if(flag==0)
{
System.out.println("Wrong Format");
}
else if(flag==1&&s.length>2||s.length<2)
{
System.out.println("wrong number of points");
}
else
{
double x1,y1,x2,y2;
String[] p= str.split("[ ,]");
x1 = Double.parseDouble(p[0]);
y1 = Double.parseDouble(p[1]);
x2 = Double.parseDouble(p[2]);
y2 = Double.parseDouble(p[3]);
double distance = Math.sqrt((x2-x1)*(x2-x1)+(y2-y1)*(y2-y1));
System.out.println(distance);
}
}
}

该题有一点难度,经过一系列调试,总结出踩坑心得:

踩坑心得

使用java自带的Point类

import java.awt.Point;//引用awt包下的Point类,此类的功能是表示 (x,y) 坐标空间中的位置的点

改进建议

改进后的计算两点和的代码

double distance = Math.sqrt((x2-x1)*(x2-x1)+(y2-y1)*(y2-y1));

(3)7-2 点线形系列2-线的计算

import java.util.Scanner;

class Point {
private int x, y;// x,y为点的坐标
//求两点之间的距离
public double distance(Point p1) {
return Math.sqrt((p1.x -this.x)*(p1.x -this.x)+(p1.y-this.y)*(p1.y-this.y));
}
public Point(int x, int y) {
super();
this.x = x;
this.y = y;
}
public int getX() {
return x;
}
public void setX(int x) {
this.x = x;
}
public int getY() {
return y;
}
public void setY(int y) {
this.y = y;
}
public Point() {
super();
x = y =0;
}
@Override
public String toString() {
return "Point [x=" + x + ", y=" + y + "]";
}
}
class Line{
Point p1,p2;
public Line(Point x,Point y){
p1=x;
p2=y;
}

public Point getP1() {
return p1;
}

public void setP1(Point p1) {
this.p1 = p1;
}

public Point getP2() {
return p2;
}

public void setP2(Point p2) {
this.p2 = p2;
}
public double getLength() {
return p1.distance(p2);
}
public String toString() {
return "Line [p1=" + p1 + ", p2=" + p2 + "]";
}
}
public class Main {

public static void main(String[] args) {

Scanner sc = new Scanner(System.in);
int n=sc.nextInt();
while(n!=0) {
int a=sc.nextInt();
int b=sc.nextInt();
int c=sc.nextInt();
int d=sc.nextInt();
n--;
Point x=new Point(a,b);
Point y=new Point(c,d);
Line l =new Line(x,y);
System.out.println(l.toString());
System.out.println("此线段的长度为:"+String.format("%.1f", l.getLength()));
//l.getLength();
}



}

}

踩坑心得

错误写法:只有一个类Main,所有问题交给main方法执行,无法做到资源的重复利用,从而减少解决相关问题时间和资源。

改进建议

1)定义两个Point对象p1,p2;
2)写出有参构造方法,传递两个对象值给p1,p2
3)为p1,p2写出setters,和getters方法
4)为Line写出一个getLength方法求直线中两点的长度
5) 为LIne写一个ToString方法,方法如下所示:
public String toString() { return “Line [p1=” + p1 + “, p2=” + p2 + “]”; }

(4)7-3 点线形系列3-三角形的计算

import java.text.NumberFormat;
import java.util.Scanner; public class Main {
  public static void main(String[] args) {
    Scanner in = new Scanner(System.in);
    String a = in.nextLine();
    if(chack_in(a)) {
      System.out.print("");
    }else if(chack_point_sum(a)) {
      System.out.print("");
    }else {
      String[] aa = a.split(":");
      String[] point = aa[1].split(" ");
      switch(aa[0]) {
        case "1":
          operation_1(point);
          break;
        case "2":
          operation_2(point);
          break;
        case "3":
          operation_3(point);
          break;
        case "4":
          operation_4(point);
          break;
        case "5":
          operation_5(point);
          break;
       }
    }
    in.close();
  }
  //操作1//
  public static void operation_1(String[] point) {
    Triangle triangle = new Triangle();
    String[] point1 = point[0].split(",");
    String[] point2 = point[1].split(",");
    String[] point3 = point[2].split(",");
    triangle.p1.input(Double.parseDouble(point1[0]), Double.parseDouble(point1[1]));
    triangle.p2.input(Double.parseDouble(point2[0]), Double.parseDouble(point2[1]));
    triangle.p3.input(Double.parseDouble(point3[0]), Double.parseDouble(point3[1]));
    if(triangle.chack_triangle()){
      System.out.print("data error");
    }else {
      if(triangle.shape_line_triangle()==1) {
        System.out.print("true true");
      }else {
        System.out.print("true false");
      }
    }
  }   //操作2//
  public static void operation_2(String[] point) {
    Triangle triangle = new Triangle();
    String[] point1 = point[0].split(",");
    String[] point2 = point[1].split(",");
    String[] point3 = point[2].split(",");
    triangle.p1.input(Double.parseDouble(point1[0]), Double.parseDouble(point1[1]));
    triangle.p2.input(Double.parseDouble(point2[0]), Double.parseDouble(point2[1]));
    triangle.p3.input(Double.parseDouble(point3[0]), Double.parseDouble(point3[1]));
    if(triangle.chack_triangle()){
      System.out.print("data error");
    }else {
      NumberFormat nf = NumberFormat.getNumberInstance();
      nf.setMaximumFractionDigits(6);
      System.out.print(nf.format(triangle.caluate_C())+" "+nf.format(triangle.caluate_S())+" "+
      nf.format(triangle.caluate_gravity_point().read_x())+" "+nf.format(triangle.caluate_gravity_point().read_y()));
    }
  }   //操作3//
  public static void operation_3(String[] point) {
    Triangle triangle = new Triangle();
    String[] point1 = point[0].split(",");
    String[] point2 = point[1].split(",");
    String[] point3 = point[2].split(",");
    triangle.p1.input(Double.parseDouble(point1[0]), Double.parseDouble(point1[1]));
    triangle.p2.input(Double.parseDouble(point2[0]), Double.parseDouble(point2[1]));
    triangle.p3.input(Double.parseDouble(point3[0]), Double.parseDouble(point3[1]));
    if(triangle.chack_triangle()){
      System.out.print("data error");
    }else {
      if(triangle.shape_horn_triangle()==1) {
        System.out.print("false false true");
      }else if(triangle.shape_horn_triangle()==0) {
        System.out.print("false true false");
      }else {
        System.out.print("true false false");
      }
    }
  }   //操作4//
  public static void operation_4(String[] point) {  
    Triangle triangle = new Triangle();
    Triangle triangle1 = new Triangle();
    Line line = new Line();
    String[] point1 = point[0].split(",");
    String[] point2 = point[1].split(",");
    String[] point3 = point[2].split(",");
    String[] point4 = point[3].split(",");
    String[] point5 = point[4].split(",");
    line.p1.input(Double.parseDouble(point1[0]), Double.parseDouble(point1[1]));
    line.p2.input(Double.parseDouble(point2[0]), Double.parseDouble(point2[1]));
    triangle.p1.input(Double.parseDouble(point3[0]), Double.parseDouble(point3[1]));
    triangle.p2.input(Double.parseDouble(point4[0]), Double.parseDouble(point4[1]));
    triangle.p3.input(Double.parseDouble(point5[0]), Double.parseDouble(point5[1]));
    Line l1 = new Line();
    l1.p1=triangle.p1;l1.p2=triangle.p2;
    Line l2 = new Line();
    l2.p1=triangle.p1;l2.p2=triangle.p3;
    Line l3 = new Line();
    l3.p1=triangle.p2;l3.p2=triangle.p3;
    if(line.p1.chack_point(line.p2)){
      System.out.print("points coincide");
    }else if(triangle.chack_triangle()){
      System.out.print("data error");
    }else {
      if(line.if_parallel(l3)==0||line.if_parallel(l2)==0||line.if_parallel(l1)==0) {
        System.out.print("The point is on the edge of the triangle");
      }else {
        System.out.print(triangle.caluate_sum_intersection(line));
      }
    }
  }   //操作5//
  public static void operation_5(String[] point) {
    Triangle triangle = new Triangle();
    Point p = new Point();
    String[] point1 = point[0].split(",");
    String[] point2 = point[1].split(",");
    String[] point3 = point[2].split(",");
    String[] point4 = point[3].split(",");
    p.input(Double.parseDouble(point1[0]), Double.parseDouble(point1[1]));
    triangle.p1.input(Double.parseDouble(point2[0]), Double.parseDouble(point2[1]));
    triangle.p2.input(Double.parseDouble(point3[0]), Double.parseDouble(point3[1]));
    triangle.p3.input(Double.parseDouble(point4[0]), Double.parseDouble(point2[1]));
    Line l1 = new Line();
    l1.p1=triangle.p1;l1.p2=triangle.p2;
    Line l2 = new Line();
    l2.p1=triangle.p1;l2.p2=triangle.p3;
    Line l3 = new Line();
    l3.p1=triangle.p2;l3.p2=triangle.p3;
    if(triangle.chack_triangle()){
      System.out.print("data error");
    }else {
      if(l1.if_on_line(p)||l2.if_on_line(p)||l3.if_on_line(p)) {
        System.out.print("on the triangle");
      }else {
        if(triangle.if_inside(p)) {
          System.out.print("in the triangle");
        }else {
          System.out.print("outof the triangle");
        }
      }
    }
  }   //检查总字符串的格式//
  public static boolean chack_in(String a) {
    boolean ttr = false;
    String[] aa = a.split(":");
    String[] point = aa[1].split(" ");
    if(aa[0].length()!=1) {
      ttr = true;
    }else if(aa[0].charAt(0)!='1'&&aa[0].charAt(0)!='2'&&aa[0].charAt(0)!='3'         &&aa[0].charAt(0)!='4'&&aa[0].charAt(0)!='5') {
      ttr = true;
    }
    if(aa.length!=2) {
      ttr = true;
    }
    for(int i=0;i<point.length;i++) {
      if(point[i].length()==0) {
        ttr = true ;
      }
    }
    for(int i=0;i<point.length;i++ ) {
      for(int j=0;j<point[i].length();j++) {
        if(point[i].contains(",")) {
          String[] number = point[i].split(",");
          if(number.length==2) {
            if(number[0].length()>=2) {
              if(number[0].charAt(0)=='0'&&number[0].charAt(1)=='0') {
                ttr = true;
              }
          }
          if(number[1].length()>=2) {
            if(number[1].charAt(0)=='0'&&number[1].charAt(1)=='0') {
              ttr = true;
            }
          }
          if(!number[0].matches("^([+-]?\\d+)(.\\d+)?")) {
            ttr = true ;
          }
          if(!number[1].matches("^([+-]?\\d+)(.\\d+)?")) {
            ttr = true ;
          }
        }else {
          ttr = true ;
        }         }else {
          ttr = true ;
        }
      }
    }
    return ttr;
  }   //检查总字符串所含的点的个数//
  public static boolean chack_point_sum(String a) {
    boolean arry = false;
    int cnt = 0;
    String[] aa = a.split(":");
    String[] point = aa[1].split(" ");
    cnt = point.length;
    if(a.charAt(0)=='1'&&cnt!=3) {
      arry = true;
    }else if(a.charAt(0)=='2'&&cnt!=3) {
      arry = true ;
    }else if(a.charAt(0)=='3'&&cnt!=3) {
      arry = true ;
    }else if(a.charAt(0)=='4'&&cnt!=5) {
      arry = true ;
    }else if(a.charAt(0)=='5'&&cnt!=4) {
      arry = true ;
    }
    return arry;
  } } //点类// class Point {
  private double x,y;   //读入x y 的值//
  public void input(double a,double b) {
    x = a;
    y = b;
  } //读取x的值//
  public double read_x() {
    return x;
  } //读取y的值//
  public double read_y() {
    return y;
  } //计算两点的距离//
  public double caluate_distance(Point p) {
    return Math.sqrt((x-p.x )*(x-p.x )+(y-p.y )*(y-p.y));
  } //检查线的两点是否重合//
  public boolean chack_point(Point p) {
    boolean wssa = false ;
    if(Math.abs(x-p.read_x())<1e-15&&Math.abs(y-p.read_y())<1e-15) {
      wssa = true ;
    }
    return wssa;
  } } //线段//
class Line{
  Point p1 = new Point();
  Point p2 = new Point(); //检查线段的斜率是否存在//
  public boolean chack_slope() {
    boolean wssa = true ;
    if(Math.abs(p1.read_x()-p2.read_x())<1e-15) {
      wssa = false ;
    }
    return wssa;
  } //计算线段的斜率//
  public double caluate_slope() {
    return (p1.read_x()-p2.read_y())/(p1.read_x()-p2.read_y());
  } //计算点到直线的距离//
  public double caluate_distance(Point a) {
    double distance ;
    if(if_on_line(a)){
      distance = 0;
    }else {
      distance = Math.abs(a.read_x()*p1.read_y()+p1.read_x()*p2.read_y()+p2.read_x()*a.read_y()
      -a.read_x()*p2.read_y()-p1.read_x()*a.read_y()-p2.read_x()*p1.read_y())/p1.caluate_distance(p2);
    }
    return distance ;
  } //判断点是否再直线上//
  public boolean if_on_line(Point p) {
    boolean jes = false ;
    Line l1 = new Line();
    Line l2 = new Line();
    l1.p1=p1;l1.p2=p;
    l2.p1=p2;l2.p2=p;
    if(l1.caluate_slope()==l2.caluate_slope()) {
      jes = true;
    }
    return jes;
  } //判断点是否在线段内//
//在线段内返回true,在线段外返回false//
  public boolean if_in_line(Point p) {
    boolean jes = true ;
    if(p.caluate_distance(p1)>p1.caluate_distance(p2)||p.caluate_distance(p2)>p1.caluate_distance(p2)) {
      jes = false ;
    }
    return jes;
  } //判断两直线是否平行//
//若两直线平行返回1,若两直线重合返回0,若两直线相交返回-1
  public int if_parallel(Line l) {
    int cnt ;
    double x1 = (p1.read_x()-p2.read_x())*(l.p1.read_x()-l.p2.read_x())
    +(p1.read_y()-p2.read_y())*(l.p1.read_y()-l.p2.read_y());
    if(x1/(p1.caluate_distance(p2)*l.p1.caluate_distance(p2))!=1) {
      cnt=-1;
    }else {
      if(l.caluate_distance(p1)==0) {
        cnt=0;
      }else {
        cnt=1;
      }
    }
    return cnt;
  } //计算两直线交点,返回Point//
public Point caluate_intersection(Line a) {
  Point p = new Point();
  double dx1 = p1.read_x()-p2.read_x();
  double dx2 = a.p1.read_x()-a.p2.read_x();
  double dy1 = p1.read_x()-p2.read_x();
  double dy2 = a.p1.read_x()-a.p2.read_x();
  double mid1 = dy1/dx1;
  double mid2 = dy2/dx2;
  double rx = (a.p2.read_y()-p2.read_y()-a.p2.read_y()*mid2+p2.read_y()*mid1)/(mid1-mid2);
  double ry = (rx-p2.read_x())*mid1+p2.read_y();
  p.input(rx, ry);
  return p;
} } //三角形//
class Triangle{
  Point p1 = new Point();
  Point p2 = new Point();
  Point p3 = new Point(); //检查三点是否构成三角形//
//若构成三角形返回false,若不构成三角形返回true//
public boolean chack_triangle() {
  boolean err = true ;
  if(Math.abs(p1.caluate_distance(p2)-p1.caluate_distance(p3))<p2.caluate_distance(p3)
    &&Math.abs(p1.caluate_distance(p3)+p1.caluate_distance(p2))>p2.caluate_distance(p3)){
    err = false ;
  }
  return err ;
} //判断是否为等边三角形,或等腰三角形//
//若为等腰三角形,返回0//
//若为等边三角形,返回1//
public int shape_line_triangle() {
  int shape = 0;
  if(Math.abs(p1.caluate_distance(p2)-p1.caluate_distance(p3))<1e-15&&
    Math.abs(p2.caluate_distance(p1)-p2.caluate_distance(p3))<1e-15) {    
      shape = 1;
  }
  return shape;
} //计算三角形面积,返回面积//
public double caluate_S() {
  return Math.abs(p1.read_x()*p2.read_y()+p2.read_x()*p3.read_y()+p3.read_x()*p1.read_y()
  -p1.read_x()*p3.read_y()-p2.read_x()*p1.read_y()-p3.read_x()*p2.read_y())/2; } //计算三角形的周长,返回周长//
public double caluate_C() {
  return p1.caluate_distance(p2)+p1.caluate_distance(p3)+p2.caluate_distance(p3); } //计算三角形的重心坐标,返回Point//
public Point caluate_gravity_point() {
  Point p = new Point();
  double dx = (p1.read_x()+p2.read_x()+p3.read_x())/3;
  double dy = (p1.read_y()+p2.read_y()+p3.read_y())/3;
  p.input(dx, dy);
  return p;
} //判断三角形是锐角三角形还是直角三角形或钝角三角形//
//若是锐角三角形返回1,若是直角三角形返回0,若是钝角三角形则返回-1//
public int shape_horn_triangle() {
  int shape ;
  double j1 = (p2.read_x()-p1.read_x())*(p3.read_x()-p1.read_x())
    +(p2.read_y()-p1.read_y())*(p3.read_y()-p1.read_y());
  double j2 = (p3.read_x()-p2.read_x())*(p1.read_x()-p2.read_x())
    +(p3.read_y()-p2.read_y())*(p1.read_y()-p2.read_y());
  double j3 = (p1.read_x()-p3.read_x())*(p2.read_x()-p3.read_y())
    +(p1.read_y()-p3.read_y())*(p2.read_y()-p3.read_y());
  if(j1<0||j2<0||j3<0) {
    shape = 1;
  }else if(j1==0||j2==0||j3==0) {
    shape = 0 ;
  }else {
    shape = -1;
  }
  return shape;
} //计算直线与三角形的交点//
//返回交点个数//
public int caluate_sum_intersection(Line a) {
  int sum = 0;
  Line l1 = new Line();
  l1.p1=p1;l1.p2=p2;
  Line l2 = new Line();
  l2.p1=p1;l2.p2=p3;
  Line l3 = new Line();
  l3.p1=p2;l3.p2=p3;
  if(l1.if_parallel(a)==1) {
  Point point1 = a.caluate_intersection(l2);
  if(l2.if_in_line(point1)) {
    sum++;
  }
  Point point2 = a.caluate_intersection(l3);
  if(l3.if_in_line(point2)) {
    sum++;
  }
  }else if(l2.if_parallel(a)==1) {
    Point point1 = a.caluate_intersection(l1);
    if(l1.if_in_line(point1)) {
      sum++;
    }
    Point point2 = a.caluate_intersection(l3);
    if(l3.if_in_line(point2)) {
      sum++;
    }
  }else if(l3.if_parallel(a)==1) {
    Point point1 = a.caluate_intersection(l1);
    if(l1.if_in_line(point1)) {
      sum++;
    }
    Point point2 = a.caluate_intersection(l2);
    if(l2.if_in_line(point2)&&point1.chack_point(point2)) {
      sum++;
    }
  }else {
    Point point1 = a.caluate_intersection(l1);
    if(l1.if_in_line(point1)) {
      sum++;
    }
    Point point2 = a.caluate_intersection(l2);
    if(l2.if_in_line(point2)&&point1.chack_point(point2)) {
      sum++;
    }
    Point point3 = a.caluate_intersection(l2);
    if(l2.if_in_line(point3)&&point1.chack_point(point3)&&point2.chack_point(point3)) {
      sum++;
    }
  }
  return sum;
} //判断点是否再三角形内部//
  public boolean if_inside(Point a) {
    boolean rea = false ;
    Line l1 = new Line();
    l1.p1=p1;l1.p2=a;
    Line l2 = new Line();
    l2.p1=p2;l2.p2=a;
    Line l3 = new Line();  
    l3.p1=p3;l3.p2=a;
    Line l4 = new Line();
    l4.p1=p1;l4.p2=p2;
    Line l5 = new Line();
    l5.p1=p2;l5.p2=p3;
    Line l6 = new Line();
    l6.p1=p3;l6.p2=p1;
    if(!l5.if_in_line(l1.caluate_intersection(l5))||!l4.if_in_line(l3.caluate_intersection(l4))
      ||!l6.if_in_line(l2.caluate_intersection(l6))) {
      rea = true;
    }
    return rea;
  }
}

踩坑心得

代码调试了很久,最终也没能通过全部的测试点,留下了些许遗憾。

改进建议

public double caluate_C();//计算三角形的周长

public double caluate_S();//计算三角形的面积

public Point caluate_gravity_point();//计算三角形的重心

public int caluate_sum_intersection();//计算直线与三角形的交点个数

public Point if_inside();//判断点是否在三角形内部

public boolean chack_triangle();//判断三角形是否合法

总结:

首先在第一阶段的学习中,通过循序渐进的方式从开始认识Java再到本阶段的最高潮---类设计。学习的东西虽然基础,但是掌握却需要大量联系。从最基本的语法认知,到主动自己上网查找所需要功能的写法,再到初入Java面向对象编程的基本---类设计,这带给我们的是从以前C语言编程到Java语言编程习惯的改变。作为初学者,发现还有许多东西需要去掌握:

1.类与类之间的关系,当能够了解,并运用类与类之间的关系,则能解决大多数问题,许多时候正是不知如何进行将类互相呼应,导致代码亢长,产生垃圾代码,这不利于学习;

2.正则表达式,许多问题围绕着对于字符串的处理,若用常规方法,则是耗时巨大,效率极低的,正则表达式的使用则会将问题简化,将字符串处理模式化;

OO课程第一阶段(前三次作业)总结Blog1的更多相关文章

  1. OO前三次作业思考(第一次OO——Blog)

    OO前三次作业总结 基于度量分析程序结构 由于三次作业较多,决定分析内容.功能最为复杂的第三次作业. 上图为第三次作业的类图.我使用了一个抽象类Factor,写了五个因子继承Factor,然后又单独开 ...

  2. OO前三次作业总结

    一.第一次作业 1.程序设计分析 ![img](s1.ax1x.com/2018/04/02/CSgoSU.png) 图1 第一次作业类图 ![name](https://images2018.cnb ...

  3. Blog总结(前三次作业总结)

    前三次作业总结 1.前言 (1)第一次题目集共有8道题目,难度较为简单,知识点为JAVA的一些编程基础知识点,如输入输出,选择,循环,一维数组等. (2)第二次题目集共有5道题目,难度较第一次题目集有 ...

  4. OO前三次作业简单总结

    随着几周的进行,OO课堂已经经历过三次课下作业.在这三次作业中,我被扣了一些分数,也发现了自己几次作业中一些存在的共同的问题. 首先以第三次作业为例分析,我程序的类图如下 一共九个类,其中Als_sc ...

  5. OO前三次作业分析

    一,第一次作业分析 度量分析: 第一次的oo作业按照常理来说是不应该有这么多的圈复杂度,但是由于第一次写的时候,完全不了解java的相关知识,按照c语言的方式来写,完全的根据指导书的逻辑,先写好了正确 ...

  6. oo前三次作业博客总结

    第一次作业 实现多项式的加减运算,主要问题是解决输入格式的判断问题. 输入实例: {(3,0), (2,2), (12,3)} + {(3,1), (-5,3)} – {(-199,2), (29,3 ...

  7. OO第四次作业-对前三次作业总结

    第一次作业由于直接没怎么学过java,全靠一星期速成,前几天看了java的语法,但是因为光看没有打代码,学习效果并不是特别好.由面向过程转向面向对象,不是特别清楚该怎么办,虽然写的是两个类,但实际上是 ...

  8. OO学习第一阶段总结

    前言 虽然之前接触过java,也写过一些1000行左右的程序.可以说面向对象的思想和java的一些基本语法对我来说是没有难度的,但是这学期的面向对象依然给了我一个下马威.这几次的作业每次都很让我头疼. ...

  9. 第一次码java感想及前三次作业总结

    写在前面 嗯,首先是java,这学期第一次oo作业布置下来的周末才开始看的,第一次作业因此写得有些手忙脚乱.不过大概看了一遍后发现比c好用,入门更简单吧,好多操作直接import一下就能用了,码代码的 ...

  10. 计蒜客 18492.Upside down primes-米勒拉宾判大素数 (German Collegiate Programming Contest 2015 ACM-ICPC Asia Training League 暑假第一阶段第三场 K)

    K. Upside down primes 传送门 这个题就是把大数按字符串输进去,判断一下是不是素数,然后反转180度,先判断反转之后的东西是不是一个数,如果是的话,再把这个数判一下是不是素数,如果 ...

随机推荐

  1. 国产低功耗Soc蓝牙语音遥控器芯片HS6621 指纹锁、体脂称等应用方案

    随着物联网技术不断发展,家用电器往智能化方向持续迭代,使用红外遥控器这种传统的互动方式已经满足不了实际的使用需求,蓝牙语音遥控器作为人机交互新载体,逐渐取代传统红外遥控器成为家居设备的标配.相比于传统 ...

  2. gitee下载项目

    PS:如果直接在gitee仓库中选择下载zip,在本地打开项目后是不会与gitee远程库绑定的.如果要与远程库同步,需要选择克隆,同样的,本地需要先搭建好git环境. 1.在本地新建文件夹 2.在文件 ...

  3. jmeter分布式压测配置

    首选 压力机A,压力机B,压力机C,   压力机A作为控制台    压力机B,压力机C作为分布式的测试机 压力机Aip:172.16.23.69, 压力机Bip:192.168.184.128 压力机 ...

  4. 日志 LOG / Debug

    有很多时候我们想要查看日志文件,发现服务器已经被重启了,然后原来的日志就被打包存起来了,这个时候生成的gz日志文件我们就没有办法直接去查看了. 所以这个时候我们就需要zcat+日志名.gz来查看,还可 ...

  5. 如何理解JavaScript中常用的4种排序算法?

      如何理解JavaScript中常用的4种排序算法? 冒泡排序 冒泡排序是我们在编程算法中,算是比较常用的排序算法之一,在学习阶段,也是最需要接触理解的算法,所以我们放在第一个来学习. 算法介绍: ...

  6. 《深入剖析Nginx》 笔记

    nginx的编译安装使用Linux下通用的三板斧即可:./configure make make install 查看帮助选项./configure --help 禁用编译器优化方法一:CFLAGS= ...

  7. Oracle.DataAccess使用问题汇总

    1.使用参数化传参 先看一段sql select TABLE_COLUMN_NAME from CSV_PARA_MAPPING where TABLE_NAME = ':v_tabName' and ...

  8. windows 服务 包装模板

    github地址:  https://github.com/xl711436/Xiaolei.MockService 在 MockServiceInstance.cs 中 对应的方法中添加 对应的逻辑 ...

  9. 记下HTML中图片的路径

    1 <!doctype html> 2 <html> 3 <head> 4 <meta charset="utf-8"> 5 < ...

  10. NOIP2022 游记

    无论结局如何,我都曾经来过. Day -1 zak 模拟赛,被殴打了. Day 0 上午 补模拟赛题. 下午 补模拟赛题. 徐老师过来分配了第二天下午造数据名单. 我造 T2.希望不会太难.(flag ...