题目集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图形名称2:面积值2 …图形名称n:面积值n,注意,各图形输出之间用空格分开,且输出最后存在一个用于分隔的空格; - 排序后的各图形类型及面积,格式同排序前的输出;
- 所有图形的面积总和,格式为
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图形名称2:面积值2 …图形名称n:面积值n ],注意,各图形输出之间用空格分开,且输出最后存在一个用于分隔的空格,在结束符“]”之前; - 输出分组后的图形类型及面积,格式为
[圆形分组各图形类型及面积][矩形分组各图形类型及面积][三角形分组各图形类型及面积][梯形分组各图形类型及面积],各组内格式为图形名称:面积值。按照“Circle、Rectangle、Triangle、Trapezoid”的顺序依次输出; - 各组内图形排序后的各图形类型及面积,格式同排序前各组图形的输出;
- 各组中面积之和的最大值输出,格式为
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接口有了更好的认知。
对对象的排序,可以通过以下两种方法:
- 实现Comparable接口,重写compareTo方法;
- Comparator比较器接口,重写compare方法;
-
Comparable接口
此接口只有一个方法
public int compareTo(T obj);其中,T是泛型,需要指定具体的对象类型
接口中通过 x.compareTo(y)来比较x和y的大小
- x<y,返回负数;
- x=y,返回0;
- x>y,返回正数;
- 如果obj为null,则会抛出空指针异常
实现Comparable接口也需要指定具体的类型
-
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学习已经告一段落了,希望自己在之后的学习过程能够取得进步。
浙公网安备 33010602011771号