ログインしてさらにmixiを楽しもう

コメントを投稿して情報交換!
更新通知を受け取って、最新情報をゲット!

Javaの課題丸投げコミュのAccountの作成

  • mixiチェック
  • このエントリーをはてなブックマークに追加
Accountを作成して、番号、名前、貯金を出力するプログラムです。
「こんなところで間違ってるしー」と思うかもしれませんが突っ込みお願いします。

import java.util.*;

// アカウントクラス
class Account {
private String number;
private int balance;
private String name;
public Account(String no,String n) {
number = no;
balance = 0;
name = n;
}

// 貯金する
public void deposit(int amount) {
balance += amount;
}

// 貯金をおろす
public void withdraw(int amount) {
balance -= amount;
}

public String getNumber() {
return number;
}

public int getBalance() {
return balance;
}

public String getName() {
return name;
}

public String toString() {
return "番号 "+number+" 名義 "+name+" 残高 "+balance;
}
}

class Bank {
// List accountsの中にはAccount型のオブジェクトが入っている
private List<Account> accounts = new ArrayList<Account>();

private int lastAccountNumber = 1000000;

// 新しい口座番号を生成
// 戻り値が String型なのに注意
private String getNewAccountNumber() {
lastAccountNumber++;
return ""+lastAccountNumber;
}

private Account lookupAccount(String number) {
/*
リスト accountsの中のAccountを順に調べ、
numberが等しい(equals) Accountを返す。
そのようなAccountがない場合にはnullを返す。
*/
for(int j=0; j<accounts.size(); j++){
if(number.equals(number)){
return Account;
}else{
return null;
}
}
}

public String openAccount(String name) {
/*
getNewAccountNumberメソッドを呼び出して新しい口座番号を生成し、
その番号でAccountを作成してリストaccountsに追加する。
*/
Account a = new Account(getNewAccountNumber(),name);
accounts.add(a);
}
public void deposit(String number,int amount) {
/*
指定されたnumberの口座にamountを預金をする。
*/
accounts.lookupAccount(number);
accounts.deposit(amount);

}
public void withdraw(String number,int amount) {
/*
指定されたnumberの口座からamountを引き出す。
*/
accounts.lookupAccount(number);
accounts.withdraw(amount);
}
public void printAllAccount() {
/*
全口座をプリントする。
*/
for(int n=0; n<accounts.size(); n++){
System.out.println(accounts.toString());
}
}
}

class Test {
public static void main(String[] args) {
Bank bank = new Bank();
String[] names = new String[]{"おじゃる丸","電ボ",
"アオベエ","アカネ","キスケ"};
String[] numbers = new String[names.length];
System.out.println("口座の作成");
for (int i = 0; i < names.length; i++) {
numbers[i] = bank.openAccount(names[i]);
bank.deposit(numbers[i],1000*i);
}
bank.printAllAccount();
System.out.println("お金の移動");
for (int i = 0; i < names.length - 1; i++) {
int amount = 1000*i;
bank.withdraw(numbers[i+1],amount);
bank.deposit(numbers[i],amount);
}
bank.printAllAccount();
}
}

・実行例

口座の作成
番号 1000001 名義 おじゃる丸 残高 0
番号 1000002 名義 電ボ 残高 1000
番号 1000003 名義 アオベエ 残高 2000
番号 1000004 名義 アカネ 残高 3000
番号 1000005 名義 キスケ 残高 4000
お金の移動
番号 1000001 名義 おじゃる丸 残高 0
番号 1000002 名義 電ボ 残高 2000
番号 1000003 名義 アオベエ 残高 3000
番号 1000004 名義 アカネ 残高 4000
番号 1000005 名義 キスケ 残高 1000

コメント(8)

ゆきさん、こんにちは

お作りになったソースが動いていればとりあえずは、OKだと思います。(細かい事までつっこまれませんので、御免なさい)

私でしたら、将来に備えて、
機能が同じと思える。deposit(int amount) と withdraw(int amount) を同じメソッド変更し、おなじみのgetter, setter を設定します。
又、今回はシングルスレッドなので問題が出ないでしょうが、他のクラスからマルチスレッド環境で呼び出された場合、お金の計算をするスレッドが不具合を起こす可能性があるので、
シングルトンのデザインパターンを採用し、そのメソッドに synchronized を設定したいです。

参考:
http://www.techscore.com/tech/DesignPattern/Singleton.html

他のお考えの方もいらっしゃるでしょうが。私はこの程度でご勘弁を、
2> トリさん

その通りです。
マルチスレッドでメソッドが呼ばれると必ず起こる現象です。

(私も、以前は ”このメソッドはスレッドセーフです” って言葉が理解出来ない時期がありました。)
負数になるのはスレッドと関係ないと思いますが。。。

・Bankってコンパイルできる?
・return ""+lastAccountNumber; とか気持ち悪いのはワタシだけ?
たくさんのアドバイスありがとうございました!
おかげでなんとかできました。

まとめてで恐縮ですが、
himikuniさん、トリさん、マイさん、ユウタさんありがとうございました!!

ログインすると、みんなのコメントがもっと見れるよ

mixiユーザー
ログインしてコメントしよう!

Javaの課題丸投げ 更新情報

Javaの課題丸投げのメンバーはこんなコミュニティにも参加しています

星印の数は、共通して参加しているメンバーが多いほど増えます。