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

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

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

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

Q&A

2回答

1207閲覧

java instnaceof演算子の使い方

sindemasuka

総合スコア6

Java

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

0グッド

0クリップ

投稿2018/01/29 12:30

q1とq2の二点間の距離の実行結果が異なっているため、クラスPoint2Dをinstnaceof演算子を用いて修正を行い、二点間の距離の実行結果を同じにしたいです。

ソースコード
public class Point {
protected int x =1;
Point(){}
Point(int x){this.x=x;}
double distance() {return Math.sqrt(xx);}
double distance(Point b) {
int dx;
dx = this.x-b.x;
return Math.sqrt(dx
dx);

} public String toString() { return String.format("(%d)", x); }

}

public class Point2D extends Point {
protected int y = 1;
Point2D(){}
Point2D(int x,int y){super(x);this.y=y;}
double distance() {return Math.sqrt(xx+yy);}
double distance(Point2D b) {
int dx,dy;
dx=this.x-b.x;
dy=this.y-b.y;
return Math.sqrt(dxdx+dydy);
}

public String toString() {return String.format("(%d,%d)", x,y);}

}

public class PointTester {

public static void main(String[] args) { Point2D q1=new Point2D(1,-1); Point q2 = new Point2D(0,1); System.out.println("二点間の距離は"+q1.distance(q2)); System.out.println("二点間の距離は"+q1.distance((Point2D)q2)); }

}

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

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

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

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

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

guest

回答2

0

実行結果が違う…というより、そもそも

java

1System.out.println("二点間の距離は"+q1.distance(q2));

はコンパイルエラーになるのではないですか?

投稿2018/01/29 17:04

swordone

総合スコア20651

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

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

0

問題やクラスの定義について記述が足りないですが、
ここでは『Point2Dクラスは平面上の点、Pointクラスはx軸上の点を表す』と仮定します。

それならば、**Point2DがPointを継承しているのはおかしいです。**逆です。
前者の方がより汎化的な概念であり、特殊化されるべきは後者だからです。


クラスPoint2Dをinstnaceof演算子を用いて修正を行い、二点間の距離の実行結果を同じにしたいです。

なぜオーバーロードより先にinstanceof演算子の利用を検討するのでしょうか?
その考えに至った説明がないのでわかりません。


どこからオリジナルのコードなのかわかりませんが、このあたりを再整理してください。
上手く説明できないのならば、まだ問題への理解が足りないのです。

なお、Point2Dさえしっかり組んでしまえば、Point1Dの追加も簡単です。

Java

1class MyPoint1D extends MyPoint2D { 2 MyPoint1D(int x) { 3 super(x, 0); 4 } 5}

これで充分。

その他気になったこと

Math.sqrt(dx*dx)Math.abs(dx)で充分。
Math.sqrt(dx*dx+dy*dy)Math.hypot(dx, dy)で充分。


引数のないdistanceの意味合いが分かりづらいです。
原点Oとの距離という意味なら、次のように書いた方が分かりやすいんじゃないかなぁ。

Java

1static final MyPoint2D orizin = new MyPoint2D(0, 0); 2double distance() { 3 return this.distance(orizin); 4}

コードの貼り方について

teratailには、上記のようにコードを見やすく表示する機能があります。
質問編集画面を開き、コードを選択した状態で<code>ボタンを押してください。

この機能が使われていない質問には回答しない方針の方もいらっしゃいます。

投稿2018/01/29 12:46

編集2018/01/29 13:26
LouiS0616

総合スコア35660

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問