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

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

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

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

Q&A

1回答

1563閲覧

線分の幅を形成する

indehi

総合スコア7

Java

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

0グッド

0クリップ

投稿2016/07/03 14:19

編集2016/07/03 15:54

以下の問題のプログラムを書きたいのですが、どうも頭がこんがらがってわかりません。

lang

1public class LineSegment{ 2 private double x, y; 3 private double x1, y1; 4 5 public LineSegment(double x, double y){ 6 this.x = x; 7 this.y = y; 8 } 9 public void linearTransfer(){ 10 this.x1 = 6 * this.x + 4 * this.y; 11 this.y1 = -2 * this.x + this.y; 12 } 13 public final double getX1(){ 14 return x1; 15 } 16 public final double getY1(){ 17 return y1; 18 } 19} 20 class ThickLineSegment extends LineSegment{ 21 ThickLineSegment(double x1, double y1,double x2,double y2){ 22 super(x1,y1); 23 super(x2,y2); 24 } 25 ThickLineSegment(double x, double y,int w){ 26 super(x,y); 27 this.setWidth(w); 28 } 29 ThickLineSegment(double x1, double y1,double x2,double y2,int w){ 30 super(x1,y1); 31 super(x2,y2); 32 this.setWidth(w); 33 } 34 void setWidth(int w){ 35 int awidth=w; 36 } 37 38} 39 40

ここまで書いたんですが、どう改良したらうまく動くのか。。。

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

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

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

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

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

guest

回答1

0

まず、

java

1ThickLineSegment(double x1, double y1,double x2,double y2){ 2 super(x1,y1); 3 super(x2,y2); 4}

super()のコンストラクタ呼び出しはコンストラクタの最初にしか書けないので、このように2行続けて書くことはできません。
要件の一つにあるwidthも見当たりません。makeForm,toStringの実装もめちゃくちゃです。
しかし腑に落ちないのが、これではThickLineSegmentクラスからどうやってもLineSegmentクラスの「もう一方の端点」の情報と思われるx1,y1に値を設定することができないということ。LineSegmentクラスもいじれるんですかね?


LineSegmentもいじれるとのことなので改良策を。
そもそも「線分」というからには始点・終点を設定するのが本来の姿のはずなので、始点・終点を設定するコンストラクタをLineSegmentに実装させる。

java

1public class LineSegment{ 2 private double x, y; //始点 3 private double x1, y1; //終点 4 5 public LineSegment(double x, double y){ 6 this(x, y, 0.0, 0.0); 7 } 8 9 public LineSegment(double x, double y, double x1, double y1){ 10 this.x = x; 11 this.y = y; 12 this.x1 = x1; 13 this.y1 = y1; 14 } 15}

で、これを継承したThickLineSegmentでは幅を設定すればいいだけにする。

java

1class ThickLineSegment extends LineSegment{ 2 3 int width; 4 5 ThickLineSegment(double x1, double y1, double x2, double y2){ 6 this(x1, y1, x2, y2, 1); 7 } 8 ThickLineSegment(double x, double y, int w){ 9 this(x, y, 0.0, 0.0, w); 10 } 11 12 ThickLineSegment(double x1, double y1, double x2, double y2,int w){ 13 super(x1, y1, x2, y2); 14 setWidth(w); 15 } 16 17 public void setWidth(int w){ 18 width = w; 19 } 20}

makeFormの要件は、ご自身のコードの条件の部分をよく見てください。
toStringの要件がよくわからないのですが…

投稿2016/07/03 14:31

編集2016/07/03 17:54
swordone

総合スコア20651

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

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

indehi

2016/07/03 14:37

そうなんですね。確かにこのままじゃダメですよね。 もともとLineSegmentも自分で書いたものなので変えても大丈夫です。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問