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

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

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

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

Q&A

解決済

2回答

1205閲覧

タワーのプログラム Recursive program

TomofumiKimura

総合スコア65

Java

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

0グッド

0クリップ

投稿2017/03/18 06:39

編集2017/03/18 22:58

別のメインクラスでchar のAを加えたんですが、top が未だに空なのですが、どうしてかわかりません。

t0.add('A');とした場合には、
add (char block){
return new Tower(block, this);
} なので、t0のトップは'A'になり、t0のrest にはt0が入ると理解しているのですが、間違っているんでしょうか?確認してもtopは空になっています。

Main.java

1public static void main(String [] args){ 2Tower t0 = new Tower(); 3t0.add('A'); 4System.out.println(t0.isEmpty()); 5 6 7}

Java

1 2 3 4/** 5 * A recursive representation of a tower of blocks. 6 * 7 * @author Michael Albert 8 */ 9public class Tower{ 10 11 /** The top block. */ 12 private char top; 13 14 /** The rest of the tower. */ 15 private Tower rest; 16 17 /** 18 * Creates a new empty Tower. 19 */ 20 public Tower() { 21 this.top = ' '; 22 this.rest = null; 23 } 24 25 /** 26 * External classes can only create empty towers and manipulate 27 * them using public methods, because this constructor is 28 * private. 29 * @param top the top block in this tower 30 * @param rest the rest of the tower 31 */ 32 private Tower(char top, Tower rest) { 33 this.top = top; 34 this.rest = rest; 35 } 36 37 /** 38 * Returns true if this tower is empty, otherwise false. Empty 39 * towers are represented with the top block being a space 40 * character. 41 * @return whether the tower is empty or not. 42 */ 43 public boolean isEmpty() { 44 return top == ' '; 45 } 46 47 /** 48 * Creates a new tower by adding the given block to the top of 49 * this tower. 50 * @param block a block to add to the top of this tower. 51 * @return a new tower created by adding a block to the top of 52 * this tower. 53 */ 54 public Tower add(char block) { 55 return new Tower(block, this); 56 } 57 /** 58 * A method that returns an int equal to the height, 59 * i.e., number of blocks, in the tower. 60 * @return an int equal to the height. 61 */ 62 63 public String toString(){ 64 return "this Tower is " + this.top; 65 66 } 67// the number of blocks , in the tower. 68// return int equal to the height 69// ブロックの数をint でリターンする 70public int height(){ 71??? 72} 73 74 75} 76

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

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

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

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

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

can110

2017/03/18 07:54

理解されているのであれば「タワーの構造」および「タワーの高さ」について質問本文にて明示ください。
akabee

2017/03/18 09:38

これはタワークラスの定義ですね。このコード内に高さの定義はありません。このクラスのインスタンス化を実施したときに高さを与えることができるようです。高さを与えてのインスタンス化はaddメソッドで実行されるように見えます。なぜtopの数を出したいと考えておられるのか等、もう少し補足をお願いいたします
guest

回答2

0

ベストアンサー

質問を編集されたようですので回答します。

>別のメインクラスでchar のAを加えたんですが、top が未だに空なのですが、どうしてかわかりません。
addメソッドは新しいTowerオブジェクトを返すようです。
t1 = t0.add('A');
として、t1のtopを調べてみてください。t1のtopにはAが入っているのではないでしょうか。

投稿2017/03/19 05:51

akabee

総合スコア1947

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

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

TomofumiKimura

2017/03/19 06:02

ありがとうございます。自分どうかしてました。
guest

0

ご質問にあるコードの作者は再帰的構造で塔を表現したかったようですが、構造が単純なのでループでも再帰的アルゴリズムでも難易度は大きく変わりません。

この問題が難しく感じる原因が以下なら基礎の勉強あるいはもっと単純な例から練習してみることをお勧めします。

「Javaでどうやってオブジェクトをアクセスすればいいのかわからない」
「Javaの制御構文をどう書けばいいのかわからない」
「アルゴリズムをどうやって組めばいいのかわからない」

しかし、質問のタイトルの雰囲気から「ループでなら書けるが再帰的アルゴリズムがわからない」ということかも知れません。もしそうならループによるご自分のコードを添えて「再帰にするにはどうすればいいかわからない」と質問すればそこに着目したアドバイスが得られると思います。まるなげ質問は敬遠されますが「ループで書けたが再帰がわからない」となればアドバイスはつく気がします。


なおこのクラスのisEmptyの定義には若干違和感を感じるので書き直したい気もします。しかしそれは気にせず、とりあえず「addの引数には空白文字(' ')は渡してはならない」という程度を意識しておけば今のままでもよいでしょう。

投稿2017/03/18 11:44

KSwordOfHaste

総合スコア18394

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問