この演習はDayクラスを使わずに行う演習なのでしょうか?
Dayクラスを使うのなら、銀行口座クラスにtoStringメソッドを作る理由が分かりません。
また、もしDayクラスを使わない場合、toStringメソッドで購入日の表示に使うyear, month, dateといった変数は銀行口座クラスのフィールドに追加して行うのでしょうか?
今のところ、Dayクラスと同じtoStringメソッドを銀行口座クラスに使っているため、そこで使われているyear, month, date変数でエラーが出てしまいます
分かる方いらっしゃいましたら、是非ともご教示賜りたいです。
よろしくお願いします。
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2015/12/26 10:52
回答4件
0
hyper-drums-koさんの回答で、銀行口座クラスのtoString内で日付クラスのtoStringを呼べばいいのかと思ったのですが、つけてみるとシンボルを見つけられずエラーになりました。
しかしtoStringをつけない場合だと無事動作しました。
一体なぜこのようなことが起こるのでしょか?
また、toString内で複数の文字列を返すにはどうすれば良いのでしょうか?
String.formatに全部書くのが一般的なのでしょうか?
質問が多いのですが、どうかよろしくお願いします。
Java
1//成功例 2public String toString() 3 { 4 return String.format("口座開設日:" + this.o_date); 5 } 6//失敗例 7public String toString() 8 { 9 return String.format("口座開設日:" + this.o_date.toString()); 10 }
投稿2015/12/26 08:32
総合スコア23
0
こういうことですか?
java
1//銀行口座クラス 2class Account 3{ 4 private String name; 5 private String no; 6 private long balance; 7 //追加 8 private Day o_date; 9 10 Account(String name, String no, long balance, Day o_date) 11 { 12 this.name = name; 13 this.no = no; 14 this.balance = balance; 15 //追加 16 this.o_date = new Day(o_date); 17 } 18 19 public String getName() { return name; } 20 public String getNo() { return no; } 21 public long getBalance() { return balance; } 22 void deposit(long k) { balance += k; } 23 void withdraw(long k) { balance -= k; } 24 25 //追加 26 public Day getODate() 27 { 28 return new Day(o_date); 29 } 30 31 public String toString() 32 { 33 StringBuilder sb = new StringBuilder(); 34 sb.append("===").append(this.name).append("の口座===").append("\\n"); 35 sb.append("口座名義:").append(this.name).append("\\n"); 36 sb.append("口座番号:").append(this.no).append("\\n"); 37 sb.append("預金残高:").append(this.balance).append("\\n"); 38 sb.append("口座開設日:").append(this.o_date.toString()).append("\\n"); 39 return sb.toString(); 40 } 41} 42 43class AccountTester 44{ 45 public static void main(String[] args) 46 { 47 Account adachi = new Account("足立太郎", "123456", 1000, new Day(2015, 12, 25)); 48 Account nakata = new Account("中田次郎", "654321", 200, new Day(2015, 11, 11)); 49 50 // 足立太郎の口座 51 System.out.println(adachi.toString()); 52 53 // 中田次郎の口座 54 System.out.println(nakata.toString()); 55 } 56}
投稿2015/12/26 07:43
編集2015/12/26 08:48総合スコア736
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2015/12/26 08:21
2015/12/26 08:48
2015/12/26 11:51
0
口座開設日のフィールドとしてDay型の変数(o_date)を用意し、口座開設日のゲッタとしてコピーコンストラクタを利用したものを追加したのですが、なおのこと銀行口座クラスにtoStringメソッドを作る意味が分からず、また、作り方も分かりません。
演習の通り、銀行口座クラスにtoStringメソッドを追加する場合、どうようにして実現させるのでしょうか?
Java
1//銀行口座クラス 2class Account 3{ 4 private String name; 5 private String no; 6 private long balance; 7 //追加 8 private Day o_date; 9 10 Account(String name, String no, long balance, Day o_date) 11 { 12 this.name = name; 13 this.no = no; 14 this.balance = balance; 15 //追加 16 this.o_date = new Day(o_date); 17 } 18 19 public String getName() { return name; } 20 public String getNo() { return no; } 21 public long getBalance() { return balance; } 22 void deposit(long k) { balance += k; } 23 void withdraw(long k) { balance -= k; } 24 25 //追加 26 public Day getODate() 27 { 28 return new Day(o_date); 29 } 30} 31 32class AccountTester 33{ 34 public static void main(String[] args) 35 { 36 Account adachi = new Account("足立太郎", "123456", 1000, new Day(2015, 12, 25)); 37 Account nakata = new Account("中田次郎", "654321", 200, new Day(2015, 11, 11)); 38 39 System.out.println("===足立太郎の口座==="); 40 System.out.println("口座名義:" + adachi.getName()); 41 System.out.println("口座番号:" + adachi.getNo()); 42 System.out.println("預金残高:" + adachi.getBalance()); 43 System.out.println("口座開設日:" + adachi.getODate().toString()); 44 45 System.out.println("===中田次郎の口座==="); 46 System.out.println("口座名義:" + nakata.getName()); 47 System.out.println("口座番号:" + nakata.getNo()); 48 System.out.println("預金残高:" + nakata.getBalance()); 49 System.out.println("口座開設日:" + nakata.getODate()); 50 } 51}
投稿2015/12/26 07:29
総合スコア23
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
質問者です
演習9−3
- 第8章で作成した<<銀行口座クラス>>に、口座開設日のフィールドとtoStringメソッド
を追加せよ。
※コンストラクタを変更したり、口座開設日のゲッタ(口座開設日フィールドが参照する日付インスタンスのコピーを返す)などのメソッドを追加したりすること。
Java
1//銀行口座クラス 2class Account 3{ 4 private String name; 5 private String no; 6 private long balance; 7 8 Account(String name, String no, long balance) 9 { 10 this.name = name; 11 this.no = no; 12 this.balance = balance; 13 } 14 15 public String getName() { return name; } 16 public String getNo() { return no; } 17 public long getBalance() { return balance; } 18 void deposit(long k) { balance += k; } 19 void withdraw(long k) { balance -= k; } 20} 21 22class AccountTester 23{ 24 public static void main(String[] args) 25 { 26 Account adachi = new Account("足立太郎", "123456", 1000); 27 Account nakata = new Account("中田次郎", "654321", 200); 28 29 System.out.println("===足立太郎の口座==="); 30 System.out.println("口座名義:" + adachi.getName()); 31 System.out.println("口座番号:" + adachi.getNo()); 32 System.out.println("預金残高:" + adachi.getBalance()); 33 34 System.out.println("===中田次郎の口座==="); 35 System.out.println("口座名義:" + nakata.getName()); 36 System.out.println("口座番号:" + nakata.getNo()); 37 System.out.println("預金残高:" + nakata.getBalance()); 38 } 39}
Java
1//日付クラス 2class Day 3{ 4 private int year; 5 private int month; 6 private int date; 7 8 public Day(int year, int month, int date) { set(year, month, date); } 9 public Day(Day d) { set(d.year, d.month, d.date); } 10 11 public int getYear() { return year; } 12 public int getMonth() { return month; } 13 public int getDate() { return date; } 14 15 public void setYear(int year) { this.year = year; } 16 public void setMonth(int month) { this.month = month; } 17 public void setDate(int date) { this.date = date; } 18 19 public void set(int year, int month, int date) 20 { 21 this.year = year; 22 this.month = month; 23 this.date = date; 24 } 25 26 int dayOfWeek() 27 { 28 int y = year, m = month; 29 30 if(m == 1 || m == 2) 31 { 32 y--; 33 m += 12; 34 } 35 36 return ((y+y / 4-y / 100+y / 400+(13*m+8) / 5 + date) % 7); 37 } 38 39 public String toString() 40 { 41 String[] wd = {"日", "月", "火", "水", "木", "金", "土"}; 42 return String.format("%04d年%02d月%02d日(%s)", year, month, date, wd[dayOfWeek()]); 43 } 44}
このような内容なのですが、この演習の前に日付に関するDayクラスを作っているため、そちらを使えば銀行口座クラスにtoStringメソッドを作る必要がないように思えます。それともDayクラスを使わずに口座開設日を表示させることが目的なのでしょうか?
プログラミングは初心者なので、著者の意図を汲み取れない状況です。
是非よろしくお願いします。
投稿2015/12/26 04:38
総合スコア23
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2015/12/26 05:12
2015/12/26 07:01
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。