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

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

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

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

Q&A

解決済

2回答

1003閲覧

node ダブルリンクドリスト

coala

総合スコア8

Java

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

0グッド

0クリップ

投稿2021/05/05 00:21

編集2021/05/05 06:11

以下のコードについて質問なのですが、searchNodeメソッドの中でcurrent.dataとありますが、dataメソッド?はどこから来ましたか?
Nodeクラスの中のdataを使うことで特定のインデックス(int value)が指定された場合Nodeクラスのdataが出力されるということでしょうか。

参照(https://www.javatpoint.com/java-program-to-search-an-element-in-a-doubly-linked-list)

public class SearchList { //Represent a node of the doubly linked list class Node{ int data; Node previous; Node next; public Node(int data) { this.data = data; } } //Represent the head and tail of the doubly linked list Node head, tail = null; //searchNode() will search a given node in the list public void searchNode(int value) { int i = 1; boolean flag = false; //Node current will point to head Node current = head; //Checks whether the list is empty if(head == null) { System.out.println("List is empty"); return; } while(current != null) { //Compare value to be searched with each node in the list if(current.data == value) { flag = true; break; } current = current.next; i++; } if(flag) System.out.println("Node is present in the list at the position : " + i); else System.out.println("Node is not present in the list"); } public static void main(String[] args) { SearchList dList = new SearchList(); //Add nodes to the list dList.addNode(1); dList.addNode(5); dList.addNode(4); dList.addNode(2); dList.addNode(3); //Search for node 4 in the list dList.searchNode(4); //Search for node 9 in the list dList.searchNode(9); } }

追記
上記の参照を参考にすると上記のdataは以下のコードの中でtになるかと思いました。
Node.java

public class Node { public Node next; public Node prev; private String t; public Node(Node next, Node prev, String token) { this.next = next; this.prev = prev; this.t = token; } }

test.java

public class DSEList implements List { public Node head; public Node tail; // ?original private? // keeping track of size public int size; // step one public DSEList() { } public DSEList(Node head_) { head = head_; } //Takes a list then adds each element into a new list public DSEList(DSEList other) { // Copy constructor. head = other.head; } public String get(int index) { if(index < 0 || index >= size) { throw new ArrayIndexOutOfBoundsException(Integer.toString(index)); } Node current = head; for(int i = 0; i < index; i++) { current = current.next; } return current.t; } public String getString() { return t; } @Override public boolean equals(Object other) { if (this == other) return true; if (other == null) return false; if (!(other instanceof Node)) return false; return t.equals(((Node)other).getString()); } @Override public int hashCode() { if ( t == null ) return 0; return t.hashCode(); } }

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

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

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

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

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

guest

回答2

0

ベストアンサー

dataはメソッドでなくて、メンバ変数としてアクセスされています。

java

1current.data == value

どこから来たと言われても、定義にあるし、コンストラクタで設定もされています

java

1 //Represent a node of the doubly linked list 2 3 class Node{ 4 int data; 5 Node previous; 6 Node next; 7 8 public Node(int data) { 9 this.data = data; 10 } 11 }

このdataはノードが持つ「値」を格納するためのものです。

「特定のインデックス(int value)が指定された場合Nodeクラスのdataが出力されるということでしょうか」
与えられているのはインデックスではなくで探したいNodeの値を指定します。searchNodeでは、先頭から一つずつ確認して、指定された値を持つNodeがあるかどうか確認して、結果を表示します。

投稿2021/05/05 01:03

TakaiY

総合スコア13847

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

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

coala

2021/05/05 01:48

早々にご回答ありがとうございます。 プログラミングを始めてまだ経験が浅くて申し訳ありません。 メンバ変数この場合、 int data; Node previous; Node next; をメソッドのように使うとnodeのdataが取得できること初めて知りました。 上記の参照を参考に私のプログラミングでも同じことをしたのですが、nodeのdataが取得できませんでした。 上記にコードを追記させていただきました。 アドバイスいただけないでしょうか。 よろしくお願い致します。
TakaiY

2021/05/05 04:03

「メソッドのように使」っていません。メソッドのように使うというのは、 通常、current.data()のように ()を付けることです。 また、current.data のようにしてして値を取得するのは基本ですので、先に進める前に、クラスのインスタンスの扱いをもう一度見直すことをお勧めします。 「私のプログラミングでも同じことをしたのですが、nodeのdataが取得できませんでした。」は具体的に、どのような結果を期待していて、どのような結果が得られたのかを追記ください。コードだけ見てうまくいかないと言わけれもアドバイスできません。
coala

2021/05/05 06:06

クラスのインスタンスの扱いもう一度見直してみます! 私のプログラミングでNodeクラスでString t;が定義されていると思うのですが、test.javaの中でgetメソッドを使ってNodeのtを取得したいと思っています。 説明が上手ではなくて申し訳ありません。
coala

2021/05/05 06:46

クラスのインスタンスを見直したら原因がわかりました!アドバイスありがとうございます。
guest

0

dataメソッド?はどこから来ましたか?

いえ、提示されたコードにもあるように、Nodeクラスのフィールドです。

Nodeクラスの中のdataを使うことで特定のインデックス(int value)が指定された場合Nodeクラスのdataが出力されるということでしょうか。

いえ、もっと単純に「Nodeクラスのdataフィールドを参照している」だけの理解で良いのでは?

提示されたコードを見る限り、Nodeクラスはコンストラクタでdataに値をセットしていますし。

抜粋

java

1 class Node{ 2 int data; //dataフィールド 3 Node previous; 4 Node next; 5 6 public Node(int data) { 7 this.data = data; //コンストラクタでdataフィールドに初期値セット 8 } 9 } 10

あとは割と英文で書かれているコメント通りに思います。
そこまで難解な文でもないのでGoogle翻訳にでもかけて読んでみては。

投稿2021/05/05 01:07

編集2021/05/05 01:08
m.ts10806

総合スコア80875

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問