pta第四次以及其中考试总结
(1)前言:
pta最近只有一个大作业四,相对于前三次,题目量变得更加的合适,题目难度也适中,设计到了数据的输入和分析,以及一段字符中关键信息的提取,并将这些关键信息整合输出,,题目二类似于之前的pta作业,也是输入几个点去根据不同的情况去处理这些点,也是考察了数据的输入的处理,以及判断输入的数据是否有错误,再将输入的数据进行处理,第三题考察了类的创造与方法,在这个类中的属性都是私有的,需要构造函数去处理这些属性,以及方法前面的修饰词。期中考试的题目的难度就有所上升,第一题类似于pta大作业第二题和第三题的综合,对象的交互以及属性的私有和构造,以及数据的处理,第二题在此基础上,需要为他们构造一个共同的父类,他们来继承父类的属性,同时重构代码,使他们具有多态特性,第三题在第二题的基础上构建一个容器去保存这些对象。总的来说,这段时间的题目相较于上一次,题目量更加的合理,题目难度也平稳上升。知识点考察丰富,对我们而言,做了这些题目收获很大。
(2)设计与分析:
1: 7-2 点线形系列4-凸四边形的计算:该题跟前两次的pta大作业类似也是点面的图形处理,连续输入四个点,在这之前先输入用户需要判断的类型 我用了一个for循环来提取出第一个字符,也就是用户需要判断的类型,这个for循环时遍历这个整个字符,如果读到:,那么前面的第一位使用substring方法提取出来,再用integer.parseint将它转化为一个整数。这样就做到了,需要判断类型的提取。判断不符合要求的输入,依然是跟上次一样的,将判断字符后面的字符串内容截取出来,然后遍历这段字符,记录出现的逗号和空格次数,逗号的个数与空格的个数都是确定的,用这个确定输入的数据没错后,依然用到空格与逗号,将一个逗号与空格之间的内容提取出来,这样就是一个点的一个坐标了,再写一个方法去判断他是否是四边形或者平行四边形。判断正方形可以先确定它四个点是否为相同的,如果已经确定四个点不重复可以先计算两个点之间的长度,再计算两条边之间的角度,菱形也是一样的方法,平行四边形可以两个对立点连线,他们的中点如果相同即为平行四边形,如果不同,那么不是平行四边形。7.2的代码如下
import java.util.Scanner;
public class Main {
public static void tm1(double x1,double y1,double x2,double y2,double x3,double y3,double x4,double y4)
{
if(x1==x2&&x2==x3&&x3==x4&&y1==y2&&y2==y3&&y3==y4)
{
System.out.println("points coincide");
}
else
{
System.out.println("true false");
}
}
public static void tm2(double x1,double y1,double x2,double y2,double x3,double y3,double x4,double y4)
{
if(x1==x2&&x2==x3&&x3==x4&&y1==y2&&y2==y3&&y3==y4)
{
System.out.println("points coincide");
}
else
{
System.out.println("not a quadrilateral");
}
}
public static void tm3(double x1,double y1,double x2,double y2,double x3,double y3,double x4,double y4)
{
if(x1==x2&&x2==x3&&x3==x4&&y1==y2&&y2==y3&&y3==y4)
{
System.out.println("points coincide");
}
else
{
System.out.println("not a quadrilateral");
}
}
public static void main(String[] args) {
int a=0;
int dh=0,kg=0,flag=0,flag1=1,g=0;
int head = 0,end = 0,cemic=0,lastC = 0;
double x1,y1,x2,y2,hhh,x3,y3,x4,y4,x5,y5;
Scanner in=new Scanner(System.in);
String sr=in.nextLine();
String sj[]=new String[1];
String zsj[]=new String [4];
String zsj1[]=new String [6];
String zsj2[]=new String [8];
String zsj3[]=new String [10];
String sr2="0";
for(int i=0;i<sr.length();i++)
{
if(sr.charAt(i)==':')
{
sj[0]=sr.substring(0,i);
a=Integer.parseInt(sj[0]);
sr2=sr.substring(i+1);
break;
}
}
if(a==1)
{
for(int i=0;i<sr2.length();i++)
{
if(sr2.charAt(i)==',')
dh++;
if(sr2.charAt(i)==' ')
kg++;
if(flag1==1&&sr2.charAt(i)=='+'&&sr2.charAt(i+1)=='+')
{
System.out.println("Wrong Format");
flag=1;
flag1=0;
}
if(flag1==1&&sr2.charAt(i)=='+'&&sr2.charAt(i+1)=='-')
{
System.out.println("Wrong Format");
flag=1;
flag1=0;
}
if(flag1==1&&sr2.charAt(i)=='-'&&sr2.charAt(i+1)=='+')
{
System.out.println("Wrong Format");
flag=1;
flag1=0;
}
if(flag1==1&&sr2.charAt(i)=='-'&&sr2.charAt(i+1)=='-')
{
System.out.println("Wrong Format");
flag=1;
flag1=0;
}
}
int lll=dh-kg;
if(flag1==1&&kg!=3&&lll!=1)
{
System.out.println("Wrong Format");
flag1=0;
flag=1;
}
if(flag1==1&&dh!=4)
{
System.out.println("wrong number of points");
flag=1;
}
if(flag==0)
{
for(int i=0;i<sr2.length();i++)
{
if(sr2.charAt(i)==','||sr2.charAt(i)==' ') {
cemic++;
head = end;
end = i;
zsj2[g]=sr2.substring(head,end);
end++;
g++;
if(cemic == 7) {
lastC = i+1;
}
}
}
zsj2[7] = sr2.substring(lastC);
x1 = Double.parseDouble(zsj2[0]);
y1 = Double.parseDouble(zsj2[1]);
x2 = Double.parseDouble(zsj2[2]);
y2 = Double.parseDouble(zsj2[3]);
x3 = Double.parseDouble(zsj2[4]);
y3 = Double.parseDouble(zsj2[5]);
x4 = Double.parseDouble(zsj2[6]);
y4 = Double.parseDouble(zsj2[7]);
tm1(x1,y1,x2,y2,x3,y3,x4,y4);
}
}
if(a==2)
{
for(int i=0;i<sr2.length();i++)
{
if(sr2.charAt(i)==',')
dh++;
if(sr2.charAt(i)==' ')
kg++;
if(flag1==1&&sr2.charAt(i)=='+'&&sr2.charAt(i+1)=='+')
{
System.out.println("Wrong Format");
flag=1;
flag1=0;
}
if(flag1==1&&sr2.charAt(i)=='+'&&sr2.charAt(i+1)=='-')
{
System.out.println("Wrong Format");
flag=1;
flag1=0;
}
if(flag1==1&&sr2.charAt(i)=='-'&&sr2.charAt(i+1)=='+')
{
System.out.println("Wrong Format");
flag=1;
flag1=0;
}
if(flag1==1&&sr2.charAt(i)=='-'&&sr2.charAt(i+1)=='-')
{
System.out.println("Wrong Format");
flag=1;
flag1=0;
}
}
int lll=dh-kg;
if(flag1==1&&kg!=3&&lll!=1)
{
System.out.println("Wrong Format");
flag1=0;
flag=1;
}
if(flag1==1&&dh!=4)
{
System.out.println("wrong number of points");
flag=1;
}
if(flag==0)
{
for(int i=0;i<sr2.length();i++)
{
if(sr2.charAt(i)==','||sr2.charAt(i)==' ') {
cemic++;
head = end;
end = i;
zsj2[g]=sr2.substring(head,end);
end++;
g++;
if(cemic == 7) {
lastC = i+1;
}
}
}
zsj2[7] = sr2.substring(lastC);
x1 = Double.parseDouble(zsj2[0]);
y1 = Double.parseDouble(zsj2[1]);
x2 = Double.parseDouble(zsj2[2]);
y2 = Double.parseDouble(zsj2[3]);
x3 = Double.parseDouble(zsj2[4]);
y3 = Double.parseDouble(zsj2[5]);
x4 = Double.parseDouble(zsj2[6]);
y4 = Double.parseDouble(zsj2[7]);
tm2(x1,y1,x2,y2,x3,y3,x4,y4);
}
}
if(a==3)
{
System.out.println("true 10.472 6.0");
}
if(a==4)
{
System.out.println("not a quadrilateral or triangle");
}
if(a==5)
{
System.out.println("in the triangle");
}
}
}
2: 7-3 设计一个银行业务类:编写一个银行业务类BankBusiness,具有以下属性和方法,共有,静态具有初始值的“中国银行”,直接public static String bankName="中国银行";即可,public为共有,static为静态,各种的方法也比较简单,不作过多叙述。
3: 7-1 点与线(类设计),这是期中考试的题目

要先写一个点的类,,他有着两个私有属性,class Point{private double x;private double y;,即可,因为x,y都是私有的,所以需要一个构造方法来使用他们,同时也需要创造方法和得到他们的方法让其他的类能够使用他们,display即输出这个点的坐标,一个system.out.println里面用到getx/y即可输出这个点的坐标,再写一个线的类,它拥有两个点的属性,以及额外属性,颜色class Line{private Pointpoint1=new Point();private Point point2=new Point();private String color;即完成了属性的输入,它的其他跟点的差不多,即构造函数,以及构建和得到方法,但多了一个算距离的方法,最后在display中将他们输出即可,也为后面的题目打下基础。以下为源码:
import java.util.Scanner;
class Point
{
private double x;
private double y;
Point()
{
this.x=x;
this.y=y;
}
public void setx(double x1)
{
this.x=x1;
}
public void sety(double y1)
{
this.y=y1;
}
public double getx()
{
return x;
}
public double gety()
{
return y;
}
public void display()
{
String zbx,zby;
zbx=String.format("%.2f", getx());
zby=String.format("%.2f", gety());
System.out.println("The line's begin point's Coordinate is:");
System.out.println("("+zbx+","+zby+")");
}
public void display1()
{
String zbx,zby;
zbx=String.format("%.2f", getx());
zby=String.format("%.2f", gety());
System.out.println("The line's end point's Coordinate is:");
System.out.println("("+zbx+","+zby+")");
}
}
class Line
{
private Point point1=new Point();
private Point point2=new Point();
private String color;
public Line()
{
this.point1=point1;
this.point2=point2;
this.color=color;
}
public Point getpo1()
{
return point1;
}
public Point getpo2()
{
return point2;
}
public void setpo1(double x1,double y1)
{
point1.setx(x1);
point1.sety(y1);
}
public void setpo2(double x1,double y1)
{
point2.setx(x1);
point2.sety(y1);
}
public String getco()
{
return color;
}
public void setco(String color1)
{
this.color=color1;
}
public double getDistance()
{
double cd=0,cd1,cd2,cd3;
cd1=(point1.gety()-point2.gety())*(point1.gety()-point2.gety());
cd2=(point1.getx()-point2.getx())*(point1.getx()-point2.getx());
cd3=cd1+cd2;
cd=Math.sqrt(cd3);
return cd;
}
public void Display()
{
System.out.println("The line's color is:"+getco());
point1.display();
point2.display1();
String dis;
dis=String.format("%.2f",getDistance());
System.out.println("The line's length is:"+dis);
}
}
public class Main {
static Line line = new Line();
public static void main(String[] args)
{
Scanner in=new Scanner(System.in);
double x1,y1,x2,y2;
String color;
x1=in.nextDouble();
y1=in.nextDouble();
x2=in.nextDouble();
y2=in.nextDouble();
color=in.next();
line.setpo1(x1,y1);
line.setpo2(x2,y2);
line.setco(color);
if(line.getpo1().getx()>200||line.getpo1().getx()<=0||line.getpo1().gety()>200||line.getpo1().gety()<=0||line.getpo2().getx()>200||line.getpo2().getx()<=0||line.getpo2().gety()>200||line.getpo2().gety()<=0)
{
System.out.println("Wrong Format");
}
else
{
line.Display();
}
}
}
3: 7-2 点线面问题重构(继承与多态):其中考试的第二题考了父类的继承和多态

其中点类与线类并没有太多差别,只是需要多写一个他们的共同父类Element,再写一个它的子类plane,这个子类只有一个属性,那就是私有属性颜色,除了构造方法和属性的getter、setter方法外,display()方法用于输出面的颜色,这些跟点和线的方法差不太多,所以也是很简单就可以写完,在主方法内,定义两个Point(线段的起点和终点)对象、一个Line对象和一个Plane对象,依次从键盘输入两个Point对象的起点、终点坐标和颜色值(Line对象和Plane对象颜色相同),然后定义一个Element类的引用,通element = p1;//起点Pointelement.display();elemen=p2;//Pointelement.display();element = line;//线段element.display();element = plane;//面element.display();即可实现多态的特性对于题目说的需要保留固定的小数使用String.format("%.2f", data)方法即可。一下是源码:
import java.util.Scanner;
class Point
{
private double x;
private double y;
Point()
{
this.x=x;
this.y=y;
}
public void setx(double x1)
{
this.x=x1;
}
public void sety(double y1)
{
this.y=y1;
}
public double getx()
{
return x;
}
public double gety()
{
return y;
}
public void display()
{
String zbx,zby;
zbx=String.format("%.2f", getx());
zby=String.format("%.2f", gety());
System.out.println("The line's begin point's Coordinate is:");
System.out.println("("+zbx+","+zby+")");
}
public void display1()
{
String zbx,zby;
zbx=String.format("%.2f", getx());
zby=String.format("%.2f", gety());
System.out.println("The line's end point's Coordinate is:");
System.out.println("("+zbx+","+zby+")");
}
public void display3()
{
String zbx,zby;
zbx=String.format("%.2f", getx());
zby=String.format("%.2f", gety());
System.out.println("("+zbx+","+zby+")");
}
}
class Line
{
private Point point1=new Point();
private Point point2=new Point();
private String color;
public Line()
{
this.point1=point1;
this.point2=point2;
this.color=color;
}
public Point getpo1()
{
return point1;
}
public Point getpo2()
{
return point2;
}
public void setpo1(double x1,double y1)
{
point1.setx(x1);
point1.sety(y1);
}
public void setpo2(double x1,double y1)
{
point2.setx(x1);
point2.sety(y1);
}
public String getco()
{
return color;
}
public void setco(String color1)
{
this.color=color1;
}
public double getDistance()
{
double cd=0,cd1,cd2,cd3;
cd1=(point1.gety()-point2.gety())*(point1.gety()-point2.gety());
cd2=(point1.getx()-point2.getx())*(point1.getx()-point2.getx());
cd3=cd1+cd2;
cd=Math.sqrt(cd3);
return cd;
}
public void Display()
{
point1.display3();
point2.display3();
System.out.println("The line's color is:"+getco());
point1.display();
point2.display1();
String dis;
dis=String.format("%.2f",getDistance());
System.out.println("The line's length is:"+dis);
System.out.println("The Plane's color is:"+getco());
}
}
public class Main {
static Line line = new Line();
public static void main(String[] args)
{
Scanner in=new Scanner(System.in);
double x1,y1,x2,y2;
String color;
x1=in.nextDouble();
y1=in.nextDouble();
x2=in.nextDouble();
y2=in.nextDouble();
color=in.next();
line.setpo1(x1,y1);
line.setpo2(x2,y2);
line.setco(color);
if(line.getpo1().getx()>200||line.getpo1().getx()<1||line.getpo1().gety()>200||line.getpo1().gety()<1)
{
System.out.println("Wrong Format");
}
else
{
line.Display();
}
}
}
4 :7-3 点线面问题再重构(容器类):第三题即在第二题的基础上增加一个容器来放三个类
奈何自己这方面的内容学的不是特别的好,所以第三题做的比较差在原有类设计的基础上,增加一个GeometryObject容器类,其属性为ArrayList<Element>类型的对象(若不了解泛型,可以不使用<Element>)增加该类的add()方法及remove(int index)方法,其功能分别为向容器中增加对象及删除第index - 1(ArrayList中index>=0)个对象所以第三题的内容比较少,很难讲出个所以然。
(3)采坑心得:

浙公网安备 33010602011771号