其他分享
首页 > 其他分享> > 学习总结

学习总结

作者:互联网

前言:

知识点:在最近的7到10周的学习中,笔者主要学习了java的一些重要语法以及特性。对于Java的多态特性有了更深的理解。同时对于static,final等各种关键字也熟悉了用途。

题量:总共进行了一次考试,数次题目集以及两个实验,题量为中等。

难度:部分题目难度偏难,难度为中等。

PTA:

图形卡片排序问题:

  本题要求用Java语言实现用于为学生所玩的游戏提供正确答案的功能,即根据学生得到的卡片种类与数量,给出 排序前和排序后的卡片顺序,同时给出所有卡片的面积之和。同时本作业要求本次作业要求对卡片排序时使用 Comparable 接口, 即 Card 类需要实现 Comparable 接口中的 CompareTo()方法。

设计与分析:本题给出部分类图,我按照类图实现代码,先将抽象类Shape类的代码完善,并将其中的getArea()以及validate的方法设为抽象方法用于子类重写,之后将各个图形卡片子类的代码完善,为实现题目对于Card类的要求,我需要在Card类中实现接口Comparable的CompareTo()方法,引入Compare包以接口后,按题目从大到小排序的要求,我将CompareTo()方法重写为参数的面积减去此类的面积。关键类为容器类DealCardList,为实现功能,建立了类型为Card的ArrayList容器。同时在其中实现排序方法,由于实现了CompareTo()方法,在cardSort()中之间调用Collections类的sort方法即可。

反思总结:本在题中,由于对于Comparable接口并不熟悉,我在网上查找资料后了解了CompareTo方法的使用,才得以实现程序功能。同时,为了程序的可扩展性,在Main类中直接实现了static的input输入方法,之后在其他类也要输入时,即可之间调用input.next()的方法,避免踩坑。

改进建议:多学习接口类知识,本题在指导书情况下完成,已有static的输入方法,在之后的学习,应积累经验,学会使用。

类图如下:

关键代码:

 

import java.util.Scanner;
import java.util.ArrayList;
import java.util.Collections;
import java.lang.Comparable;

 

public class Main {
//在Main类中定义一个静态Scanner对象,这样在其它类中如果想要使用该对象进行输入,则直接
//使用Main.input.next…即可(避免采坑)
public static Scanner input = new Scanner(System.in);
public static void main(String[] args){
ArrayList<Integer> list = new ArrayList<Integer>();
int num = input.nextInt();
while(num != 0){
if(num < 0 || num > 4){
System.out.println("Wrong Format");
System.exit(0);
}
list.add(num);
num = input.nextInt();
}
DealCardList dealCardList = new DealCardList(list);
if(!dealCardList.validate()){
System.out.println("Wrong Format");
System.exit(0);
}
dealCardList.showResult();
input.close();
}
}

图形卡片分组游戏2:

  沿袭作业 7-1,本次作业主要对卡片(Card)进行分组游戏,要求学生首先根据卡片类型将所有卡片进行分组(一个类型分为一组, 所以最多四组),然后能够对每组内的卡片根据面积值从大到小进行排序,同时求出该组内所有卡片 的面积之和,最后求出每组卡片面积之和中的最大值。

设计与分析:为实现题目要求,在原代码的基础上,需要改写输入格式,我在Main里使用循环输入,直到输入为0时,调用input.close()方法。同时在输出的格式需要修改,在DealCardList类中新定义一个showSeparate()方法,用于输出分组后的结果。同时在该类中建立四个ArrayList新容器属性用于存放四种卡片类型,在调用构造方法时,使用四个ArrayList新容器用于存放四种卡片类型,使得可以用于区分组别。

反思总结:在输出时输出格式错误,debug时发现构造方法中的调用数组类型错误。

改进建议:对于DealCardList类的四种类型容器,应该使用父类作为对象,符合Java的向上造型特性,同时可以只建立一个数组容器,通过下标来区分类型,使得代码的扩展性大大提高,之后增加新类型,能够不用在建立新的类型数组。

关键代码:

 

public DealCardList(ArrayList<Integer> list) {
for (int i = 0;i < list.size();i++) {
switch (list.get(i)) {
case 1 :
cardList.add(new Card(new Circle(Main.input.nextDouble())));
cardList.get(i).getShape().setShapeName("Circle");
circleList.add(cardList.get(i));
break;
case 2 :
cardList.add(new Card(new Rectangle(Main.input.nextDouble(),Main.input.nextDouble())));
cardList.get(i).getShape().setShapeName("Rectangle");
RecList.add(cardList.get(i));
break;
case 3 :
cardList.add(new Card(new Triangle(Main.input.nextDouble(),Main.input.nextDouble(),Main.input.nextDouble())));
cardList.get(i).getShape().setShapeName("Triangle");
TriList.add(cardList.get(i));
break;
case 4 :
cardList.add(new Card(new Trapezoid(Main.input.nextDouble(),Main.input.nextDouble(),Main.input.nextDouble())));
cardList.get(i).getShape().setShapeName("Trapezoid");
TrapList.add(cardList.get(i));
break;
}
}
}

点线形系列-线的计算

  本题用户输入一组选项和数据,进行与直线有关的计算。选项包括:1:输入两点坐标,计算斜率,若线条垂直于X轴,输出"Slope does not exist"。2:输入三个点坐标,输出第一个点与另外两点连线的垂直距离。3:输入三个点坐标,判断三个点是否在一条线上,输出true或者false。4:输入四个点坐标,判断前两个点所构成的直线与后两点构成的直线是否平行,输出true或者false.5:输入四个点坐标,计算输出前两个点所构成的直线与后两点构成的直线的交点坐标,x、y坐标之间以英文分隔",",并输出交叉点是否在两条线段之内(不含四个端点)的判断结果(true/false),判断结果与坐标之间以一个英文空格分隔。若两条线平行,没有交叉点,则输出"is parallel lines,have no intersection point"。

设计与分析:本题不需要测试多组数据,我直接采用一个输入接受一个字符串,首先对字符串的前两个字符进行截取,进行判断,若不符合要求,则输出Wrong Format,同时建立getData()方法,使用动态数组,接受数组,通过循环,截取字符串存入动态数组,在利用循环,将字符串转化为double型。在main方法中通过switch判断,在各个判断里通过正则表达式判断是否符合基本格式,若不符合则输出Wrong Format。在通过方法判断是否符合相应个数,若不符合则输出wrong number of points,再对每个数据进行判断是否相等,是则输出points coincide。建立各getArea()等方法实现各个功能。

反思总结:

 

标签:总结,cardList,卡片,学习,add,new,input,Main
来源: https://www.cnblogs.com/lcz1124/p/16213750.html