南昌航空大学 软件学院 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;
}//  
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("请收好您的证件和物品,欢迎您下次光临!");
}
}