1. 程式人生 > 其它 >題目集7-9總結性blog

題目集7-9總結性blog

題目集7-9總結性blog

1、 前言

   這三次作業並沒有什麼新的知識點,都是對之前學習的東西進行應用,主要有:1、繼承、多型的應用;2、ArrayList泛型的應用方法;3、Comparable介面及泛型的應用;4、單一職責原則的應用;          5、“開-閉”原則的應用。還有一些銀行、ATM機、銀行卡的相關課外知識,我是我之前沒了解過的。

   題量也是比較少,三次作業只有四道題,當然難度也是有的,像設計第八次作業的類,

要使得程式的可維護性高,這樣第九次作業才好寫,這得花點功夫。

2、 設計與分析

  (1) 題目集7(7-1)、(7-2)兩道題目的遞進式設計分析總結

     題目7(7-1)詳情:

7-1 圖形卡片排序遊戲 (40 分)     

      掌握類的繼承、多型性使用方法以及介面的應用。詳見作業指導書2020-OO第07次作業-1指導書V1.0.pdf

      輸入格式:

        首先,在一行上輸入一串數字(1~4,整數),其中,1代表圓形卡片,2代表矩形卡片,3代表三角形卡片,4代表梯形卡片。各數字之間以一個或多個空格分隔,以“0”結束。例如:1 3 4 2 1 3 4 2 13 0  

        然後根據第一行數字所代表的卡片圖形型別,依次輸入各圖形的相關引數,例如:圓形卡片需要輸入圓的半徑,矩形卡片需要輸入矩形的寬和長,三角形卡片需要輸入三角形的三條邊長,梯形   需要\輸入梯形的上底、下底以及高。各資料之間用一個或多個空格分隔。

      輸出格式:

        如果圖形數量非法(小於0)或圖形屬性值非法(數值小於0以及三角形三邊不能組成三角形),則輸出Wrong Format。

        如果輸入合法,則正常輸出,所有數值計算後均保留小數點後兩位即可。輸出內容如下:

        排序前的各圖形型別及面積,格式為圖形名稱1:面積值1圖形名稱2:面積值2 …圖形名稱n:面積值n,注意,各圖形輸出之間用空格分開,且輸出最後存在一個用於分隔的空格;

        排序後的各圖形型別及面積,格式同排序前的輸出;

        所有圖形的面積總和,格式為Sum of area:總面積值。

      類圖:

        

   複雜度:

         

  原始碼:

import java.util.Scanner;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Map;
import java.text.DecimalFormat;
import java.util.TreeMap;
public class Main {
    public static void main(String[] args) {    
        Scanner input=new Scanner(System.in);
        DecimalFormat df2 = new DecimalFormat("####0.00");
        ArrayList<Integer> cz = new ArrayList<Integer>();
        Circle circle=new Circle();
        Rectangle rectangle=new Rectangle();
        Triangle triangle=new Triangle();
        Trapezoid trapezoid=new Trapezoid();
        for(int i=0;;i++) {
            int x=input.nextInt();
            if(x==0&&i==0) {
                System.out.println("The original list:"+"\n");
                System.out.println("The sorted list:"+"\n");
                System.out.println("Sum of area:0.00");
                System.exit(0);
                break;
            }
            if(x==0&&i!=0)
                break;
            else if(x>0&&x<=4)
                cz.add(x);
            else {
                System.out.println("Wrong Format");
                System.exit(0);
            }                
        }
        ArrayList<Double> area1 = new ArrayList<Double>();
        ArrayList<Double> area2 = new ArrayList<Double>();
        ArrayList<Double> area3 = new ArrayList<Double>();
        ArrayList<Double> area4 = new ArrayList<Double>();
        for(int i=0;i<cz.size();i++) {
            switch(cz.get(i)) {
            case 1:circle.r=input.nextDouble();
                    if(circle.r<0) {
                        System.out.println("Wrong Format");
                        System.exit(0);
                    }
                    area1.add(circle.getArea());
                    break;
            case 2:rectangle.length=input.nextDouble();
                    rectangle.width=input.nextDouble();
                    if(rectangle.length<0||rectangle.width<0) {
                        System.out.println("Wrong Format");
                        System.exit(0);
                    }
                    area2.add(rectangle.getArea());
                    break;
            case 3:triangle.side1=input.nextDouble();
                    triangle.side2=input.nextDouble();
                    triangle.side3=input.nextDouble();
                    if(triangle.side1+triangle.side2<=triangle.side3||triangle.side1+triangle.side3<=triangle.side2||triangle.side2+triangle.side3<=triangle.side1) {
                        System.out.println("Wrong Format");
                        System.exit(0);
                    }
                    area3.add(triangle.getArea());
                    break;
            case 4:trapezoid.sd=input.nextDouble();
                    trapezoid.xd=input.nextDouble();
                    trapezoid.h=input.nextDouble();
                    if(trapezoid.sd<0||trapezoid.xd<0||trapezoid.h<0) {
                        System.out.println("Wrong Format");
                        System.exit(0);
                    }
                    area4.add(trapezoid.getArea());
                    break;
            }
        }
        System.out.println("The original list:");
        for(int i = 0,j = 0,k = 0,l=0;i+k+j+l<cz.size();) {
            switch(cz.get(i+j+k+l)) {
            case 1:System.out.print("Circle:"+df2.format(area1.get(i))+" ");i++;break;
            case 2:System.out.print("Rectangle:"+df2.format(area2.get(j))+" ");j++;break;
            case 3:System.out.print("Triangle:"+df2.format(area3.get(k))+" ");k++;break;
            case 4:System.out.print("Trapezoid:"+df2.format(area4.get(l))+" ");l++;break;
            }
        }
        System.out.println("\n"+"The sorted list:");
        Map map = new TreeMap();
        for(int i = 0,j = 0,k = 0,l=0;i+k+j+l<cz.size();) {
            switch(cz.get(i+j+k+l)) {
            case 1:map.put(area1.get(i),"Circle:");i++;break;
            case 2:map.put(area2.get(j),"Rectangle:");j++;break;
            case 3:map.put(area3.get(k),"Triangle:");k++;break;
            case 4:map.put(area4.get(l),"Trapezoid:");l++;break;
            }
        }
        ArrayList<Double> mj = new ArrayList<Double>();
        for(int i = 0,j = 0,k = 0,l=0;i+j+k+l<cz.size();) {
            switch(cz.get(i+j+k+l)) {
            case 1:mj.add(area1.get(i));i++;break;
            case 2:mj.add(area2.get(j));j++;break;
            case 3:mj.add(area3.get(k));k++;break;
            case 4:mj.add(area4.get(l));l++;break;
            }
        }
        Collections.sort(mj);
        for(int i=cz.size()-1;i>=0;i--) {
            System.out.print(map.get(mj.get(i)));
            System.out.print(df2.format(mj.get(i))+" ");
        }
        double sum=0;
        for(int i=0;i<cz.size();i++) {
            sum=sum+mj.get(i);        
        }
        System.out.println("\n"+"Sum of area:"+df2.format(sum));
    }
}
class Circle{
    DecimalFormat df2 = new DecimalFormat("####0.00");
    double r;
    public double getArea() {
        return Math.PI*r*r;
    }
    public void show() {
        System.out.print("Circle:"+df2.format(this.getArea())+" ");
    }
}
class Rectangle{
    DecimalFormat df2 = new DecimalFormat("####0.00");
    double length;
    double width;
    public double getArea() {
        return length*width;
    }
    public void show() {
        System.out.print("Rectangle:"+df2.format(this.getArea())+" ");
    }
}
class Triangle{
    DecimalFormat df2 = new DecimalFormat("####0.00");
    double side1;
    double side2;
    double side3;
    public double getArea() {
        return Math.sqrt(((side1+side2+side3)/2)*(((side1+side2+side3)/2)-side1)*(((side1+side2+side3)/2)-side2)*(((side1+side2+side3)/2)-side3));
    }
    public void show() {
        System.out.print("Triangle:"+df2.format(this.getArea())+" ");
    }
}
class Trapezoid{
    DecimalFormat df2 = new DecimalFormat("####0.00");
    double sd;
    double xd;
    double h;
    public double getArea() {
        return (sd+xd)*h*0.5;
    }
    public void show() {
        System.out.print("Trapezoid:"+df2.format(this.getArea())+" ");
    }
}

題目7(7-2)詳情:

7-2 圖形卡片分組遊戲 (60 分)

掌握類的繼承、多型性使用方法以及介面的應用。 具體需求參考作業指導書。

2021-OO第07次作業-2指導書V1.0.pdf

輸入格式:

在一行上輸入一串數字(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:面積值。

類圖:

      

複雜度:

      

      第一題是輸入幾個不同的圖形,然後算出其面積,先輸出按輸入順序的面積,再輸出按面積從大到小的順序,最後輸出面積最大的;而第二題是在第一題的基礎上,可以輸入多個相同的圖形,但是     可以有不同的面積,而且要把不同的圖形分為不同的組,組的順序是固定的,但是組內圖形面積需要排序,最後輸出最大的一組面積之和。

      由於第二題是在第一題的基礎上進行的,所以第一題的四個圖形類和存面積的方法可以完全用在第二題中,第二題比第一題多的用來分組程式碼:

      

System.out.print("[");

              for(int i=area1.size()-1;i>=0;i--) {

                            System.out.print("Circle:"+df2.format(area1.get(i))+" ");

              }

              System.out.print("]");

              System.out.print("[");

              for(int i=area2.size()-1;i>=0;i--) {

                            System.out.print("Rectangle:"+df2.format(area2.get(i))+" ");

              }

              System.out.print("]");

              System.out.print("[");

              for(int i=area3.size()-1;i>=0;i--) {

                            System.out.print("Triangle:"+df2.format(area3.get(i))+" ");

              }

              System.out.print("]");

              System.out.print("[");

              for(int i=area4.size()-1;i>=0;i--) {

                            System.out.print("Trapezoid:"+df2.format(area4.get(i))+" ");

              }

              System.out.print("]");

(2)題目集8和題目集9兩道ATM機模擬題目的設計思路分析總結

題目8詳情:

7-1 ATM機類結構設計(一) (100 分)

    設計ATM模擬系統,具體要求參見作業說明。OO作業8-1題目說明.pdf

    輸入格式:

      每一行輸入一次業務操作,可以輸入多行,最終以字元#終止。具體每種業務操作輸入格式如下:

      存款、取款功能輸入資料格式:卡號 密碼 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編號]上存款¥[金額]

        當前餘額為¥[金額]

        其中,[]說明括起來的部分為輸出屬性或變數,金額均保留兩位小數。

      ④ 查詢餘額業務輸出

        ¥[金額]

        金額保留兩位小數。

      類圖:

      

題目9詳情:

      7-1 ATM機類結構設計(二) (100 分)

    設計ATM模擬系統,具體要求參見作業說明。OO作業9-1題目說明.pdf

    輸入格式:

      每一行輸入一次業務操作,可以輸入多行,最終以字元#終止。具體每種業務操作輸入格式如下:

      取款功能輸入資料格式:卡號 密碼 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編號]上取款¥[金額]

        當前餘額為¥[金額]

        其中,[]說明括起來的部分為輸出屬性或變數,金額均保留兩位小數。

      ③查詢餘額業務輸出

        業務:查詢餘額 ¥[金額]

        金額保留兩位小數。

     類圖:

     

  這兩次作業的關鍵點是題目八,因為題目九是在第八題的基礎上做的,那就先看題目八,第一步要做的是存資料,因為這裡有大量的衍生關係,比如中國銀聯有中國建設銀行,中國工商銀行等,然後每個銀行又有一些使用者,每個使用者有一個或多個銀行賬號,每個銀行賬號又有一個或多個銀行卡號。要做好這個題目,如何把這些關係有機聯絡起來是至關重要的。

  我用的是map集合將這些關係聯絡起來,這樣就可以通過任何物件找到與其相關的資訊,然後相關的輸出方法是放在ATM類裡面,判斷是否合法操作的方法在Bankcard類裡面。

  原始碼:

  

import java.util.Scanner;
import java.util.HashMap;
import java.util.Map;
import java.text.DecimalFormat;
public class Main{
    Scanner input=new Scanner(System.in);
    public static void main(String[] args) {
        UnionPay unionpay=new UnionPay();
        Bank bank=new Bank();
        User user=new User();
        Account account=new Account();
        Bankcard bankcard=new Bankcard();
        ATM atm=new ATM();
        Scanner input=new Scanner(System.in);
        StringBuilder sb = new StringBuilder();
        String b=input.nextLine();
        while(!b.equals("#")) {
            sb.append(b).append("\n");
            b=input.nextLine();
        }
        String ss= String.valueOf(sb);
        String rows[]=ss.split("\n");
        for(int i=0;i<rows.length;i++) {
            String dan[]=rows[i].split(" ");
            bankcard.put(i,rows);
            bankcard.check(user,dan.length);
            if(bankcard.flag!=0)
                System.exit(0);
            else {
                if(dan.length!=1)
                    atm.showcz(bankcard,bank);
                else
                    atm.showmoney(bankcard);
            }
        }
    }
}
class UnionPay{
    Map<String, String> yl = new HashMap<String, String>();{
    this.yl.put("中國工商銀行","銀聯");
    this.yl.put("中國建設銀行","銀聯");
    this.yl.put("中國農業銀行","銀聯");
    }
}
class Bank extends UnionPay{
    Map<String, String> jsyh = new HashMap<String, String>();{
    this.jsyh.put("楊過","中國建設銀行");
    this.jsyh.put("郭靖","中國建設銀行");
    this.jsyh.put("張三丰","中國建設銀行");
    this.jsyh.put("張無忌","中國工商銀行");
    this.jsyh.put("韋小寶","中國工商銀行");
    this.jsyh.put("令狐沖","中國工商銀行");
    this.jsyh.put("喬峰","中國農業銀行");
    this.jsyh.put("洪七公","中國農業銀行");
    }
    Map<String, String> kind = new HashMap<String, String>();{
        this.kind.put("6217000010041315709","借記賬號");
        this.kind.put("6217000010041315715","借記賬號");
        this.kind.put("6217000010041315718","借記賬號");
        this.kind.put("6217000010051320007","借記賬號");
        this.kind.put("6222081502001312389","借記賬號");
        this.kind.put("6222081502001312390","借記賬號");
        this.kind.put("6222081502001312399","借記賬號");
        this.kind.put("6222081502001312400","借記賬號");
        this.kind.put("6222081502051320785","借記賬號");
        this.kind.put("6222081502051320786","借記賬號");
        this.kind.put("6640000010045442002","貸記賬號");
        this.kind.put("6640000010045442003","貸記賬號");
        this.kind.put("6640000010045441009","貸記賬號");
        this.kind.put("6630000010033431001","貸記賬號");
        this.kind.put("6630000010033431008","貸記賬號");
    }
    Map<String, String> sxf = new HashMap<String, String>();{
        this.sxf.put("中國建設銀行","0.02");
        this.sxf.put("中國工商銀行","0.03");
        this.sxf.put("中國農業銀行","0.04");
    }
}
class User extends Bank{
    Map<String, String> yangguo = new HashMap<String, String>();{
        this.yangguo.put("6217000010041315709","楊過");
        this.yangguo.put("6217000010041315715","楊過");
        this.yangguo.put("6217000010041315718","楊過");
        this.yangguo.put("6217000010051320007","郭靖");
        this.yangguo.put("6222081502001312389","張無忌");
        this.yangguo.put("6222081502001312390","張無忌");
        this.yangguo.put("6222081502001312399","張無忌");
        this.yangguo.put("6222081502001312400","張無忌");
        this.yangguo.put("6222081502051320785","韋小寶");
        this.yangguo.put("6222081502051320786","韋小寶");
        this.yangguo.put("6640000010045442002","張三丰");
        this.yangguo.put("6640000010045442003","張三丰");
        this.yangguo.put("6640000010045441009","令狐沖");
        this.yangguo.put("6630000010033431001","喬峰");
        this.yangguo.put("6630000010033431008","洪七公");
    }
}
class ATM extends User{
    Map<String, String> giao = new HashMap<String, String>();{
        this.giao.put("01","中國建設銀行");
        this.giao.put("02","中國建設銀行");
        this.giao.put("03","中國建設銀行");
        this.giao.put("04","中國建設銀行");
        this.giao.put("05","中國工商銀行");
        this.giao.put("06","中國工商銀行");
        this.giao.put("07","中國農業銀行");
        this.giao.put("08","中國農業銀行");
        this.giao.put("09","中國農業銀行");
        this.giao.put("10","中國農業銀行");
        this.giao.put("11","中國農業銀行");
    }
    DecimalFormat df2 = new DecimalFormat("####0.00");
    public void showcz(Bankcard bankcard,Bank bank) {
        if(bankcard.money>0) {
            System.out.println("業務:取款 "+super.yangguo.get(bankcard.card)+"在"+giao.get(bankcard.bh)+"的"+bankcard.bh+"號ATM機上取款¥"+df2.format(bankcard.money));
            System.out.println("當前餘額為¥"+df2.format(bankcard.yue()));
        }
        else {
            System.out.println("業務:存款 "+super.yangguo.get(bankcard.card)+"在"+giao.get(bankcard.bh)+"的"+bankcard.bh+"號ATM機上存款¥"+df2.format(-bankcard.money));
            System.out.println("當前餘額為¥"+df2.format(bankcard.yue()));
        }        
    }
    public void showmoney(Bankcard bankcard) {
        System.out.println("業務:查詢餘額 "+"¥"+df2.format(bankcard.yue()));
    }
}
class Account{
    
}
class Bankcard extends ATM{
    Map<String, String> qian = new HashMap<String, String>();{
        this.qian.put("楊過","1");
        this.qian.put("郭靖","2");
        this.qian.put("張無忌","3");
        this.qian.put("韋小寶","4");
        this.qian.put("張三丰","5");
        this.qian.put("令狐沖","6");
        this.qian.put("喬峰","7");
        this.qian.put("洪七公","8");
    }
    String card;
    String mima;
    String bh;
    double money;
    double[] startmoney={10000.00,10000.00,10000.00,10000.00,10000.00,10000.00,10000.00,10000.00};
    int flag=0;
    public void put(int i,String rows[]) {
        rows[i]=rows[i].replaceAll("\\s+", " ");
        String dan[]=rows[i].split(" ");
        int length=dan.length;
        if(length!=1) {
            card=dan[0];
            mima=dan[1];
            bh=dan[2];
            money=Double.parseDouble(dan[3]);
        }
        else {
            card=dan[0];
            mima="88888888";
            bh="01";
            money=0;
        }
    }
    public void check(User user,int length) {
            if(user.yangguo.get(card)==null) {
                System.out.println("Sorry,this card does not exist.");
                flag++;
            }
            else if(!mima.equals("88888888")) {
                System.out.println("Sorry,your password is wrong.");
                flag++;
            }
            else if(!bh.equals("11")&&!bh.equals("10")&&!bh.equals("09")&&!bh.equals("08")&&!bh.equals("07")&&!bh.equals("06")&&!bh.equals("05")&&!bh.equals("04")&&!bh.equals("03")&&!bh.equals("02")&&!bh.equals("01")) {
                System.out.println("Sorry,the ATM's id is wrong.");
                flag++;
            }
            else if((kind.get(card).equals("借記賬號")&&money>startmoney[Integer.valueOf(qian.get(yangguo.get(card)))-1])||(kind.get(card).equals("借記賬號")&&sfkh()&&money==startmoney[Integer.valueOf(qian.get(yangguo.get(card)))-1])||(yue1(startmoney[Integer.valueOf(qian.get(yangguo.get(card)))-1],money)<-50000)) {
                System.out.println("Sorry,your account balance is insufficient.");
                flag++;
            }
            else
                flag=0;            
    }
        public double yue() {
            if(startmoney[Integer.valueOf(qian.get(yangguo.get(card)))-1]<money&&startmoney[Integer.valueOf(qian.get(yangguo.get(card)))-1]>0) {
                startmoney[Integer.valueOf(qian.get(yangguo.get(card)))-1]=startmoney[Integer.valueOf(qian.get(yangguo.get(card)))-1]-(money-startmoney[Integer.valueOf(qian.get(yangguo.get(card)))-1])*0.05;
            }
            if(startmoney[Integer.valueOf(qian.get(yangguo.get(card)))-1]<money&&startmoney[Integer.valueOf(qian.get(yangguo.get(card)))-1]<=0) {
                startmoney[Integer.valueOf(qian.get(yangguo.get(card)))-1]=startmoney[Integer.valueOf(qian.get(yangguo.get(card)))-1]-money*0.05;
            }
            if(sfkh())
                startmoney[Integer.valueOf(qian.get(yangguo.get(card)))-1]=startmoney[Integer.valueOf(qian.get(yangguo.get(card)))-1]-money-money*Double.parseDouble(sxf.get(giao.get(bh)));
            else
                startmoney[Integer.valueOf(qian.get(yangguo.get(card)))-1]=startmoney[Integer.valueOf(qian.get(yangguo.get(card)))-1]-money;
            return startmoney[Integer.valueOf(qian.get(yangguo.get(card)))-1];
        }
    public double yue1(double a,double money1) {
            if(a<money1&&a>0) {
                a=a-(money1-a)*0.05;
            }
            if(a<money1&&a<=0) {
                a=a-money1*0.05;
            }
            if(sfkh())
                a=a-money1-money1*Double.parseDouble(sxf.get(giao.get(bh)));
            else
                a=a-money1;
            return a;
        }
        public boolean sfkh() {
            if(jsyh.get(yangguo.get(card)).equals(giao.get(bh)))
                return false;
            else
                return true;
        }
}

3、 踩坑心得

  1、題目集7:for(int i = 0,j = 0,k = 0,l=0;i+k+j+l<cz.size();) {

   switch(cz.get(i+j+k+l)) {

  case 1:System.out.print("Circle:"+df2.format(area1.get(i))+" ");i++;break;

   case 2:System.out.print("Rectangle:"+df2.format(area2.get(j))+" ");j++;break;

   case 3:System.out.print("Triangle:"+df2.format(area3.get(k))+" ");k++;break;

   case 4:System.out.print("Trapezoid:"+df2.format(area4.get(l))+" ");l++;break;

  }

   }

這樣輸出才是對的,但是我之前是這樣寫的:

  for(int i = 0,;i <cz.size();) {

  switch(cz.get(i+j+k+l)) {

  case 1:System.out.print("Circle:"+df2.format(area1.get(i))+" ");i++;break;

   case 2:System.out.print("Rectangle:"+df2.format(area2.get(i))+" ");i++;break;

   case 3:System.out.print("Triangle:"+df2.format(area3.get(i))+" ");i++;break;

   case 4:System.out.print("Trapezoid:"+df2.format(area4.get(i))+" ");i++;break;

   }

   }

這就是犯了把四個陣列看成一個數組的錯誤,這樣就得不到正確答案。

 2、題目集8、9:餘額沒有用多個10000元,導致取錢全是取一張卡里面的錢

4、 改進建議

  題目集7:這題給的類圖太詳細了,就連主方法的模板都給出了,我覺得沒必要這樣,這樣我感覺大部分人的程式碼都比較相似,學生會缺乏創新。

5、 總結

  這三次題目集雖然題量少,但是寫起來也花了挺多時間,也學到了很多,現在我可以更好地運用正則表示式來分割資料,這是題目集8和9都要用到的;還學到了如何用map集合來處理資料;還有一些課外的,但是在現實生活中很常見的知識,比如ATM機;由於這幾道題目都要設計類,於是我現在對類的理解進一步深刻了,這就是Java面向物件的魅力,將一個大問題逐步分割成互相關聯的小問題。但是我對介面的運用還不是很好,還有我不知道介面的用處在哪;希望以後能有更多與現實生活相關的題目。