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

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

ただいまの
回答率

90.76%

  • Java

    13163questions

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

Nodeクラスの作成

解決済

回答 1

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 489

nabe_u

score 6

目的

以下のクラス図に示されるNodeクラスの作成

イメージ説明

問題点

イメージとしては、新しい要素が入ってきたら既存の要素を次のノードに移動させて保管する、というのは理解できました。ただ、それをどう表現するのかが分かりません。

ソースコード

    private Node next;
    private String date;

    public Node(String date) {
     //この部分
    }

    public Node setNext(Node node) {
     //この部分
        return node;
    }

    public Node getNext() {
     //この部分
        return next;
    }

    public String getDate() {
     //この部分
        return date;
    }

    public String toString() {
     //この部分 
        return date;
    }

    public static void main(String[] args) {
        Node alice   = new Node("Alice");
        Node bob     = new Node("Bob");
        Node charlie = new Node("Charlie");
        Node diana   = new Node("Diana");
        Node elmo    = new Node("Elmo");
        Node fred    = new Node("Fred");
        alice.setNext(bob).setNext(charlie).setNext(diana).setNext(elmo).setNext(fred);

        Node p = alice;
        while (p != null) {
            System.out.print(p + " -> ");
            p = p.getNext();
            }
        }

補足

toStringメソッドは、保持しているdataの前後に[ ] を付けた文字列を返します。
また、実行結果の例は以下のようになります。

[Alice] -> [Bob] -> [Charlie] -> [Diana] -> [Elmo] -> [Fred] ->

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

checkベストアンサー

+1

新しい要素が入ってきたら既存の要素を次のノードに移動させて保管する

これがよくわかりません。新しい要素が入ってきた、というのはsetNextのことでしょうか?nextをsetするのですから、「自身の持つnext変数に、渡されたNodeをセットする」が正しいsetNextの処理となります。「移動」というのがなにを指しているのでしょう?

alice.setNext(bob).setNext(charlie)のように「戻り値が次の処理へ繋がる書き方」を「メソッドチェーン」と呼びます。ここでは「次を設定、次の次を設定、次の次の次…」と「次の次」を延々繰り返す処理になっています。なので、setNextが返すべき値は「次」を返す、そしてその「次」のsetNextを呼ぶことで「次の次」を設定、という流れになっています。

いじる必要があるのは以下の2つのメソッドだけです。

public Node(String date) {
    this.date = date; // 外から受け取ったものをthisの変数へ移す。
}

public Node setNext(Node node) {
    this.next = node; // 外から受け取ったものをthisの変数へ移す。
    return node;
}


一個ずつ処理を追っていくと分かるかと思います。

// aliceという変数に、Nodeを入れる(Nodeのdateには"Alice"と入る)
Node alice   = new Node("Alice");
// 中略
alice.setNext(bob).setNext(charlie).setNext(diana).setNext(elmo).setNext(fred);
// aliceのnextにbobを設定、setNextが返すのはbob
// bobのnextにcharlieを設定、setNextが返すのはcharlie
// charlieのnextにdianaを設定、setNextが返すのはdiana(以下略)

あとdateだと日付なので、dataが正しいです。クラス図もdataになっているので直したほうがよいでしょう。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/10/30 21:53

    拙いコードと説明に対し、解説から細かい訂正まで、とても丁寧に回答していただきありがとうございます。
    回答通りに書き直したところ、無事実行結果例のように出力することができました。
    ありがとうございます。

    キャンセル

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

  • ただいまの回答率 90.76%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る

  • Java

    13163questions

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