题目集7~9的总结性Blog

前言

 

作为Java的最后一次博客作业,意味着本学期的Java学习已经进入尾声。题目集7~9主要是关于以前的知识,比如Comparable、Comparator 接口的应用以及如何去设计类,让程序更加清楚明了。这几次pta作业题目数量不多,但是比较繁琐,难度还行。细节方面需要多去推敲,才能顺利通过测试点。

设计与分析

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:面积值1图形名称2:面积值2 …图形名称n:面积值n ,注意,各图形输出之间用空格分开,且输出最后存在一个用于分隔的空格;
  2. 排序后的各图形类型及面积,格式同排序前的输出;
  3. 所有图形的面积总和,格式为Sum of area:总面积值

 

类图如下

 

这次作业运用了Java 的三大特征之一的继承,让代码更加简单明了,去除掉冗余部分。在本次代码中我运用到了Comparator接口,代码如下:

 

 该方法通过比较面积的大小来进行图形的排序。

源代码如下

import java.util.*;

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() {

    }

    public DealCardList(ArrayList<Integer> list) {
        for(int i=0;i<list.size();i++)
        {
            if(list.get(i)==0)
                break;
            if(list.get(i)==1)
            {
                Card card1=new Card(new Circle(Main.input.nextDouble()));
                card1.getShape().setShapeName("Circle");
                cardList.add(card1);
            }
            if(list.get(i)==2)
            {
                Card card2=new Card(new Rectangle(Main.input.nextDouble(),Main.input.nextDouble()));
                card2.getShape().setShapeName("Rectangle");
                cardList.add(card2);
            }
            if(list.get(i)==3)
            {
                Card card3=new Card(new Triangle(Main.input.nextDouble(),Main.input.nextDouble(),Main.input.nextDouble()));
                card3.getShape().setShapeName("Triangle");
                cardList.add(card3);
            }
            if(list.get(i)==4)
            {
                Card card4=new Card(new Trapezoid(Main.input.nextDouble(),Main.input.nextDouble(),Main.input.nextDouble()));
                card4.getShape().setShapeName("Trapezoid");
                cardList.add(card4);
            }
        }

    }

    public boolean validate(){
        int flag=0;
        for(int i=0;i<cardList.size();i++)
        {
            if(cardList.get(i).getShape().validate())
                flag=0;
            else
            {
                flag=1;
                break;
            }
        }
        if(flag==0)
            return true;
        else
            return false;

    }
    public void cardSort(){
        Collections.sort(cardList, new Comparator<Card>() {
            @Override
            public int compare(Card o1, Card o2) {
                if(o1.getShape().getArea()<=o2.getShape().getArea())
                    return 1;
                else
                    return -1;

            }
        });

    }
    public double getAllArea(){
        double sum=0;
        for(int i=0;i<cardList.size();i++)
        {
            sum=sum+cardList.get(i).getShape().getArea();
        }
        return sum;
    }
    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()+":"+String.format("%.2f",cardList.get(i).getShape().getArea())+" ");
        }
        System.out.println("\nThe sorted list:" );
        cardSort();
        for(int i=0;i<cardList.size();i++)
        {
            System.out.print(cardList.get(i).getShape().getShapeName()+":"+String.format("%.2f",cardList.get(i).getShape().getArea())+" ");
        }
        System.out.print("\nSum of area:"+String.format("%.2f",getAllArea()));
    }
}


class Card{
    private Shape shape;
    public Card(){

    }
    public Card(Shape shape){
        this.shape=shape;
    }

    public Shape getShape() {
        return shape;
    }
    public void setShape(Shape shape) {
        this.shape = shape;
    }

}


abstract class Shape{
    private String shapeName;
    public double getArea(){
        return 0.0;
    }
    public boolean validate(){
        return true;
    }

    public String getShapeName() {
        return shapeName;
    }

    public void setShapeName(String shapeName) {
        this.shapeName = shapeName;
    }
}

class Circle extends Shape{
    private double radius;
    public  Circle(){

    }
    public  Circle(double radius){
        this.radius=radius;
    }
    public void setRadius(double radius){
        this.radius=radius;
    }

    public double getRadius() {
        return radius;
    }
    public boolean validate(){
        if(this.radius<=0)
            return false;
        else
            return true;
    }
    public double getArea(){
        return radius*radius*Math.PI;
    }
}

class Rectangle extends Shape{
    private double width;
    private double length;
    public  Rectangle(){

    }
    public  Rectangle(double width,double length){
        this.length=length;
        this.width=width;
    }
    public void setWidth(double width){
        this.width=width;
    }

    public double getWidth() {
        return width;
    }

    public double getLength() {
        return length;
    }

    public void setLength(double length) {
        this.length = length;
    }
    public boolean validate(){
        if(this.width<0||this.length<0)
            return false;
        else
            return true;
    }
    public double getArea(){
        return width*length;
    }
}

class Triangle extends Circle{
    private double side1;
    private double side2;
    private double side3;
    public  Triangle(){

    }
    public  Triangle(double side1,double side2,double side3){
        this.side1=side1;
        this.side2=side2;
        this.side3=side3;

    }
    public double getSide1() {
        return side1;
    }

    public void setSide1(double side1) {
        this.side1 = side1;
    }

    public double getSide2() {
        return side2;
    }

    public void setSide2(double side2) {
        this.side2 = side2;
    }

    public double getSide3() {
        return side3;
    }

    public void setSide3(double side3) {
        this.side3 = side3;
    }

    public boolean validate(){
        if(this.side1<0||this.side2<0||this.side3<0)
            return false;
        else
        {
            if((side1+side2)>side3&&(side1+side3)>side2&&(side3+side2)>side1&&(side1-side2)<side3&&(side1-side3)<side2&&(side3-side2)<side1&&(side2-side1)<side3&&(side3-side1)<side2&&(side2-side3)<side1)
                return true;
            else
                return false;
        }
    }
    public double getArea(){
        double p;
        p=(side1+side3+side2)/2;
        return Math.sqrt(p*(p-side1)*(p-side2)*(p-side3));
    }

}
class Trapezoid extends Shape{
    private double topSide;
    private double bottomSide;
    private double height;
    public Trapezoid(){

    }
    public Trapezoid(double topSide,double bottomSide,double height){
        this.topSide=topSide;
        this.bottomSide=bottomSide;
        this.height=height;
    }
    public boolean validate(){
        if(this.height<0||this.bottomSide<0||this.topSide<0)
            return false;
        else
            return true;
    }
    public double getArea(){
        return ((bottomSide+topSide)*height)/2;
    }
}

  7-2 图形卡片分组游戏

输入格式:

  • 在一行上输入一串数字(1~4,整数),其中,1代表圆形卡片,2代表矩形卡片,3代表三角形卡片,4代表梯形卡片。各数字之间以一个或多个空格分隔,以“0”结束。例如:1 3 4 2 1 3 4 2 1 3 0
  • 根据第一行数字所代表的卡片图形类型,依次输入各图形的相关参数,例如:圆形卡片需要输入圆的半径,矩形卡片需要输入矩形的宽和长,三角形卡片需要输入三角形的三条边长,梯形需要输入梯形的上底、下底以及高。各数据之间用一个或多个空格分隔。

输出格式:

  • 如果图形数量非法(<=0)或图形属性值非法(数值<0以及三角形三边不能组成三角形),则输出Wrong Format
  • 如果输入合法,则正常输出,所有数值计算后均保留小数点后两位即可。输出内容如下:
  1. 排序前的各图形类型及面积,格式为[图形名称1:面积值1图形名称2:面积值2 …图形名称n:面积值n ],注意,各图形输出之间用空格分开,且输出最后存在一个用于分隔的空格,在结束符“]”之前;
  2. 输出分组后的图形类型及面积,格式为[圆形分组各图形类型及面积][矩形分组各图形类型及面积][三角形分组各图形类型及面积][梯形分组各图形类型及面积],各组内格式为图形名称:面积值。按照“Circle、Rectangle、Triangle、Trapezoid”的顺序依次输出;
  3. 各组内图形排序后的各图形类型及面积,格式同排序前各组图形的输出;
  4. 各组中面积之和的最大值输出,格式为The max area:面积值

 这题在上一题的基础上多增加了几个Arraylsit数组如下

 来对输入的数据进行分类。

同时在上题的基础上我多写了一个show方法来减少代码的重复量如下

 

7-3 ATM机类结构设计(一)

输入格式:

每一行输入一次业务操作,可以输入多行,最终以字符#终止。具体每种业务操作输入格式如下:

  • 存款、取款功能输入数据格式: 卡号 密码 ATM机编号 金额(由一个或多个空格分隔), 其中,当金额大于0时,代表取款,否则代表存款。
  • 查询余额功能输入数据格式: 卡号

输出格式:

①输入错误处理

  • 如果输入卡号不存在,则输出Sorry,this card does not exist.
  • 如果输入ATM机编号不存在,则输出Sorry,the ATM's id is wrong.
  • 如果输入银行卡密码错误,则输出Sorry,your password is wrong.
  • 如果输入取款金额大于账户余额,则输出Sorry,your account balance is insufficient.
  • 如果检测为跨行存取款,则输出Sorry,cross-bank withdrawal is not supported.

②取款业务输出

输出共两行,格式分别为:

[用户姓名]在[银行名称]的[ATM编号]上取款¥[金额]

当前余额为¥[金额]

其中,[]说明括起来的部分为输出属性或变量,金额均保留两位小数。

③存款业务输出

输出共两行,格式分别为:

[用户姓名]在[银行名称]的[ATM编号]上存款¥[金额]

当前余额为¥[金额]

其中,[]说明括起来的部分为输出属性或变量,金额均保留两位小数。

④查询余额业务输出

¥[金额]

金额保留两位小数。

类图如下

在本次代码的设计上我用account类来存储用户信息,由于题目的特殊要求我直接把密码设置为8个8,当然要用户自定义也没有问题,同时把银行账号存到一个数组中。

 

在bank类中存下了银行名称,以及银行相对应的atm机编号。

 

 在bankaccount类中存储了账户的余额,银行卡号,同时在这个类进行存钱,取钱。

 

 

7-1 ATM机类结构设计(二)

输入格式:

每一行输入一次业务操作,可以输入多行,最终以字符#终止。具体每种业务操作输入格式如下:

  • 取款功能输入数据格式: 卡号 密码 ATM机编号 金额(由一个或多个空格分隔)
  • 查询余额功能输入数据格式: 卡号

输出格式:

①输入错误处理

  • 如果输入卡号不存在,则输出Sorry,this card does not exist.
  • 如果输入ATM机编号不存在,则输出Sorry,the ATM's id is wrong.
  • 如果输入银行卡密码错误,则输出Sorry,your password is wrong.
  • 如果输入取款金额大于账户余额,则输出Sorry,your account balance is insufficient.

②取款业务输出

输出共两行,格式分别为:

业务:取款 [用户姓名]在[银行名称]的[ATM编号]上取款¥[金额]

当前余额为¥[金额]

其中,[]说明括起来的部分为输出属性或变量,金额均保留两位小数。

③查询余额业务输出

业务:查询余额 ¥[金额]

金额保留两位小数。

本题与上题类图相差不大,在上题的基础了增加了一些属性。

 源代码如下

import javax.swing.*;
import java.util.ArrayList;
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        Acount ID[] = new Acount[8];
        ID[0]=new Acount("杨过", "中国建设银行");
        ID[1]=new Acount("郭靖", "中国建设银行");
        ID[2]=new Acount("张无忌", "中国工商银行");
        ID[3]=new Acount("韦小宝", "中国工商银行");
        ID[4]=new Acount("张三丰", "中国建设银行");
        ID[5]=new Acount("令狐冲", "中国工商银行");
        ID[6]=new Acount("乔峰", "中国农业银行");
        ID[7]=new Acount("洪七公", "中国农业银行");

        ID[0].getBank().getAtm().add("01");
        ID[0].getBank().getAtm().add("02");
        ID[0].getBank().getAtm().add("03");
        ID[0].getBank().getAtm().add("04");

        ID[1].getBank().getAtm().add("01");
        ID[1].getBank().getAtm().add("02");
        ID[1].getBank().getAtm().add("03");
        ID[1].getBank().getAtm().add("04");

        ID[2].getBank().getAtm().add("05");
        ID[2].getBank().getAtm().add("06");

        ID[3].getBank().getAtm().add("05");
        ID[3].getBank().getAtm().add("06");

        ID[4].getBank().getAtm().add("01");
        ID[4].getBank().getAtm().add("02");
        ID[4].getBank().getAtm().add("03");
        ID[4].getBank().getAtm().add("04");

        ID[5].getBank().getAtm().add("05");
        ID[5].getBank().getAtm().add("06");

        ID[6].getBank().getAtm().add("07");
        ID[6].getBank().getAtm().add("08");
        ID[6].getBank().getAtm().add("09");
        ID[6].getBank().getAtm().add("10");
        ID[6].getBank().getAtm().add("11");

        ID[7].getBank().getAtm().add("07");
        ID[7].getBank().getAtm().add("08");
        ID[7].getBank().getAtm().add("09");
        ID[7].getBank().getAtm().add("10");
        ID[7].getBank().getAtm().add("11");

        ID[0].setbanknumber(0,"3217000010041315709");
        ID[0].getbanknumber(0).setType(1);
        ID[0].setbanknumber(1,"3217000010041315715");
        ID[0].getbanknumber(1).setType(1);
        ID[0].getbanknumber(0).setcardnumber(0,"6217000010041315709");
        ID[0].getbanknumber(0).setcardnumber(1,"6217000010041315715");
        ID[0].getbanknumber(1).setcardnumber(0,"6217000010041315718");

        ID[1].setbanknumber(0, "3217000010051320007 ");
        ID[1].getbanknumber(0).setType(1);
        ID[1].getbanknumber(0).setcardnumber(0,"6217000010051320007");

        ID[2].setbanknumber(0, "3222081502001312389");
        ID[2].getbanknumber(0).setType(1);
        ID[2].setbanknumber(1, "3222081502001312390");
        ID[2].getbanknumber(1).setType(1);
        ID[2].setbanknumber(2, "3222081502001312399");
        ID[2].getbanknumber(2).setType(1);
        ID[2].getbanknumber(0).setcardnumber(0, "6222081502001312389");
        ID[2].getbanknumber(1).setcardnumber(0, "6222081502001312390");
        ID[2].getbanknumber(2).setcardnumber(0, "6222081502001312399");
        ID[2].getbanknumber(2).setcardnumber(1, "6222081502001312400");

        ID[3].setbanknumber(0, "3222081502051320785");
        ID[3].getbanknumber(0).setType(1);
        ID[3].setbanknumber(1, "3222081502051320786");
        ID[3].getbanknumber(1).setType(1);
        ID[3].getbanknumber(0).setcardnumber(0, "6222081502051320785");
        ID[3].getbanknumber(1).setcardnumber(0, "6222081502051320786");

        ID[4].setbanknumber(0, "3640000010045442002");

        ID[4].getbanknumber(0).setcardnumber(0, "6640000010045442002");
        ID[4].getbanknumber(0).setcardnumber(1, "6640000010045442003");

        ID[5].setbanknumber(0, "3640000010045441009");
        ID[5].getbanknumber(0).setcardnumber(0, "6640000010045441009");

        ID[6].setbanknumber(0, "3630000010033431001");
        ID[6].getbanknumber(0).setcardnumber(0, "6630000010033431001");

        ID[7].setbanknumber(0, "3630000010033431008");
        ID[7].getbanknumber(0).setcardnumber(0, "6630000010033431008");
        ArrayList<Check> list=new ArrayList<>();
        String k;
        k= input.nextLine();
        while(!k.equals("#")){
            String[] data=k.split("\\s+");
            if(data.length==1)
            {
                Check1 check1=new Check1(data[0],ID);
                list.add(check1);
            }
            else
            {
                Check2 check2=new Check2(data[0],data[1],data[2],data[3],ID);
                list.add(check2);
            }
            k= input.nextLine();
        }
        int i;
        for( i=0;i<(list.size()-1);i++)
        {
            list.get(i).run();
            if(list.get(i).getFlag()!=0&&list.get(i).getFlag()!=5)
                break;
            list.get(i).out();
            System.out.print("\n");
        }
        list.get(i).run();
        list.get(i).out();
    }


}

class Acount{
    private String id;
    private Bank bank;
    private String password;
    private Bankaccount[] bankaccount=new Bankaccount[5];
    public Acount(String id,String bankname){
        this.id=id;
        this.bank=new Bank(bankname);
        this.password="88888888";
    }

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    public Bank getBank() {
        return bank;
    }

    public String getPassword() {
        return password;
    }

    public void setbanknumber(int i, String number){
        bankaccount[i]=new Bankaccount(number);
    }
    public Bankaccount getbanknumber(int i){
        return bankaccount[i];
    }
}
class Bank{
    private String name;
    private ArrayList<String> atm=new ArrayList<>();
    public Bank(String name){
        this.name=name;
    }

    public ArrayList<String> getAtm() {
        return atm;
    }


    public void add(String a){
        this.atm.add(a);
    }
    public void setName(String name) {
        this.name = name;
    }

    public String getName(){
        return name;
    }
}
class Bankaccount{
    private double money;
    private String bnumber;
    private int type;//1 借记账号 2 贷记账号
    private double quota;// 额度
    private Cardnumber cardnumber[]=new Cardnumber[5];
    public Bankaccount(String number){
        this.bnumber=number;
        this.money=10000;
        this.quota=0;
    }

    public int getType() {
        return type;
    }
    public void setType(int type) {
        this.type = type;
    }

    public double getQuota() {
        return quota;
    }
    public void add( double a){
        this.quota= this.quota+a;
    }
    public void setcardnumber(int i, String number){
        cardnumber[i]=new Cardnumber(number);
    }
    public Cardnumber getcardnumber(int i){
        return cardnumber[i];
    }

    public String getBnumber() {
        return bnumber;
    }

    public void setBnumber(String bnumber) {
        this.bnumber = bnumber;
    }
    public void setMoney(double money) {
        this.money = money;
    }

    public double getMoney() {
        return money;
    }
    public void withdraw(double a){
        this.money=this.money-a;
    }
    public void deposit(double a){
        this.money=this.money+a;
    }
}
class Cardnumber{

    private String cnumber;

    public Cardnumber(String cnumber){
        this.cnumber=cnumber;
    }

    public String getCnumber() {
        return cnumber;
    }

}

class Check{

    public void run(){

    }
    public void out(){

    }
    public int getFlag(){
        return 0;
    }

}

class Check1 extends Check{
    private Acount ID[];
    private int flag;//0正确 1错误
    private int i;
    private int j;
    private int z;
    String data;
    public Check1(String data,Acount ID[]){
        this.data=data;
        this.ID=ID;
    }
    public void run(){
        int a=0;
        int b=0;
        int c=0;
        int t=0;
        while(a<8){
            while(ID[a].getbanknumber(b)!=null)
            {
                while(ID[a].getbanknumber(b).getcardnumber(c)!=null)
                {
                    if(ID[a].getbanknumber(b).getcardnumber(c).getCnumber().equals(this.data))
                    {
                        this.i=a;
                        this.j=b;
                        this.z=c;
                        t++;
                    }
                    c++;
                }
                b++;
                c=0;
            }
            a++;
            b=0;
        }
        if(t==0)
            this.flag=1;
        else
        {
            this.flag=0;
        }
    }

    public int getFlag() {
        return flag;
    }

    public void out(){
        if(this.flag==1)
        {
            System.out.print("Sorry,this card does not exist.");
        }
        else
        {
            System.out.print("业务:查询余额 "+"¥"+String.format("%.2f",ID[i].getbanknumber(j).getMoney()));
        }

    }

}

class Check2 extends Check {
    private Acount ID[];
    private int flag;//0正确 1“Sorry,this card does not exist" 2"Sorry,the ATM's id is wrong.” 3"Sorry,your password is wrong.”4“Sorry,your account balances insufficient.”  5“Sorry,cross-bank withdrawal is not supported.”
    private int i;
    private int j;
    private int z;
    private String data;
    private String data1;
    private String data2;
    private String data3;
    private String name;

    public Check2(String data, String data1, String data2, String data3, Acount ID[]) {
        this.data = data;
        this.data1 = data1;
        this.data2 = data2;
        this.data3 = data3;
        this.ID = ID;
    }

    public void run() {
        int a = 0;
        int b = 0;
        int c = 0;
        int t = 0;
        while (a < 8) {
            while (ID[a].getbanknumber(b) != null) {

                while (ID[a].getbanknumber(b).getcardnumber(c) != null) {

                    if (ID[a].getbanknumber(b).getcardnumber(c).getCnumber().equals(this.data)) {
                        this.i = a;
                        this.j = b;
                        this.z = c;
                        t++;
                    }
                    c++;
                }
                b++;
                c = 0;
            }
            a++;
            b = 0;
        }
        if (t == 0) {
            this.flag = 1;
        } else {
            if (ID[i].getPassword().equals(data1)) {
                if (ID[i].getBank().getAtm().contains(data2)) {
                    if (ID[i].getbanknumber(j).getType() == 1) {
                        if (ID[i].getbanknumber(j).getMoney() >= Double.parseDouble(this.data3))
                            this.flag = 0;
                        else
                            this.flag = 4;
                    } else {
                        if ((ID[i].getbanknumber(j).getMoney() - (Double.parseDouble(this.data3)) * 1.05) >= -50000)
                            this.flag = 0;
                        else
                            this.flag = 4;
                    }
                } else {
                    if (this.data2.matches("0(1|2|3|4|5|6|7|8|9)") || this.data2.matches("1(1|0)")) {
                        if (ID[i].getbanknumber(j).getType() == 1) {
                            if(this.data2.matches("0(1|2|3|4)")){
                                if ((ID[i].getbanknumber(j).getMoney()-Double.parseDouble(this.data3)*1.02) >= 0)
                                    this.flag = 5;
                                else
                                    this.flag = 4;
                            }
                            else if(this.data2.matches("0(5|6)")){
                                if ((ID[i].getbanknumber(j).getMoney()-Double.parseDouble(this.data3)*1.03) >= 0)
                                    this.flag = 5;
                                else
                                    this.flag = 4;
                            }
                            else
                            {
                                if ((ID[i].getbanknumber(j).getMoney()-Double.parseDouble(this.data3)*1.04) >= 0)
                                    this.flag = 5;
                                else
                                    this.flag = 4;
                            }
                        } else {
                            if ((ID[i].getbanknumber(j).getMoney() - (Double.parseDouble(this.data3)) * 1.05) >= -50000)
                                this.flag = 5;
                            else
                                this.flag = 4;
                        }
                    } else
                        this.flag = 2;
                }
            } else
                this.flag = 3;
        }

    }
    public int getFlag() {
        return flag;
    }

    public void out() {
        if (this.flag == 0 ) {
            if(ID[i].getbanknumber(j).getMoney()<0) {
                if (ID[i].getbanknumber(j).getMoney() < Double.parseDouble(this.data3)) {
                    ID[i].getbanknumber(j).withdraw((Double.parseDouble(data3) ) * 0.05);
                }
            }
            else
            {
                if (ID[i].getbanknumber(j).getMoney() < Double.parseDouble(this.data3)) {
                    ID[i].getbanknumber(j).withdraw((Double.parseDouble(data3) - ID[i].getbanknumber(j).getMoney()) * 0.05);
                }
            }
            System.out.println("业务:取款 "+ID[i].getId() + "在" + ID[i].getBank().getName() + "的" + this.data2 + "号ATM机上取款¥" +String.format("%.2f", Double.parseDouble(data3)));
            ID[i].getbanknumber(j).withdraw(Double.parseDouble(data3));
            System.out.print("当前余额为¥" +String.format("%.2f", ID[i].getbanknumber(j).getMoney()));
        }
        if (this.flag == 5 ) {

            if(ID[i].getbanknumber(j).getMoney()<0) {
                if (ID[i].getbanknumber(j).getMoney() < Double.parseDouble(this.data3)) {
                    ID[i].getbanknumber(j).withdraw((Double.parseDouble(data3) ) * 0.05);
                }
            }
            else
            {
                if (ID[i].getbanknumber(j).getMoney() < Double.parseDouble(this.data3)) {
                    ID[i].getbanknumber(j).withdraw((Double.parseDouble(data3) - ID[i].getbanknumber(j).getMoney()) * 0.05);
                }
            }
            if(data2.matches("0(1|2|3|4)")) {
                this.name="中国建设银行";
                ID[i].getbanknumber(j).withdraw(Double.parseDouble(data3)*0.02);
            }
            else if(data2.matches("0(5|6)")){
                this.name="中国工商银行";
                ID[i].getbanknumber(j).withdraw(Double.parseDouble(data3)*0.03);
            }
            else {
                this.name = "中国农业银行";
                ID[i].getbanknumber(j).withdraw(Double.parseDouble(data3)*0.04);
            }

            System.out.println("业务:取款 "+ID[i].getId() + "在" +this.name+ "的" + this.data2 + "号ATM机上取款¥" + String.format("%.2f",Double.parseDouble(data3)));
            ID[i].getbanknumber(j).withdraw(Double.parseDouble(data3));
            System.out.print("当前余额为¥" +String.format("%.2f", ID[i].getbanknumber(j).getMoney()));
        }

        if (this.flag == 1)
            System.out.print("Sorry,this card does not exist.");
        if (this.flag == 2)
            System.out.print("Sorry,the ATM's id is wrong.");
        if (this.flag == 3)
            System.out.print("Sorry,your password is wrong.");
        if (this.flag == 4)
            System.out.print("Sorry,your account balance is insufficient.");
    }

}

采坑心得

在最后一个pta作业最后一个测试点,刚刚开始的时候没有考虑到,缺少生活经验,看了测试点以后才恍然大悟。

 

 

改进建议

 

通过一学期的Java学习,我的代码依然存在代码冗余度高的问题,在今后的学习过程中,应该更加运用Java 的三大特征来使自己的代码更加的简单

 

明了。

 

总结

 

通过了一学期的Java学习让我对了Java有了初步的认知,刚刚踏入Java的殿堂,希望在之后的学习过程中,能够运用自如。

 

同时通过这次作业让我对Comparable接口和Comparator接口有了更好的认知。

对对象的排序,可以通过以下两种方法:

  1. 实现Comparable接口,重写compareTo方法;
  2. Comparator比较器接口,重写compare方法;
  3. Comparable接口

    此接口只有一个方法

    public int compareTo(T obj);

    其中,T是泛型,需要指定具体的对象类型

    接口中通过 x.compareTo(y)来比较x和y的大小

    • x<y,返回负数;
    • x=y,返回0;
    • x>y,返回正数;
    • 如果obj为null,则会抛出空指针异常

    实现Comparable接口也需要指定具体的类型

  4. Comparator比较器

    Comparator 相当于一个比较器,作用和Comparable类似,也是使用Collections.sort() 和 Arrays.sort()来进行排序,也可以对SortedMap 和 SortedSet 的数据结构进行精准的控制,你可以不用实现此接口或者Comparable接口就可以实现次序比较。 TreeSet 和 TreeMap的数据结构底层也是使用Comparator 来实现。不同于Comparable ,比较器可以任选地允许比较null参数,同时保持要求等价关系。

    Comparator比较器的方法,其中T为泛型,需要指定具体的类型;

    int compare(T obj1, T obj2);

    比较器实现Comparator方法的时候也需要指定具体类型

    public class StudentComparator implements Comparator<Student>{}

    实现了该接口的类可以的数组或者List可以调用Arrays.sort()和Collections.sort()进行排序;参数是数组或者list对象,以及比较器对象;

 

 

 这个学期的Java学习已经告一段落了,希望自己在之后的学习过程能够取得进步。

 

 

 

 

 

 

 

 

posted @ 2021-12-18 18:43  万劫生  阅读(45)  评论(0)    收藏  举报