封裝

這兩天一直卡在這里灸眼,保存一個賬戶,總是在atm中要把賬號和密碼分別傳遞給bank,進(jìn)而觸發(fā)各種異常焰宣。
于是有了下面代碼的V1、V2盈罐、V3版

V1

atm

public class ATM {
    private java.util.Scanner input = new java.util.Scanner(System.in);
    private Bank bank = new Bank();
    private void creat() {
        //1提示輸入賬戶名稱
        System.out.println("請輸入賬號");
        String name = input.next();
        //2在Bank中查詢賬號是否被占用
        boolean result = bank.findByName(name);
        //3如果未被占用提示輸入密碼
        if(result) {
            System.out.println("請輸入密碼");
            String password = input.next();
            //4在Bank中保存
            bank.save(name,password);
        } else {
            System.out.println("該賬戶已存在");
            creat();
        }   
    }
}

bank

public class Bank {
    private Account[] account = new Account[10];
    public void save(String name,String password) {
        //1判斷內(nèi)存是否還有空間
        for(int i = 0;i < account.length;i++) {
            if(account[i] == null) {    
                //account[i]的值為null
                //2如果有,進(jìn)行存儲
                //null 不能調(diào)用該對象的任何屬性和方法盅粪,否則引起Null.Point異常
                //所以下邊的代碼是錯的
                account[i].setName(name);
                account[i].setPassword(password);
                System.out.println("保存成功");
            } else {
                //3如果沒有,提示內(nèi)存已滿
                System.out.println("用戶已滿础浮,請聯(lián)系銀行");
            }
        }
    }
    public boolean findByName(String name) {
        boolean result = true;
        for(int i = 0;i < account.length;i++) {
            if(name.equals(account[i])) {
            result = false;
            break;
            }
        }
        return result;
    }
}

完美引起Null.Point異常奠骄,(當(dāng)然還有其他錯誤)所以有了第二版

V2

atm

    private void creat() {
        System.out.println("請輸入您的賬號");
        String name = input.next();
        //判斷bank中是否還有空間,有空間再提示進(jìn)一步輸入密碼進(jìn)行開戶
        //暫未實現(xiàn)的功能(可以嘗試在最后一個空間被用戶開戶占用后就提示內(nèi)存滿了及時清理內(nèi)存)
        if(bank.findByName(name) == null) {
            System.out.println("請輸入您的密碼:");
            String pass = input.next();         
            User user = new User();
            user.setName(name);
            user.setPass(pass); 
            bank.save(user);
            //!!!!這里把bank.save()方法的返回值設(shè)置成boolean類型戚揭,可以把判斷并輸出是否創(chuàng)建成功的語句轉(zhuǎn)移到在ATM中    
            go();       
        } else {
            System.out.println("該賬戶已存在請重新輸入");
            creat();
        }
    }

bank

    public void save(User user) {
        boolean flag = true;
        for(int i = 0;i < users.length;i++) {
            if(users[i] == null) {
                users[i] = user;
                flag = false;
                System.out.println("開戶成功");
                break;
            }
        }
        if(flag) {
            System.out.println("用戶已滿撵枢,暫無法開戶");       
        } else {
            System.out.println("開戶成功");
        }
    }
    public User findByName(String name) {   
        User user = null;
        for(int i = 0;i < users.length; i++) {
            if(users[i] != null && name.equals(users[i].getName())) {
                user = users[i];
                break;//跳出循環(huán)
            }   
        }   
        return user;//跳出方法
    }

這里bank好像義務(wù)做了點不屬于自己的工作,與用戶交流是atm的工作潜必,當(dāng)然這個bank任勞任怨沃但,一套流程也能正常運行磁滚,但是時間長了宵晚,難免要出意外,所以第三版來了晒他,各司其職。

V3

atm

    private void createAccount() {
        //1. 讓用戶輸入賬號
        System.out.println("請輸入你要開戶的賬號:");
        String name = input.next();
        //2. 去Bank查看該賬號是否被占用
        Account acc = bank.findByName(name);
        if(acc == null) {
            //2.2 如果可用陨仅,則提示密碼
            System.out.println("請輸入密碼:");
            String password = input.next();
            //3. 創(chuàng)建Account對象铝侵,傳到Bank中進(jìn)行保存
            Account account = new Account();
            account.setName(name);
            account.setPassword(password);
            boolean isSave = bank.save(account);
            if(isSave) {
                System.out.println("保存成功");
            } else {
                System.out.println("保存失敗,請聯(lián)系銀行");
            }
            startup();
        } else {
            //2.1 如果被占用提示重新輸入
            System.out.println("該賬號已被占用咪鲜,請重新輸入");
            createAccount();
        }
    }

bank

    public boolean save(Account account) {
        boolean flag = false;
        for(int i = 0 ;i < dataBase.length;i++) {
            if(dataBase[i] == null) {
                flag = true;
                dataBase[i] = account;
                break;
            }
        }
        return flag;
    }
    public Account findByName(String name) {
        for(int i = 0;i < dataBase.length;i++) {
            if(dataBase[i] != null && name.equals(dataBase[i].getName())) {
                return dataBase[i];
            }
        }
        return null;
    }

如果要存儲的一種(類)對象有多個屬性,設(shè)置一個包含這些屬性的屬性類猾警,在其他各個類和方法中依靠調(diào)用這個類來傳遞其內(nèi)部對象的各個屬性孔祸。
主角是這樣的

Account

V2中用User代表這里的Account
public class Account {
    private String name;
    private String password;
    private int money;
    private boolean enable = true;
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getPassword() {
        return password;
    }
    public void setPassword(String password) {
        this.password = password;
    }
    public int getMoney() {
        return money;
    }
    public void setMoney(int money) {
        this.money = money;
    }
    public boolean isEnable() {
        return enable;
    }
    public void setEnable(boolean enable) {
        this.enable = enable;
    }   
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末崔慧,一起剝皮案震驚了整個濱河市穴墅,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌玄货,老刑警劉巖,帶你破解...
    沈念sama閱讀 221,273評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件夹界,死亡現(xiàn)場離奇詭異,居然都是意外死亡可柿,警方通過查閱死者的電腦和手機丙者,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,349評論 3 398
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來械媒,“玉大人,你說我怎么就攤上這事痢虹。” “怎么了世分?”我有些...
    開封第一講書人閱讀 167,709評論 0 360
  • 文/不壞的土叔 我叫張陵缀辩,是天一觀的道長。 經(jīng)常有香客問我臀玄,道長,這世上最難降的妖魔是什么健无? 我笑而不...
    開封第一講書人閱讀 59,520評論 1 296
  • 正文 為了忘掉前任,我火速辦了婚禮叠穆,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘硼被。我一直安慰自己,他們只是感情好嚷硫,可當(dāng)我...
    茶點故事閱讀 68,515評論 6 397
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著脆贵,像睡著了一般。 火紅的嫁衣襯著肌膚如雪卖氨。 梳的紋絲不亂的頭發(fā)上负懦,一...
    開封第一講書人閱讀 52,158評論 1 308
  • 那天,我揣著相機與錄音密似,去河邊找鬼葫盼。 笑死,一個胖子當(dāng)著我的面吹牛贫导,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播孩灯,決...
    沈念sama閱讀 40,755評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼败匹!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起掀亩,我...
    開封第一講書人閱讀 39,660評論 0 276
  • 序言:老撾萬榮一對情侶失蹤欢顷,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體缆巧,經(jīng)...
    沈念sama閱讀 46,203評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡豌拙,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,287評論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了姆蘸。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,427評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡狂秦,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出裂问,到底是詐尸還是另有隱情牛柒,我是刑警寧澤堪簿,帶...
    沈念sama閱讀 36,122評論 5 349
  • 正文 年R本政府宣布皮壁,位于F島的核電站,受9級特大地震影響虑瀑,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜舌狗,卻給世界環(huán)境...
    茶點故事閱讀 41,801評論 3 333
  • 文/蒙蒙 一扔水、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧魔市,春花似錦、人聲如沸待德。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,272評論 0 23
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至簸喂,卻和暖如春毙死,著一層夾襖步出監(jiān)牢的瞬間喻鳄,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,393評論 1 272
  • 我被黑心中介騙來泰國打工除呵, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人纠拔。 一個月前我還...
    沈念sama閱讀 48,808評論 3 376
  • 正文 我出身青樓泛豪,卻偏偏與公主長得像稠诲,于是被迫代替她去往敵國和親诡曙。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,440評論 2 359

推薦閱讀更多精彩內(nèi)容