第三次博客作业
挺快的吧,在不知不觉当中就已经快要接近到学期的末尾了,而我的这门课程也快要结束了,当然呢,在这个月当中,我也学习和收获到了不少知识,接下来就让我来总结一下我这个月的学习当中所遇到的问题以及得到的学习心得。
1.前言:说实话吧,其实这个月刚刚开始第一次的题目集(也就是题目集07)的时候我觉得我还是挺有信心和把握可以完成好的。因为我看完题目之后并没有感觉到它有多难,也就是自己可以应对的过来吧,但是我万万没有想到的是在这次作业的第二道题目上给我心态整懵逼了,因为我的代码是没有任何问题的,在我的编译器上面运行测试,所有的测试点都可以通过,但是当我把我的代码转移的PTA上面去提交的时候戏剧性的一幕发生了,我擦,它提示我说你的代码长度超过限制,我人都当场去世,直接裂开,然后经过了一系列删减之后它依旧还是提示我说代码过长。当时也挺绝望的,我一开始的信心也受到了打击,也就导致了后两次的题目集做的不是很好。所以说我想要吐槽这一点,也希望在以后的题目集当中不要再有这种情况发生了。
下面就来说一说这几次的题目集所涉及到的知识点:
题目集07:掌握类的继承、多态性使用方法以及接口的应用。
题目集08:重点考核类的封装性及类间关系设计(关联、组合及依赖)。
题目集09:重点训练内容为抽象类、继承与多态。
2.具体分析:
①题目集7-1—-图形卡片排序游戏
输入格式:
-
首先,在一行上输入一串数字(1~4,整数),其中,1代表圆形卡片,2代表矩形卡片,3代表三角形卡片,4代表梯形卡片。各数字之间以一个或多个空格分隔,以“0”结束。例如:
1 3 4 2 1 3 4 2 1 3 0
-
然后根据第一行数字所代表的卡片图形类型,依次输入各图形的相关参数,例如:圆形卡片需要输入圆的半径,矩形卡片需要输入矩形的宽和长,三角形卡片需要输入三角形的三条边长,梯形需要输入梯形的上底、下底以及高。各数据之间用一个或多个空格分隔。
输出格式:
-
如果图形数量非法(小于0)或图形属性值非法(数值小于0以及三角形三边不能组成三角形),则输出
Wrong Format
。 -
如果输入合法,则正常输出,所有数值计算后均保留小数点后两位即可。输出内容如下:
-
排序前的各图形类型及面积,格式为
图形名称1:面积值1图形名称2:面积值2 …图形名称n:面积值n
,注意,各图形输出之间用空格分开,且输出最后存在一个用于分隔的空格; -
排序后的各图形类型及面积,格式同排序前的输出;
-
所有图形的面积总和,格式为
Sum of area:总面积值
。
代码如下:
import java.util.ArrayList; import java.util.Scanner; import java.util.TreeSet; import java.util.Collections; public class Main {
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();
}
}
class DealCardList {
ArrayList<Card> cardList = new ArrayList<Card>();
public DealCardList() {
super();
// TODO 自动生成的构造函数存根
}
DealCardList(ArrayList<Integer> list){
for(int i = 0; i < list.size(); i++) {
if(list.get(i) == 1) {
double radius = Main.input.nextDouble();
Circle circle = new Circle();
circle.setRadius(radius);
Card card = new Card(circle);
card.getShape().setShapeName("Circle");
cardList.add(card);
}
if(list.get(i) == 2) {
double weidth = Main.input.nextDouble();
double length = Main.input.nextDouble();
Rectangle rectangle = new Rectangle();
rectangle.setWidth(weidth);
rectangle.setHeight(length);
Card card = new Card(rectangle);
card.getShape().setShapeName("Rectangle");
cardList.add(card);
}
if(list.get(i) == 3) {
double side1 = Main.input.nextDouble();
double side2 = Main.input.nextDouble();
double side3 = Main.input.nextDouble();
Triangle triangle = new Triangle();
triangle.setSide1(side1);
triangle.setSide2(side2);
triangle.setSide3(side3);
Card card = new Card(triangle);
card.getShape().setShapeName("Triangle");
cardList.add(card);
}
if(list.get(i) == 4) {
double topSide = Main.input.nextDouble();
double bottomSide = Main.input.nextDouble();
double height = Main.input.nextDouble();
Trapezoid trapezoid = new Trapezoid();
trapezoid.setTopSide(topSide);
trapezoid.setBottomSide(bottomSide);
trapezoid.setHeight(height);
Card card = new Card(trapezoid);
card.getShape().setShapeName("Trapezoid");
cardList.add(card);
}
}
}
public boolean validate(){
boolean a = true;
for (Card card : cardList) {
if (card.getShape().validate()){
a = true;
break;
}
}
return a;
}
public void cardSort() {
for(int i = 0;i < cardList.size(); i++)
for(int j = i + 1; j < cardList.size(); j++)
{
if(cardList.get(i).getShape().getArea() < cardList.get(j).getShape().getArea())
Collections.swap(cardList, i, j);
}
}
public double getAllArea(){
double sumArea =0;
for (Card card : cardList){
sumArea = sumArea + card.getShape().getArea();
}
return sumArea;
}
public void showResult() {
System.out.println("The original list:");
for(int i=0;i<cardList.size();i++) {
System.out.print( cardList.get(i).getShape().getShapeName()+":");
System.out.printf("%.2f", cardList.get(i).getShape().getArea());
System.out.printf(" ");
}