作业总结
一. 前言
最近阶段的练习,总体而言,越来越难,四边形的计算 五边形的计算让我感觉很困难,有种无从下手的感觉。学习java以来,头一次感觉java这么难。最近的几次作业,所涉及的知识点仍然包含正则表达式的运用,然后就是继承于多态以及父类与子类。从题量上来说,题目量虽然不是很大,每次都是两三道题目,但是难度确实比较大。有时候花几个小时做一道题目都拿不了多少分。对于各种解题技巧我并不是很会,只是老老实实的按照最普通的方法写。
1.三次作业总结
(1)第四次作业
第四次作业的第一道题目还算比较简单,只是提取每一行的数字相加,只需要用正则表达式去取出所有的数,然后进行相加就好。
第二道题目则是四边形的计算,说实话,不太会写。总觉得没有头绪,无从下手,不知道怎么设计方法。
第三道题目则是考察属性和方法,中规中矩,只需要好好设计方法,然后对属性了解,知道怎么运用,然后通过一些正常方法去把他们串在一起就好。
(2)第五次作业
第五次作业一共只有两道题,但是让我觉得头皮发麻,都是关于五边形的运算。与第四作业中的第二题类似。先设计出所需要的方法,点可以设计容器,用容器储存,使用父类与子类的知识点,去设计思路。这样是会方便很多,但不太好操作,知识点用多了总会莫名其妙的报错,但这样确实方便很多,不需要通篇的去修改题目,只需要改一个地方,所有地方都会改变。
(3)期中考试
期中考试一共三道题目,主要是考察对父类与子类的知识点,然后是继承与多态,最后是容器。这三个知识点一共三道题目,每道题都上升一个层次,最后将所有知识点串在一起,这三道题目难度不是很大,因为题目已经把所有的类图写好了,只需要根据类图去写代码就好,不用思考怎么设计方法。但是测试点比较多,还是比较难过的。
二.设计与分析
第四次作业的第三题
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()方法。
期中考试第一题
代码如下
import java.util.Scanner;
public class Main {
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();
if(x1<=0||x1>200||x2<=0||x2>200||y1<=0||y1>200||y2<=0||y2>200)
{
System.out.println("Wrong Format");
}
else
{
Point p1 = new Point(x1,y1);
Point p2 = new Point(x2,y2);
Line line =new Line(p1,p2,color);
line.display();
}
}
}
class Point{
Double x,y;
Point(){
}
Point(Double x,Double y)
{
this.x=x;
this.y=y;
}
Double getX()
{
return x;
}
void setX(double x)
{
this.x=x;
}
Double getY()
{
return y;
}
void setY(double y)
{
this.y=y;
}
void display()
{
System.out.println("("+String.format("%.2f",x)+","+String.format("%.2f",y)+")");
}
}
class Line{
Point point1,point2;
String color;
Line()
{
}
Line(Point p1,Point p2,String color)
{
this.point1=p1;
this.point2=p2;
this.color=color;
}
Point getPoint1()
{
point1.x= point1.getX();
point1.y= point1.getY();
return point1;
}
void stePoint1(Point Point1)
{
this.point1=Point1;
}
Point getPoint2()
{
point2.x= point2.getX();
point2.y= point2.getY();
return point2;
}
void stePoint2(Point Point2)
{
this.point2=Point2;
}
String getColor()
{
return color;
}
void SetColor(String color)
{
this.color=color;
}
double Getdistance()
{
double date = Math.sqrt(((point1.x - point2.x) * (point1.x - point2.x) + (point1.y - point2.y) * (point1.y - point2.y)));
return date;
}
void display()
{
System.out.println("The line's color is:" + color);
System.out.println("The line's begin point's Coordinate is:");
point1.display();
System.out.println("The line's end point's Coordinate is:");
point2.display();
System.out.println("The line's length is:" +String.format("%.2f",Getdistance()));
}
}
期中考试第二题
代码如下
import java.util.Scanner;
public class Main {
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();
if(x1<=0||x1>200||x2<=0||x2>200||y1<=0||y1>200||y2<=0||y2>200)
{
System.out.println("Wrong Format");
}
else
{
Point p1 = new Point(x1,y1);
Point p2 = new Point(x2,y2);
Line line =new Line(p1,p2,color);
Plnae plane = new Plnae(color);
Element element = p1;//起点Point
element.display();
element = p2;//终点Point
element.display();
element = line;//线段
element.display();
element = plane;//面
element.display();
}
}
}
abstract class Element{
public abstract void display();
}
class Plnae extends Element{
String color;
Plnae(String color){
this.color=color;
}
Plnae(){
}
public String getColor(){
return color;
}
public void setColor(String color){
this.color=color;
}
public void display(){
System.out.println("The line's color is:"+color);
}
}
class Point extends Element{
Double x,y;
Point(){
}
Point(Double x,Double y)
{
this.x=x;
this.y=y;
}
Double getX()
{
return x;
}
void setX(double x)
{
this.x=x;
}
Double getY()
{
return y;
}
void setY(double y)
{
this.y=y;
}
public void display()
{
System.out.println("("+String.format("%.2f",x)+","+String.format("%.2f",y)+")");
}
}
class Line extends Element{
Point point1,point2;
String color;
Line()
{
}
Line(Point p1,Point p2,String color)
{
this.point1=p1;
this.point2=p2;
this.color=color;
}
Point getPoint1()
{
point1.x= point1.getX();
point1.y= point1.getY();
return point1;
}
void stePoint1(Point Point1)
{
this.point1=Point1;
}
Point getPoint2()
{
point2.x= point2.getX();
point2.y= point2.getY();
return point2;
}
void stePoint2(Point Point2)
{
this.point2=Point2;
}
String getColor()
{
return color;
}
void SetColor(String color)
{
this.color=color;
}
double Getdistance()
{
double date = Math.sqrt(((point1.x - point2.x) * (point1.x - point2.x) + (point1.y - point2.y) * (point1.y - point2.y)));
return date;
}
public void display()
{
System.out.println("The line's color is:" + color);
System.out.println("The line's begin point's Coordinate is:");
point1.display();
System.out.println("The line's end point's Coordinate is:");
point2.display();
System.out.println("The line's length is:" +String.format("%.2f",Getdistance()));
}
}
期中考试第三题
代码如下
import java.util.ArrayList;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int choice;
choice = in.nextInt();
GeometryObject aa = new GeometryObject();
while(choice != 0) {
switch(choice) {
case 1://insert Point object into list
Point p = new Point(in.nextDouble(),in.nextDouble());
aa.add(p);
break;
case 2://insert Line object into list
Point p1 = new Point(in.nextDouble(),in.nextDouble());
Point p2 = new Point(in.nextDouble(),in.nextDouble());
Line line =new Line(p1,p2,in.next());
aa.add(line);
break;
case 3://insert Plane object into list
Plane plane = new Plane(in.next());
aa.add(plane);
break;
case 4://delete index - 1 object from list
int index = in.nextInt();
aa.remove(index);
}
choice = in.nextInt();
}
for(Element k:aa.getList()) {
k.display();
}
}
}
class GeometryObject{
ArrayList<Element> x = new ArrayList<Element>();
public void add(Element element)
{
x.add(element);
}
public void remove(int index)
{
x.remove(index);
}
public ArrayList<Element> getList(){
return x;
}
}
abstract class Element{
public abstract void display();
}
class Plane extends Element{
String color;
Plane(String color){
this.color=color;
}
Plane(){
}
public String getColor(){
return color;
}
public void setColor(String color){
this.color=color;
}
public void display(){
System.out.println("The line's color is:"+color);
}
}
class Point extends Element{
Double x,y;
Point(){
}
Point(Double x,Double y)
{
this.x=x;
this.y=y;
}
Double getX()
{
return x;
}
void setX(double x)
{
this.x=x;
}
Double getY()
{
return y;
}
void setY(double y)
{
this.y=y;
}
public void display()
{
if(x<=0||x>200||y<=0||y>200)
{
System.out.println("Wrong Format");
System.exit(0);
}
System.out.println("("+String.format("%.2f",x)+","+String.format("%.2f",y)+")");
}
}
class Line extends Element{
Point point1,point2;
String color;
Line()
{
}
Line(Point p1,Point p2,String color)
{
this.point1=p1;
this.point2=p2;
this.color=color;
}
Point getPoint1()
{
point1.x= point1.getX();
point1.y= point1.getY();
return point1;
}
void stePoint1(Point Point1)
{
this.point1=Point1;
}
Point getPoint2()
{
point2.x= point2.getX();
point2.y= point2.getY();
return point2;
}
void stePoint2(Point Point2)
{
this.point2=Point2;
}
String getColor()
{
return color;
}
void SetColor(String color)
{
this.color=color;
}
double Getdistance()
{
double date = Math.sqrt(((point1.x - point2.x) * (point1.x - point2.x) + (point1.y - point2.y) * (point1.y - point2.y)));
return date;
}
public void display()
{
if(point1.x<=0||point1.x>200||point1.y<=0||point1.y>200||point2.x<=0||point2.x>200||point2.y<=0||point2.y>200)
{
System.out.println("Wrong Format");
System.exit(0);
}
System.out.println("The line's color is:" + color);
System.out.println("The line's begin point's Coordinate is:");
point1.display();
System.out.println("The line's end point's Coordinate is:");
point2.display();
System.out.println("The line's length is:" +String.format("%.2f",Getdistance()));
}
}
对于期中考试的三道题目而言
主要运用到的知识点就是类的设计,继承于多态,还有父类与子类。
什么是类?类就是用来创建对象的。在面向对象程序设计中,类(class)是一种面向对象计算机编程语言的构造,是创建对象的蓝图,描述了所创建的对象共同的属性和方法。
那么子类与父类呢?
子类和父类的概念是在继承中才会有的,继承的前提是 is-a 原则,比如:Student is a Person,那么我们就可以表示为Student extends Person。
子类又叫派生类,子类一定具有父类的全部属性与行为,并且拥有的属性更多,具体的行为更加丰富,表示的范围更小;父类又名超类。
子类对象在进行实例化之前一定会首先实例化父类对象,先有父类对象才有子类对象,即先调用父类的构造方法之后再调用子类构造方法!
子类在继承父类时会继承父类的所有结构 (包括私有属性、构造方法、普通方法)
① 隐式继承:父类中所有的私有域(私有属性、方法 private),子类不能直接使用 – 属性可以setter/getter,然而方法则没辙。
② 显示继承:所有的非私有域属于显示继承,子类对象可以直接调用。
继承(inheritance) 机制是面向对象程序设计使代码可以复用的最重要的手段,它允许程序员在保持原有类特性的基础.上进行扩展,增加功能。这样产生新的类,称派生类。继承呈现了面向对象程序设计的层次结构。体现了由简单到复杂的认识过程。
多态性(polymorphism) 多态性是考虑在不同层次的类中,以及在同一类中,同名的成员函数之间的关系问题。函数的重载,运算符的重载,属于编译时的多态性。以虚基类为基础的运行时的多态性是面向对象程序设计的标志题。函数的重载,运算符的重载,属于编译时的多态性。以虚基类为基础的运行时的多态性是面向对象程序设计的标志。
三.踩坑心得
对于这几次作业的一个坑点,我觉得就是一开始要好好的设计类图,然后通过类图去设计方法,这样比较方便也不会随意出错。要好好运用父类与子类的特点,这样可以减少重复的代码,提高写代码的效率,并且在后期维护或者说修改代码的时候可以方便很多。然后在类多了以后要清楚各个类的对象是否通用,很容易出错,或者是这个成员变量是否通用,要清楚父类与子类的关系。
四.改进建议
对于前这三次作业而言,我的代码一般都是大家的惯性思维,由于怕出错,所以都写得比较常规,有些题目确实有更简单的思路,但是我不知道怎么去运用哪些方法,可能是知识量储备的比较少吧。例如第五次作业的题目,可以用正则表达式去筛选出输入格式错误的情况,但是我是把输入错误的情况一一表达出来,然后通过判断语句去解决。首先是对正则表达式认知的不到位,不知道怎么去正确使用正则表达式去筛选出输入格式错误的地方,如果将这个点弄明白的话,代码的复杂程度就会降低很多。然后对于其中考试的题目,我认为还可以做到一部分代码简化,去优化一下代码,提高使用效率。
五.总结
通过这三次的习题练习,我学到了挺多的东西。
比如说继承与多态,继承(inheritance) 机制是面向对象程序设计使代码可以复用的最重要的手段,它允许程序员在保持原有类特性的基础.上进行扩展,增加功能。这样产生新的类,称派生类。继承呈现了面向对象程序设计的层次结构。体现了由简单到复杂的认识过程。
多态性(polymorphism) 多态性是考虑在不同层次的类中,以及在同一类中,同名的成员函数之间的关系问题。函数的重载,运算符的重载,属于编译时的多态性。以虚基类为基础的运行时的多态性是面向对象程序设计的标志题。函数的重载,运算符的重载,属于编译时的多态性。以虚基类为基础的运行时的多态性是面向对象程序设计的标志。
子类与父类
子类和父类的概念是在继承中才会有的,继承的前提是 is-a 原则,比如:Student is a Person,那么我们就可以表示为Student extends Person。
子类又叫派生类,子类一定具有父类的全部属性与行为,并且拥有的属性更多,具体的行为更加丰富,表示的范围更小;父类又名超类。
子类对象在进行实例化之前一定会首先实例化父类对象,先有父类对象才有子类对象,即先调用父类的构造方法之后再调用子类构造方法!
子类在继承父类时会继承父类的所有结构 (包括私有属性、构造方法、普通方法)
隐式继承:父类中所有的私有域(私有属性、方法 private),子类不能直接使用 – 属性可以setter/getter,然而方法则没辙。
显示继承:所有的非私有域属于显示继承,子类对象可以直接调用。

浙公网安备 33010602011771号