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

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

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

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

Q&A

解決済

3回答

1865閲覧

コードの改良余地について。

youhey1234

総合スコア14

Java

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

0グッド

0クリップ

投稿2015/07/08 00:24

編集2015/07/08 01:23

下記にあるコードは
四角形を9個作り、点が存在する四角形を青で塗り潰すコードなんですが、
一応これで思った通りに実行されます。

ですが、オブジェクト指向ではないような気がします。
何かもっと簡潔にコードをかけないでしょうか?

初心者なのでお手柔らかにお願いします。

lang

1package 問題; 2import java.awt.Color; 3import java.awt.Graphics; 4import java.awt.Point; 5import java.awt.Rectangle; 6import javax.swing.JFrame; 7 8 9 10public class CD591216Fujikake118 extends JFrame{ 11 12 private static final long serialVersionUID = 1L; 13 Rectangle rec = new Rectangle(70,70,70,70); // 四角形 14 Point p = new Point(0,0); // 座標 15 16 public CD591216Fujikake118(){ 17 setTitle("課題4"); 18 setSize(360,340); 19 setDefaultCloseOperation(EXIT_ON_CLOSE); 20 } 21 22 /*** paint():ウィンドウに描画するコードを記述する ***/ 23 public void paint(Graphics g){ 24 super.paint(g); 25 //円の座標の設定(x,y) 26 int ran1=(int)(Math.random()*210+70); 27 int ran2=(int)(Math.random()*210+70); 28 p.setLocation(ran1, ran2); 29 30 //九つの 四角形の描画 31 for(int j=0;j<210;j+=70){ 32 for(int i=0;i < 210;i += 70){ 33 34 g.drawRect(rec.x+i, rec.y+j, rec.width, rec.height); 35 36 37 //該当する四角を塗りつぶす 38 if(rec.x+i < p.x & rec.x+i+70 > p.x & 39 rec.y+j < p.y & rec.y+j+70 > p.y){ 40 g.setColor(Color.blue); 41 g.fillRect(rec.x+i, rec.y+j, rec.width, rec.height); 42 g.setColor(Color.black); 43 }//Point!もう一度黒に戻す! 44 } 45 } 46 //円の描写 47 g.fillOval(p.x, p.y, 10, 10); 48 } 49 50 /*** main ***/ 51 public static void main(String[] args){ 52 JFrame f = new CD591216Fujikake118(); 53 f.setVisible(true); 54 } 55}

ちなみにこの部分です。

lang

1//該当する四角を塗りつぶす 2 if(rec.x+i < p.x & rec.x+i+70 > p.x & 3 rec.y+j < p.y & rec.y+j+70 > p.y){ 4 g.setColor(Color.blue); 5 g.fillRect(rec.x+i, rec.y+j, rec.width, rec.height); 6 g.setColor(Color.black); 7 }//Point!もう一度黒に戻す! 8

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

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

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

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

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

guest

回答3

0

ベストアンサー

このままで良いと思います。
オブジェクト指向の「指向」はあくまでも目指す方向であり、
目的が達せられているなら無理に実装することはない・・・と昔言われました。

オブジェクト指向とは別ですが、四角形の辺の長さの70という数字は
いわゆるマジックナンバーですので定数としてもいいかなと思います。

private static final int SIDE_LENGTH = 70;

投稿2015/07/08 02:42

just

総合スコア90

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

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

0

オブジェクト指向ではありませんが、コードを改良してみました。

Java

1import java.awt.Color; 2import java.awt.Dimension; 3import java.awt.Graphics; 4import java.awt.Point; 5import java.awt.Rectangle; 6import javax.swing.JFrame; 7 8 9public class NineBox extends JFrame{ 10 11 private static final long serialVersionUID = 1L; 12 private static final Point origin = new Point(70, 70); 13 private static final Dimension size = new Dimension(70, 70); 14 private final Rectangle[] recs = new Rectangle[9]; 15 private Point p = new Point(0,0); 16 17 18 public NineBox(){ 19 setTitle("課題4"); 20 setSize(360,340); 21 setDefaultCloseOperation(EXIT_ON_CLOSE); 22 23 for(int i = 0; i < 9; i++) { 24 int x = i%3*size.width+origin.x; 25 int y = i/3*size.height+origin.y; 26 int width = size.width; 27 int height = size.height; 28 recs[i] = new Rectangle(x, y, width, height); 29 } 30 31 randomMove(); 32 } 33 34 35 public void randomMove() { 36 int x=(int)(Math.random()*size.width*3+origin.x); 37 int y=(int)(Math.random()*size.height*3+origin.y); 38 p.setLocation(x, y); 39 } 40 41 42 public void paint(Graphics g){ 43 super.paint(g); 44 45 for (Rectangle rec : recs) { 46 g.setColor(Color.black); 47 g.drawRect(rec.x, rec.y, rec.width, rec.height); 48 if (rec.contains(p)) { 49 g.setColor(Color.blue); 50 g.fillRect(rec.x, rec.y, rec.width, rec.height); 51 } 52 } 53 54 g.setColor(Color.black); 55 g.fillOval(p.x, p.y, 10, 10); 56 } 57 58 59 public static void main(String[] args){ 60 JFrame f = new NineBox(); 61 f.setVisible(true); 62 } 63}

投稿2015/07/15 10:59

Stripe

総合スコア2183

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

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

youhey1234

2015/07/16 02:46

回答ありがとうございます! すごいきれいになっていて驚きました! 参考にさせて頂きます!
guest

0

このままでもよいとは思います。

もっとオブジェクト指向っぽくするなら、自分なら
「四角をつくって塗る処理をクラス化・メソッド分割」
して、外から呼び出すようにするかな。
そしたら、呼び出し側の記述はすっきりするし、
他の場所で必要になったときに、インスタンスをつくって呼び出すだけでできるから。

あくまで、個人的な考え・・・ってことで参考程度に思っていただけたら幸いです。

投稿2015/07/08 01:21

編集2015/07/08 01:22
kaputaros

総合スコア1844

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問