大皮

去见、去学、去写。

南昌航空大学 软件学院 pta Java 第四次作业 蔡珂 opp

国庆玩嗨了,草草写了两天,代码质量很差
差一个面积分割,后面写第五次作业的时候写完了
但是第五次作业也没写完hhh

题目列表

7-1 sdut-String-2 识蛟龙号载人深潜,立科技报国志(II)(正则表达式)

背景简介:

“蛟龙号”载人深潜器是我国首台自主设计、自主集成研制的作业型深海载人潜水器,设计最大下潜深度为7000米级,也是目前世界上下潜能力最强的作业型载人潜水器。“蛟龙号”可在占世界海洋面积99.8%的广阔海域中使用,对于我国开发利用深海的资源有着重要的意义。

中国是继美、法、俄、日之后世界上第五个掌握大深度载人深潜技术的国家。在全球载人潜水器中,“蛟龙号”属于第一梯队。目前全世界投入使用的各类载人潜水器约90艘,其中下潜深度超过1000米的仅有12艘,更深的潜水器数量更少,目前拥有6000米以上深度载人潜水器的国家包括中国、美国、日本、法国和俄罗斯。除中国外,其他4国的作业型载人潜水器最大工作深度为日本深潜器的6527米,因此“蛟龙号”载人潜水器在西太平洋的马里亚纳海沟海试成功到达7020米海底,创造了作业类载人潜水器新的世界纪录。

从2009年至2012年,蛟龙号接连取得1000米级、3000米级、5000米级和7000米级海试成功。下潜至7000米,说明蛟龙号载人潜水器集成技术的成熟,标志着我国深海潜水器成为海洋科学考察的前沿与制高点之一。

2012年6月27日11时47分,中国“蛟龙”再次刷新“中国深度”——下潜7062米。6月3日,“蛟龙”出征以来,已经连续书写了5个“中国深度”新纪录:6月15日,6671米;6月19日,6965米;6月22日,6963米;6月24日,7020米;6月27日,7062米。下潜至7000米,标志着我国具备了载人到达全球99%以上海洋深处进行作业的能力,标志着“蛟龙”载人潜水器集成技术的成熟,标志着我国深海潜水器成为海洋科学考察的前沿与制高点之一,标志着中国海底载人科学研究和资源勘探能力达到国际领先水平。

‘蛟龙’号是我国载人深潜发展历程中的一个重要里程碑。它不只是一个深海装备,更代表了一种精神,一种不畏艰险、赶超世界的精神,它是中华民族进军深海的号角。

了解蛟龙号”载人深潜器“的骄人业绩,为我国海底载人科学研究和资源勘探能力达到国际领先水平而自豪,小伙伴们与祖国同呼吸、共命运,一定要学好科学文化知识、提高个人能力,增强创新意识,做事精益求精,立科技报国之志!

请编写程序,实现如下功能:读入关于蛟龙号载人潜水器探测数据的多行字符串,从给定的信息找出数字字符,输出每行的数字之和。

提示 若输入为“2012年2月”,则该行的输出为:2014。若干个连续的数字字符作为一个整体,以十进制形式相加。

输入格式:

读入关于蛟龙号载人潜水器探测数据的多行字符串,每行字符不超过80个字符。

以"end"结束。

输出格式:

与输入行相对应的各个整数之和。

代码如下

import java.util.Scanner; // 需要导入 util 包
public class Main {
    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        //  String ch = input.nextLine();
        PointTaking a = new PointTaking();
        a.ch = input.nextLine();//读入
        while (!a.ch.equals("end")){
            int  ans =a.Solve2();//读入答案
            System.out.printf(ans+"\n");
            a.ch = input.nextLine();//读入
        }
        return;
        
    }
}

class PointTaking {
    String ch;
    int   Solve2(){
        int num=0,temp=0;
        for(int i=0;i<ch.length();i++) {
            while(i<ch.length()&&ch.charAt(i)>='0'&&ch.charAt(i)<='9'){
                temp*=10;
                temp+=(int)(ch.charAt(i)-'0');
              //  System.out.printf(temp+" ");
                i++;
            }
            num+=temp;
            temp=0;
        }
        return num;
    }
}

很签啊,连正则表达式都不用,直接if一下就行的题目。

7-2 点线形系列4-凸四边形的计算

    用户输入一组选项和数据,进行与四边形有关的计算。
以下四边形顶点的坐标要求按顺序依次输入,连续输入的两个顶点是相邻顶点,第一个和最后一个输入的顶点相邻。
选项包括:
1:输入四个点坐标,判断是否是四边形、平行四边形,判断结果输出true/false,结果之间以一个英文空格符分隔。
2:输入四个点坐标,判断是否是菱形、矩形、正方形,判断结果输出true/false,结果之间以一个英文空格符分隔。 若四个点坐标无法构成四边形,输出"not a quadrilateral"
3:输入四个点坐标,判断是凹四边形(false)还是凸四边形(true),输出四边形周长、面积,结果之间以一个英文空格符分隔。 若四个点坐标无法构成四边形,输出"not a quadrilateral"
4:输入六个点坐标,前两个点构成一条直线,后四个点构成一个四边形或三角形,输出直线与四边形(也可能是三角形)相交的交点数量。如果交点有两个,再按面积从小到大输出四边形(或三角形)被直线分割成两部分的面积(不换行)。若直线与四边形或三角形的一条边线重合,输出"The line is coincide with one of the lines"。若后四个点不符合四边形或三角形的输入,输出"not a quadrilateral or triangle"。
后四个点构成三角形的情况:假设三角形一条边上两个端点分别是x、y,边线中间有一点z,另一顶点s:
1)符合要求的输入:顶点重复或者z与xy都相邻,如x x y s、x z y s、x y x s、s x y y。此时去除冗余点,保留一个x、一个y。
2) 不符合要求的输入:z 不与xy都相邻,如z x y s、x z s y、x s z y
5:输入五个点坐标,输出第一个是否在后四个点所构成的四边形(限定为凸四边形,不考虑凹四边形)或三角形(判定方法见选项4)的内部(若是四边形输出in the quadrilateral/outof the quadrilateral,若是三角形输出in the triangle/outof the triangle)。如果点在多边形的某条边上,输出"on the triangle或者on the quadrilateral"。若后四个点不符合四边形或三角形,输出"not a quadrilateral or triangle"。

输入格式:

 基本格式:选项+":"+坐标x+","+坐标y+" "+坐标x+","+坐标y。点的x、y坐标之间以英文","分隔,点与点之间以一个英文空格分隔。

输出格式:
基本输出格式见每种选项的描述。
异常情况输出:
如果不符合基本格式,输出"Wrong Format"。
如果符合基本格式,但输入点的数量不符合要求,输出"wrong number of points"。
注意:输出的数据若小数点后超过3位,只保留小数点后3位,多余部分采用四舍五入规则进到最低位。小数点后若不足3位,按原始位数显示,不必补齐。例如:1/3的结果按格式输出为 0.333,1.0按格式输出为1.0

选项1、2、3中,若四边形四个点中有重合点,输出"points coincide"。
选项4中,若前两个输入线的点重合,输出"points coincide"。

代码如下

import java.util.Scanner; // 需要导入 util 包
public class Main {
    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        //  String ch = input.nextLine();
        PointTaking a = new PointTaking();
        a.ch = input.nextLine();//读入

        double ans =a.Solve();
        if (ans == -1)
            System.out.printf("Wrong Format\n");
        else if (ans == -2)
            System.out.printf("wrong number of points\n");
        else if (ans == -3)
            System.out.printf("data error\n");
        else if (ans==-4)
            System.out.printf("not a quadrilateral\n");
         else if (ans==-5)
            System.out.printf("not a quadrilateral or triangle");
        else if (ans == 1)
            System.out.printf("true\n");
        else if (ans == 2)
            System.out.printf("false\n");
        else  if(ans==4)
            System.out.printf("points coincide\n");

    }
}





class Line {
    Point a ,b;
    double slope(){//斜率
        if(this.a.x==this.b.x)
            return 563;
        //System.out.printf("\n1511565sada\n");
        return (this.a.y-this.b.y)/(this.a.x-this.b.x);
    }
    double intercept() {//截距
        if(slope()==563)
            return this.a.x;
        if(slope()==0)
            return 0;
        return a.x-(this.slope())*a.y;
    }
    double pointVerticalDistanc(Point c){//点到线距离
        if(this.a.x==this.b.x)
            return Math.abs(c.x-this.a.x);
        return (Math.abs((this.a.y-this.b.y)*c.x+(this.b.x-this.a.x)*c.y+this.a.x*this.b.y-this.a.y*this.b.x)/
                (Math.sqrt((this.a.y-this.b.y)*(this.a.y-this.b.y)+(this.a.x-this.b.x)*(this.a.x-this.b.x))));
    }
    int judgeIntersection(Line line){//判断线段是否相交,0:两线平行且嵌入 1 有焦点 -1平行 -2:无交点
        if(slope()==line.slope()&&intercept()==line.intercept())
            return 0;
        if(slope()==line.slope())
            return -1;
        Point point = this.intersection(line);
        if(point.x<=Math.max(line.a.x,line.b.x)&&point.x>=Math.min(line.a.x,line.b.x)&&point.y<=Math.max(line.a.y,line.b.y)&&point.y>=Math.min(line.a.y,line.b.y))
            return 1;

        return -1;
    }
    boolean sameIntersection(Line line1,Line line2){//判断相交点是否相同
        Point point1=this.intersection(line1),point2=this.intersection(line2);
       // System.out.printf("%f %f %f %f %f %f %f %f \n",line1.a.x,line1.a.y,line1.b.x,line1.b.y,line2.a.x,line2.a.y,line2.b.x,line2.b.y);
        return point2.x == point1.x && point1.y == point2.y;
    }
    double dis(){
        return a.DistanceCalculation(b);
    }//线长

    boolean judgeParallelism(Line a) {
        return a.slope() == this.slope();
    }
    Point intersection(Line line){//求相交点
        Point point1 = new Point();
        point1.x=((line.a.x-line.b.x)*(this.a.y*this.b.x-this.a.x*this.b.y)-(this.a.x-this.b.x)*(line.a.y*line.b.x-line.a.x*line.b.y))/
                ((this.b.y-this.a.y)*(line.b.x-line.a.x)-(this.b.x-this.a.x)*(line.b.y-line.a.y));
        point1.y=((line.a.y-line.b.y)*(this.a.y*this.b.x-this.a.x*this.b.y)-(this.a.y-this.b.y)*(line.a.y*line.b.x-line.a.x*line.b.y))/
                ((this.b.y-this.a.y)*(line.b.x-line.a.x)-(this.b.x-this.a.x)*(line.b.y-line.a.y));
        return point1;
    }

    boolean dotLineJudgment(Point point){//判断点是否在直线上
        Line line2 = new Line();
        line2.a = point;line2.b=this.b;
        if((point.x==a.x&&point.y==a.y)||(point.x==b.x&&point.y== b.y))
            return true;
     //   System.out.printf("%f %f %f %f %f %f %f %f "+(line2.slope()==slope())+"\n",a.x,a.y,b.x,b.y,point.x,point.y,slope(),line2.slope());
        return line2.slope() == this.slope() && line2.intercept() == this.intercept();
    }
    boolean vertical(Line line){
        return (a.x - b.x) * (line.a.x - line.b.x) + (a.y - b.y) * (line.a.y - line.b.y) == 0;
    }
}






class Point {//点的类
    double x = 0 , y = 0 ;
    double DistanceCalculation(Point b) {
        return Math.sqrt((this.x-b.x)*(this.x-b.x)+(this.y-b.y)*(this.y-b.y));
    }//返回两点距离
}



class Triangle {
    Line []line = new Line[8];
    double area() {//三角形面积
        double p= (Math.sqrt((line[1].a.x-line[1].b.x)*(line[1].a.x-line[1].b.x)+(line[1].a.y-line[1].b.y)*(line[1].a.y-line[1].b.y))+Math.sqrt((line[2].a.x-line[2].b.x)*(line[2].a.x-line[2].b.x)+(line[2].a.y-line[2].b.y)*(line[2].a.y-line[2].b.y))+ Math.sqrt((line[3].a.x-line[3].b.x)*(line[3].a.x-line[3].b.x)+(line[3].a.y-line[3].b.y)*(line[3].a.y-line[3].b.y)) )/2;
        return Math.sqrt(p*(p- Math.sqrt((line[1].a.x-line[1].b.x)*(line[1].a.x-line[1].b.x)+(line[1].a.y-line[1].b.y)*(line[1].a.y-line[1].b.y)) )*(p - Math.sqrt((line[2].a.x-line[2].b.x)*(line[2].a.x-line[2].b.x)+(line[2].a.y-line[2].b.y)*(line[2].a.y-line[2].b.y)) )*(p- Math.sqrt((line[3].a.x-line[3].b.x)*(line[3].a.x-line[3].b.x)+(line[3].a.y-line[3].b.y)*(line[3].a.y-line[3].b.y)) ));
    }
    void init(Line line1,Line line2,Point point1,Point point2){
        for(int i=1;i<=3;i++){
            line[i] = new Line();
            line[i].a= new Point();
            line[i].b = new Point();
        }
        line[1].a.x=line1.a.x;line[1].a.y=line1.a.y;
        line[1].b.x=line1.b.x;line[1].b.y=line1.b.y;
        line[2].a.x=line2.a.x;line[2].a.y=line2.a.y;
        line[2].b.x=line2.b.x;line[2].b.y=line2.b.y;
        line[3].a.x=point1.x;line[3].a.y=point1.y;
        line[3].b.x=point2.x;line[3].b.y=point2.y;
    }
    void init(Point point3,Point point1,Point point2) {
        for(int i=1;i<=3;i++){
            line[i] = new Line();
            line[i].a= new Point();
            line[i].b = new Point();
        }
        line[1].a.x=point1.x;line[1].a.y=point1.y;
        line[1].b.x=point2.x;line[1].b.y=point2.y;

        line[2].a.x=point2.x;line[2].a.y=point2.y;
        line[2].b.x=point3.x;line[2].b.y=point3.y;

        line[3].a.x=point3.x;line[3].a.y=point3.y;
        line[3].b.x=point1.x;line[3].b.y=point1.y;
    }
    void pointRelation(Point point){
        Triangle b= new Triangle(),c= new Triangle(),d= new Triangle();
        //System.out.printf("%f %f %f %f %f %f\n",line[1].a.x,line[1].a.y,line[2].a.x,line[2].a.y,line[3].a.x,line[3].a.y);
        b.init(point,line[3].a,line[3].b);c.init(point,line[2].a,line[2].b);d.init(point,line[1].a,line[1].b);
        if(d.area()==0||b.area()==0||c.area()==0)
            System.out.println("on the triangle");
        else if(Math.abs(area()-b.area()-c.area()-d.area())<0.0005)
            System.out.printf("in the triangle");
        else
            System.out.println("outof the triangle");
    }

}








class PointTaking {
    String ch;
    Quadrilateral q ;

    public static double printDouble(double num) {
        String str = String.format("%.3f",num);
        num = Double.parseDouble(str);
        return num;
    }
    public static double vectorComputation(Point a,Point b,Point c){//计算点线是否相交
        double x1 = a.x-c.x, y1=a.y-c.y,x2=b.x-c.x,y2=b.y-c.y;
        return  x1*y2-x2*y1;
    }//&ensp;&ensp;

    boolean repetitionPointJudgment(Point a[],int x){//相同点
        if(x<=3){
            for(int i=1;i<=4;i++){//如果一样则返回
                // System.out.printf("%f %f\n",pointSet[i].x,pointSet[i].y);
                for(int j = i+1;j<=4;j++)
                    if(a[i].x==a[j].x&&a[i].y==a[j].y)
                        return true;
          }

        }
        else if(x==4){
            return a[1].x == a[2].x && a[1].y == a[2].y;
        }
        return false;
    }
    int  repetitionPointJudgment2(Point[] points,int x){
        if(x==5)
            x=1;
        else x=2;
        int num=0;
        for(int i=x+1;i<=x+4;i++){
            for(int j=i+1;j<=x+4;j++)
                if(points[i].x== points[j].x&&points[i].y==points[j].y)
                    num++;
        }
        return num;
    }
    public  static  double areaCalculation(Point a,Point b,Point c,Line d,double s) {//计算面积case4
        Line aa = new Line();
        Line bb = new Line();
        aa.a=a;aa.b=b;
        bb.a=a;bb.b=c;
        Point x1 = aa.intersection(d);
        Point x2 = bb.intersection(d);
        double q = (a.DistanceCalculation(b)*a.DistanceCalculation(c));
        double p = (a.DistanceCalculation(x1)*a.DistanceCalculation(x2));
//        System.out.printf(p+" "+q+" ");
//        Systemystem.out.printf(s+" ");
        return (s*p)/q;
    }

    double Solve() {
        Point[] pointSet = new Point[15];//储存点
        int pos = 0;
        //  String[]
        String[] splitSet1 = this.ch.split(":");//将字符串以冒号分割,剥离选项与坐标
        if (splitSet1.length != 2)
            return -1;
        if (!splitSet1[0].matches("[1-5]"))//判断选项是否合规
            return -1;
        int x = Integer.parseInt(splitSet1[0]);//剥离出第选项
        int[] digitalDeposit = {0, 4, 4, 4, 6, 5
                                                                                                                };//定义选项要的点数
        for (int i = 1; i <= 10; i++)
            pointSet[i] = new Point();//new多个点

        String[] splitSet2 = splitSet1[1].split(" ");
        for (String i : splitSet2) {//对分割的字符串遍历
            int count=2;
            String[] splitSet3 = i.split(",");
            for (String j : splitSet3) {
                if (!j.matches("^[+-]?(([1-9]\\d*\\.\\d+)|(0\\.\\d+)|([1-9]\\d*)|0)$"))//正则表达式判断是否合法
                    return -1;//返回输入错误
                int pos2 = pos / 2 + 1;
                //      System.out.printf(pos2+"");
                if ((pos & 1) == 0)//按位读入坐标
                    pointSet[pos2].x = Double.parseDouble(j);
                else if ((pos & 1) == 1)
                    pointSet[pos2].y = Double.parseDouble(j);
                pos++;
                count--;
            }
            if(count!=0)
                return -1;
        }
        if (splitSet2.length != digitalDeposit[x])
            return -2;//返回错误点数量
        if(repetitionPointJudgment(pointSet,x)&&x!=2)
            return 4;
        createQuadrilateral(x,pointSet);
        return juSample(x,pointSet);
    }
    void createQuadrilateral(int x,Point[] points){
        int []a={0,1,1,1,3,2};
        q = new Quadrilateral();
        for(int i=1;i<=4;i++){
            q.line[i]=new Line();

            q.line[i].a=points[(i-1)%4+a[x]];
            q.line[i].b=points[i%4+a[x]];
            //System.out.printf(q.line[i].a.x+" "+q.line[i].a.y+"\n");
        }
    }
    double juSample(int x, Point[] points){
        if(x==1)
            return sample1(points);
        else if(x==2)
            return sample2(points);
        else if(x==3)
            return sample3(points);
        else if(x==4)
            return sample4(points);
        else if(x==5)
            return sample5(points);
        return -1;
    }

    double sample1(Point[] points){

        if(q.quadrilateralOrNot()){
            System.out.print("false false");
            return 5;
        }
        if(q.parallel())
            System.out.print("true true");
        else System.out.print("true false");

        return 5;
    }
    double sample2(Point[] points){
        if(q.quadrilateralOrNot() || repetitionPointJudgment(points,4))
            return -4;
        boolean flag1,flag2;
        flag1=q.judgeDiamond();
        flag2=q.judgeRectangle();
        if(flag1&&flag2)
            System.out.print("true true true");
        else if(flag1)
            System.out.print("true false false");
        else if(flag2)
            System.out.print("false true false");
        else
            System.out.print("false false false");
        return 5;
    }
    double sample3(Point[] points){
        if(repetitionPointJudgment(points,4))
            return -4;
        
        if(q.bump())
            System.out.printf("true ");
        else System.out.printf("false ");
        System.out.printf(printDouble(q.perimeter())+" "+printDouble(q.area()));
        return 5;
    }
    double sample4(Point[] points){
        if(q.fourPointsCollinear()||q.illegalShape())
            return -5;
        Line line= new Line();
        line.a=points[1];line.b=points[2];
         if(q.lineEdgeIntersection(line)) {
            System.out.printf("The line is coincide with one of the lines");
             return 5;
        }
        int num = q.focalPoints(line);
        System.out.printf(num+"");
        if(num<2){

            return 5;
        }
        Quadrilateral[] qua = new Quadrilateral[3];
        return 5;
    }
    double sample5(Point[] points) {

        Triangle tri;
        int num = repetitionPointJudgment2(points, 5);
        if (num > 1||q.fourPointsCollinear()||q.illegalShape())
                    return -5;
        if (num == 1) {
            tri = homonymousTriangle(points,2);
            tri.pointRelation(points[1]);
            return 5;
        }
        if (q.line[1].slope() == q.line[2].slope() || q.line[2].slope() == q.line[3].slope() || q.line[3].slope() == q.line[4].slope() || q.line[4].slope() == q.line[1].slope()) {
            tri = q.generateTriangle();
            tri.pointRelation(points[1]);
            return  5;
        }
        q.pointRelation(points[1]);
        return  5;
    }
    Triangle homonymousTriangle(Point[] points,int x){
        Triangle tri= new Triangle();
        for(int i=x;i<=x+3;i++)
            for(int j=i+1;j<=x+3;j++)
                if(points[i].x==points[j].x&&points[i].y==points[j].y) {
                    if(i==x+1)
                        tri.init(points[x+3],points[x],points[x+2]);
                    if(i==x+2)
                        tri.init(points[x+1],points[x],points[x+3]);
                    if(i==x+3)
                        tri.init(points[x],points[x+1],points[x+2]);
                    if(i==x)
                        tri.init(points[x+1],points[x+3],points[x+2]);

                    return tri;
                }

        return tri;
    }
}







class Quadrilateral {
    Line []line = new Line[5];
    boolean quadrilateralOrNot(){
        return  line[1].judgeIntersection(line[3])==1|| line[2].judgeIntersection(line[4]) ==1 || line[1].dotLineJudgment(line[3].a) || line[1].dotLineJudgment(line[3].b) || line[3].dotLineJudgment(line[1].a) || line[3].dotLineJudgment(line[1].b);


    }
    boolean parallel(){//判断平行四边形
        return line[1].slope() == line[3].slope() && line[2].slope() == line[4].slope();
    }
    boolean judgeDiamond(){//判断是否菱形
        return parallel()&&Math.abs(line[1].dis()-line[2].dis())<0.05;
    }
    boolean judgeRectangle(){//判断矩形
        return line[1].vertical(line[2])&&line[1].judgeParallelism(line[3])&&line[2].judgeParallelism(line[4]);
    }
    boolean fourPointsCollinear(){//判断不能组成三角形或者四边形
     //   System.out.printf(line[1].slope()+" "+line[2].slope()+" "+line[3].slope()+" "+line[4].slope()+"\n");
        return line[1].slope()==line[2].slope()&&line[2].slope()==line[3].slope()&&line[3].slope()==line[4].slope();
    }

    double perimeter(){//周长
        return line[1].dis()+line[2].dis()+line[3].dis()+line[4].dis();
    }
    Triangle[] division(){//划分三角形
        Line a = new Line(),b = new Line();
        Triangle [] tri = new Triangle[5];
        for(int i=1;i<=4;i++)
            tri[i]= new Triangle();
        a.a=line[1].a;a.b=line[3].a;
        b.a=line[1].b;b.b=line[3].b;
        tri[1].line[1]=line[1];
        tri[1].line[2]=line[2];
        tri[1].line[3]=a;

        tri[2].line[1]=line[3];
        tri[2].line[2]=line[4];
        tri[2].line[3]=a;

        tri[3].line[1]=line[1];
        tri[3].line[2]=line[4];
        tri[3].line[3]=b;

        tri[4].line[1]=line[3];
        tri[4].line[2]=line[2];
        tri[4].line[3]=b;
        return tri;
    }

    double area(){//面积
        Triangle [] tri = division();
        return Math.min(tri[1].area()+tri[2].area(),tri[3].area()+tri[4].area());
    }
    boolean bump(){//判断凹凸
        Triangle [] tri = division();

        return tri[1].area() + tri[2].area() == tri[3].area() + tri[4].area();
    }
    int focalPoints(Line line2) {//求线与其焦点数量
        int num=0;
        boolean []flag={false,false,false,false,false};
       
        for(int i=1;i<=4;i++) {
            if (line2.judgeIntersection(line[i]) == 1) {
                num++;
                flag[i] = true;
            }
            //System.out.printf(num + "\n");
        }
//         for(int i=1;i<=4;i++){
//             if(flag[i]&&line2.sameIntersection(line[i],line[i%4+1]))
//                 num--;
//            // System.out.printf(num+"\n");
//         }
        return num;
    }//4:-1,-1 1,1 0,0 2,0 3,0 0,5
    //4:-1,-1 1,1 0,0 5,0 5,5 0,5
    Triangle generateTriangle(){
        Triangle tri = new Triangle();
        if(line[1].slope()==line[2].slope())
            tri.init(line[3],line[4],line[1].a,line[2].b);
        else if(line[3].slope()==line[2].slope())
            tri.init(line[4],line[1],line[2].a,line[3].b);
        else if(line[3].slope()==line[4].slope())
            tri.init(line[1],line[2],line[3].a,line[4].b);
        else if(line[1].slope()==line[4].slope())
            tri.init(line[2],line[3],line[4].a,line[1].b);

        return tri;
    }
    void pointRelation(Point point){
        Triangle a=new Triangle(),b= new Triangle(),c= new Triangle(),d= new Triangle();
        b.init(point,line[3].a,line[3].b);c.init(point,line[2].a,line[2].b);d.init(point,line[1].a,line[1].b);
        a.init(point,line[4].a,line[4].b);
        if((d.area()==0||b.area()==0||c.area()==0||a.area()==0)&&(Math.abs(area()-a.area()-b.area()-c.area()-d.area())<0.0005))
            System.out.println("on the quadrilateral");
        else if(Math.abs(area()-a.area()-b.area()-c.area()-d.area())<0.0005)
            System.out.printf("in the quadrilateral");
        else
            System.out.println("outof the quadrilateral");
    }
    boolean illegalShape(){
        for (int i=1;i<=4;i++)
            if(line[i].slope()==line[i%4+1].slope()){
                if((line[i].a.x>line[i].b.x&&line[i%4+1].b.x>line[i%4+1].a.x)||
                        (line[i].a.x<line[i].b.x&&line[i%4+1].b.x<line[i%4+1].a.x)||
                        (line[i].a.y>line[i].b.y&&line[i%4+1].b.y>line[i%4+1].a.y)||
                        (line[i].a.y<line[i].b.y&&line[i%4+1].b.y<line[i%4+1].a.y))
                    return true;
            }
        return false;
    }
//    Quadrilateral[] division(Quadrilateral q,Line line2){
//        return q;
//    }
    boolean lineEdgeIntersection(Line line2){
        return line2.judgeIntersection(line[1]) == 0 || line2.judgeIntersection(line[2]) == 0 ||
                line2.judgeIntersection(line[3]) == 0 || line2.judgeIntersection(line[4]) == 0;
    }

}

代码很长,写的也巨累,主要难度就是前面的类写的不好,然后后面就在疯狂改类hhh,具体分析我会放在总结博客中。

7-3 设计一个银行业务类

  编写一个银行业务类BankBusiness,具有以下属性和方法:
(1)公有、静态的属性:银行名称bankName,初始值为“中国银行”。
(2)私有属性:账户名name、密码password、账户余额balance。
(3)银行对用户到来的欢迎(welcome)动作(静态、公有方法),显示“中国银行欢迎您的到来!”,其中“中国银行”自动使用bankName的值。
(4)银行对用户离开的提醒(welcomeNext)动作(静态、公有方法),显示“请收好您的证件和物品,欢迎您下次光临!”
(5)带参数的构造方法,完成开户操作。需要账户名name、密码password信息,同时让账户余额为0。
(6)用户的存款(deposit)操作(公有方法,需要密码和交易额信息),密码不对时无法存款且提示“您的密码错误!”;密码正确、完成用户存款操作后,要提示用户的账户余额,例如“您的余额有1000.0元。”。
(7)用户的取款(withdraw)操作(公有方法,需要密码和交易额信息)。密码不对时无法取款且提示“您的密码错误!”;密码正确但余额不足时提示“您的余额不足!”;密码正确且余额充足时扣除交易额并提示用户的账户余额,例如“请取走钞票,您的余额还有500.0元。”。

编写一个测试类Main,在main方法中,先后执行以下操作:
(1)调用BankBusiness类的welcome()方法。
(2)接收键盘输入的用户名、密码信息作为参数,调用BankBusiness类带参数的构造方法,从而创建一个BankBusiness类的对象account。
(3)调用account的存款方法,输入正确的密码,存入若干元。密码及存款金额从键盘输入。
(4)调用account的取款方法,输入错误的密码,试图取款若干元。密码及取款金额从键盘输入。
(5)调用account的取款方法,输入正确的密码,试图取款若干元(取款金额大于余额)。密码及取款金额从键盘输入。
(6)调用account的取款方法,输入正确的密码,试图取款若干元(取款金额小于余额)。密码及取款金额从键盘输入。
(7)调用BankBusiness类的welcomeNext()方法。

输入格式:

输入开户需要的姓名、密码
输入正确密码、存款金额
输入错误密码、取款金额
输入正确密码、大于余额的取款金额
输入正确密码、小于余额的取款金额

输出格式:

中国银行(银行名称)欢迎您的到来!
您的余额有多少元。
您的密码错误!
您的余额不足!
请取走钞票,您的余额还有多少元。
请收好您的证件和物品,欢迎您下次光临! 0.333333,1.0按格式输出为1.0

代码如下

import java.util.Scanner; // 需要导入 util 包
public class Main {
    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        BankBusiness a = new BankBusiness();
        a.init();


    }
}

class BankBusiness {
    Scanner input = new Scanner(System.in);
    public static String bankName= "中国银行";
    public  static double balance=0;
    private static String name,password;
    public static void welcome(){
        System.out.printf(bankName+"欢迎您的到来!\n");
    }
    void init(){

        name = input.next();
        password = input.next();
        welcome();
        deposit();
        withdraw();
        withdraw();
        withdraw();
        welcomeNext();
    }
    public boolean verification() {
        String inputName = input.next();
        if(inputName.equals(password))
            return true;
        return false;
    }
    public void error1(){
        System.out.printf("您的密码错误!\n");
    }
    public void deposit(){

        boolean flag = verification();
        Double inputNum = input.nextDouble();
        if(!flag) error1();
        else{
            balance += inputNum;
            System.out.printf("您的余额有%.1f元。\n",(float)(balance));
        }
    }

    public void withdraw(){
        boolean flag = verification();
        Double inputNum = input.nextDouble();
        if(!flag) error1();
        else{
            if(balance>=inputNum){
                balance -= inputNum;
                System.out.printf("请取走钞票,您的余额还有%.1f元。\n",(float)(balance));
            }
            else
                System.out.printf("您的余额不足!\n");
        }
    }
    public static void welcomeNext(){
        System.out.printf("请收好您的证件和物品,欢迎您下次光临!");
    }
}

posted on 2022-10-26 16:36  大皮QAQ  阅读(122)  评论(0编辑  收藏  举报

导航

回到顶部叭QAQ