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

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

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

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

Q&A

解決済

1回答

858閲覧

クラスをまたいで変数を評価する方法がわかりません。

eak_a

総合スコア2

Java

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

0グッド

2クリップ

投稿2021/10/05 03:00

編集2021/10/05 10:00

前提・実現したいこと

Java初心者です。
2点が等しいかどうかを判定するメソッドと、X-Y平面上での2点間の傾きを求めるメソッドと、2点間の距離を求めるメソッドをMyPointクラスに追加したいのですが、MyPointTestクラスに書き込んでならできるんですが、MyPointクラスに追加するとなると、objとobj2が等しいかどうかの判定やobjのxだけを引っ張ってくるなどをするためのコードの書き方がわかりません。

該当のソースコード

Java

1//MyPointクラスの定義 2class MyPoint{ 3 //フィールド(インスタンス変数) 4 int x; 5 int y; 6 int z; 7 //メソッド(座標を表示) 8 void display() { 9 System.out.println("(x,y,z) =" + " (" +x + ","+ y + "," + z +")"); 10 } 11 //メソッド(座標を設定) 12 void setData(int a,int b,int c) { 13 x = a; 14 y = b; 15 z = c; 16 } 17 //メソッド(x座標を取得) 18 int getX() { 19 return x; 20 } 21 //メソッド(y座標を取得) 22 int getY() { 23 return y; 24 } 25 //メソッド(z座標を取得) 26 int getZ() { 27 return z; 28 } 29 //メソッド(2点が等しいかどうか判定する) 30 void comparePoints() { 31 32 } 33} 34 //MyPointTestクラスの定義 35 class MyPointTest{ 36 //メインメソッド 37 public static void main(String[] args) { 38 //MyPointインスタンスの生成 39 MyPoint obj = new MyPoint(); 40 MyPoint obj2 = new MyPoint(); 41 //メソッドの呼出し 42 System.out.println("Set(5,10,15)"); 43 obj.setData(5,10,15); 44 obj.display(); 45 System.out.println("Set(7,64,9)"); 46 obj2.setData(7,64,9); 47 System.out.println("Return x :" + obj2.getX()); 48 System.out.println("Return y :" + obj2.getY()); 49 System.out.println("Return z :" + obj2.getZ()); 50 51 } 52 } 53 54Javaのソースコード

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

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

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

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

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

Zuishin

2021/10/05 03:10

> クラスをまたいで変数を評価する方法がわかりません。 クラスのインスタンスを作り、そのメソッドに引数として渡す。
m.ts10806

2021/10/05 03:10

コードはマークダウンのcodeにてご提示ください
jimbe

2021/10/05 03:24

> 2点が等しいかどうかを判定するメソッド につきましては、(文字列の比較に良く使われる) "equals()" というメソッドの override が推奨されると思います。
eak_a

2021/10/05 05:14

具体的にどのようなコードをかけばうまくいくでしょうか
Zuishin

2021/10/05 05:17

え? インスタンスもメソッドも引数もわからないなら調べたら?
m.ts10806

2021/10/05 05:21

つまり、今提示されてるコードもいまいち理解できてないと
eak_a

2021/10/05 07:33

>え? インスタンスもメソッドも引数もわからないなら調べたら? Javaを学習し始めて日が浅いので理解が深くないですが自分でも調べているつもりです。 > つまり、今提示されてるコードもいまいち理解できてないと "equals()" というメソッドは知っているのですが、クラスをまたいでいるobjとobj2をどのような書いたら等しいかどうかを評価できるのかが調べてもよくわからなかったのでここに質問させてもらってます。
eak_a

2021/10/05 07:36

> コードはマークダウンのcodeにてご提示ください ここで質問するのが初めてなので知りませんでした。以後気を付けます
Zuishin

2021/10/05 07:50

> Javaを学習し始めて日が浅いので理解が深くないですが自分でも調べているつもりです。 調べてすぐわからないほど難しいものじゃないし、入門書をちゃんと読んだなら必ず書いてあるんだけど。 手を抜かず入門書を買って一からやったら? 飛び級できるほど優秀ってわけじゃないんでしょ?
m.ts10806

2021/10/05 08:46

質問は編集できるので今対応願います。いつくるか分からない次に回してたら忘れます
eak_a

2021/10/05 08:59

> 質問は編集できるので今対応願います。いつくるか分からない次に回してたら忘れます 勉強になりました。ありがとうございます。
dodox86

2021/10/05 09:44

マークダウン記法ですが、より正確には```プログラミング言語名 ~```のように括ります。 ```Java Javaのソースコード ``` のように使います。"//MyPointクラスの定義"が消えていますね。
eak_a

2021/10/05 10:00

>マークダウン記法ですが、より正確には```プログラミング言語名 ~```のように括ります。 ```Java Javaのソースコード ``` のように使います。"//MyPointクラスの定義"が消えていますね。 丁寧に教えていただきありがとうございます。
dodox86

2021/10/05 10:07

余談ですが、「マークダウン記法」と言っても方言、亜種があり、```(プログラミング言語) の書き方はteratail内でしか通用しない場合があります。ですが大体同じなので知っておくと得です。また、プログラミング言語の部分も全てのプログラミング言語に対応している訳ではありません。
eak_a

2021/10/05 10:09

>余談ですが、「マークダウン記法」と言っても方言、亜種があり、```(プログラミング言語) の書き方はteratail内でしか通用しない場合があります。ですが大体同じなので知っておくと得です。また、プログラミング言語の部分も全てのプログラミング言語に対応している訳ではありません。 詳しく教えていただきありがとうございます。
m.ts10806

2021/10/05 11:05

dodox86さん いつからか「シンタックスハイライト対応してない文字列はそのままタイトルに出る」ようになりました。 こういうまとめ投稿もありましたね。 https://teratail.com/questions/7119
m.ts10806

2021/10/05 11:06

eak_aさん ``` ~~はあくまで「プログラムのコード、エラー」を提示するためのものでマークダウンとはそもそも「Web上の文章表現の方法」です。 見出しとか太字とかリンクとか、そこはヘルプ見てください。
guest

回答1

0

ベストアンサー

質問者eak_aさんの質問への追記・修正の依頼欄[2021/10/05 16:33]のコメントより:

"equals()" というメソッドは知っているのですが、クラスをまたいでいるobjとobj2をどのような書いたら等しいかどうかを評価できるのかが調べてもよくわからなかった

更に、コメントしてくださっている皆さんに言われている「引数にクラスのインスタンスを渡す」とは例えばこういうことです。

Java

1class Hoge { 2 int value1; 3 4 void method(Hoge fuga) { 5 // 自クラスのインスタンスを引数に。 6 if (this.value1 == fuga.value1) { 7 // 何か色々する。 8 } 9 } 10}

これは別に特別なことではなくて、例えばStringクラスのメソッドでも頻繁にそのような使われ方をします。compareToconcat、その他のメソッドのリファレンスをあたってみてください。

String - JavaSE 8

で、これを質問者さんの現状のコードになぞらえてみますと、compareToequalsは例えば以下のコードのようになるでしょう。全掲します。

Java

1class MyPoint{ 2 //フィールド(インスタンス変数) 3 int x; 4 int y; 5 int z; 6 //メソッド(座標を表示) 7 void display() { 8 System.out.println("(x,y,z) =" + " (" +x + ","+ y + "," + z +")"); 9 } 10 //メソッド(座標を設定) 11 void setData(int a,int b,int c) { 12 x = a; 13 y = b; 14 z = c; 15 } 16 //メソッド(x座標を取得) 17 int getX() { 18 return x; 19 } 20 //メソッド(y座標を取得) 21 int getY() { 22 return y; 23 } 24 //メソッド(z座標を取得) 25 int getZ() { 26 return z; 27 } 28 //メソッド(2点が等しいかどうか判定する) 29 void comparePoints() { 30 // えーと、比較した結果はどうするのでしょう?? 31 } 32 33 // 比較して、同じなら0、違うなら非0、ここでは1を返す。 34 // うまく作れば将来的にsortなどに使える。 35 int compareTo(MyPoint another) { 36 int differ = 0; 37 if (this.x != another.x 38 || this.y != another.y 39 || this.z != another.z) { 40 differ = 1; 41 } 42 43 return differ; 44 } 45 46 // オブジェクトが同じかどうかを返すequals()をオーバーライド 47 @Override 48 public boolean equals(Object anObject) { 49 if (this == anObject) { 50 return true; 51 } 52 53 boolean result = false; 54 if (anObject instanceof MyPoint) { 55 result = compareTo((MyPoint)anObject) == 0 ? true: false; 56 } 57 58 return result; 59 } 60} 61 62//MyPointTestクラスの定義 63class MyPointTest{ 64 //メインメソッド 65 public static void main(String[] args) { 66 //MyPointインスタンスの生成 67 MyPoint obj = new MyPoint(); 68 MyPoint obj2 = new MyPoint(); 69 //メソッドの呼出し 70 System.out.println("Set(5,10,15)"); 71 obj.setData(5,10,15); 72 obj.display(); 73 System.out.println("Set(7,64,9)"); 74 obj2.setData(7,64,9); 75 System.out.println("Return x :" + obj2.getX()); 76 System.out.println("Return y :" + obj2.getY()); 77 System.out.println("Return z :" + obj2.getZ()); 78 79 // では評価してみましょう。 80 System.out.println("obj.compareTo(obj) :" + obj.compareTo(obj)); 81 System.out.println("obj.equals(obj) :" + obj.equals(obj)); 82 System.out.println("obj.compareTo(obj2) :" + obj.compareTo(obj2)); 83 System.out.println("obj.equals(obj2) :" + obj.equals(obj2)); 84 85 // objと同じ内容で生成してみましょう。 86 MyPoint obj3 = new MyPoint(); 87 obj3.setData(5,10,15); 88 System.out.println("obj.compareTo(obj3) :" + obj.compareTo(obj3)); 89 System.out.println("obj.equals(obj3) :" + obj.equals(obj3)); 90 } 91} 92

これをWindowsのコマンドプロンプト上で実行すると以下のような出力を得ます。尚、Javaのバージョンは11です。

CMD

1C>javac MyPointTest.java 2 3C>java MyPointTest 4Set(5,10,15) 5(x,y,z) = (5,10,15) 6Set(7,64,9) 7Return x :7 8Return y :64 9Return z :9 10obj.compareTo(obj) :0 11obj.equals(obj) :true 12obj.compareTo(obj2) :1 13obj.equals(obj2) :false 14obj.compareTo(obj3) :0 15obj.equals(obj3) :true 16 17C>

あとの「2点間の傾きを求める」、「2点間の距離を求める」については、これの応用でできるはずですね。

投稿2021/10/05 10:38

編集2021/10/05 10:42
dodox86

総合スコア9256

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

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

dodox86

2021/10/05 10:48

コメントでも指摘をいただいていますが、適切な入門書であれば順を追ってどこかで必ずこのような使われ方を説明する章があると思います。目の前の課題をこなすだけのようなことではなく、「勉強」の為であれば、結局それが一番の近道です。
dodox86

2021/10/05 10:53

これは > result = compareTo((MyPoint)anObject) == 0 ? true: false; これでも良かった。大差ないけど。 > result = compareTo((MyPoint)anObject) == 0; 初心の方にはもしかしたら「何これ?」かもしれませんね。
eak_a

2021/10/06 08:14

とても分かりやすかったです。 もう一度クラスやメソッドのあたりの章を見直してみます。 ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問