質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.49%
Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Q&A

4回答

5293閲覧

明解Java入門編演習9−3

退会済みユーザー

退会済みユーザー

総合スコア0

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

0グッド

0クリップ

投稿2015/12/25 18:37

この演習はDayクラスを使わずに行う演習なのでしょうか?
Dayクラスを使うのなら、銀行口座クラスにtoStringメソッドを作る理由が分かりません。
また、もしDayクラスを使わない場合、toStringメソッドで購入日の表示に使うyear, month, dateといった変数は銀行口座クラスのフィールドに追加して行うのでしょうか?
今のところ、Dayクラスと同じtoStringメソッドを銀行口座クラスに使っているため、そこで使われているyear, month, date変数でエラーが出てしまいます

分かる方いらっしゃいましたら、是非ともご教示賜りたいです。
よろしくお願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

swordone

2015/12/25 23:08

その本を持っていないので、問題の内容およびコードが分かりません。ここに記載してください。
退会済みユーザー

退会済みユーザー

2015/12/26 10:52

こちらの質問が他のユーザから「質問の範囲が広すぎる」という評価を受けています わからない点を明確にし、調査したこと・試したことと共に記入していただくと、回答が得られやすくなります。
guest

回答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

tatataro

総合スコア23

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

swordone

2015/12/26 16:26

そもそもformatの使い方がおかしい気がしますが…
guest

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
hyper-drums-ko

総合スコア736

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

tatataro

2015/12/26 08:21

銀行口座クラスのtoStringの中で日付クラスのtoStringを呼べばよかったんですね! ありがとうございます! ただ、hyper-drums-koさんのtoStringメソッドではreturn文がないためエラーになりました。 StringBuilder()というものは使ったことがないため、printlnで代用しようとしたのですが、同じくreturnをどうしたら良いのか分かりませんでした。
hyper-drums-ko

2015/12/26 08:48

失礼しました。。。 修正しました。
tatataro

2015/12/26 11:51

ありがとうございます。 よくよく考えたらreturnで返さなくても実行されているため、表示させたい最後の1文をreturnで返せば問題なく動いてくれました。
guest

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

tatataro

総合スコア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

tatataro

総合スコア23

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2015/12/26 05:12

意図は銀行口座クラスと日付クラスを関連付けろってことなんじゃないですか? 今の時点では銀行口座情報として口座開設日がないから、それを日付クラス使ってフィールドを追加しろということかと。 その際のtoStringメソッドは銀行口座情報すべてを出力しろってことなのかと。 まぁ本持ってないのでわかりませんが。
tatataro

2015/12/26 07:01

銀行口座クラスにtoStringメソッドを追加する場合、どうやってDayクラスのyear, month, dateを持ってくるのでしょうか? Dayクラスのgetメソッドを使いたいのですが、toStringメソッドの中でインスタンスを指定できない?ので困っています。 (toStringメソッドの中で、adachi.getYear()やnakata.getMonth()のadachiやnakataの部分の指定ができない)
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.49%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問