classを使って座標軸を求めるコード

このQ&Aのポイント
  • やさしいJavaからの問題です。次のように、整数値の座標をあらわす MyPoint クラスを作成してください。
  • メソッドの順番を変えてもいいですか?
  • 教科書の関連の章ではreturnが先に来ているのですが、突然この問題ではvoidから始まっているのですが、int getX()~return y;までとvoid setX~y = py;までの部分の順番を変えてもいいですか?
回答を見る
  • ベストアンサー

classを使って座標軸を求めるコード

やさしいJavaからの問題です。 次のように、整数値の座標をあらわす MyPoint クラスを作成してください。 フィールド private int x; (X座標) private int y; (Y座標) メソッド public void setX(int px); (X座標を設定する) public void setY(int py); (Y座標を設定する) public int getX(); (X座標を得る) public int setY(); (Y座標を得る) という問題で、回答は以下の通りですが、 class MyPoint { int x; int y; void setX(int px) { x = px; } void setY(int py) { y = py; } int getX() { return x; } int getY() { return y; } } class Sample5 { public static void main(String[] args) { MyPoint p1; p1 = new MyPoint(); p1.setX(10); p1.setY(5); int px = p1.getX(); int py = p1.getY(); System.out.println("p1のX座標は" + px + "Y座標は" + py + "でした。"); } } 教科書の関連の章ではreturnが先に来ているのですが、突然この問題ではvoidから始まっているのですが、int getX()~return y;までとvoid setX~y = py;までの部分 の順番を変えてもいいですか?

  • Java
  • 回答数2
  • ありがとう数1

質問者が選んだベストアンサー

  • ベストアンサー
  • jjon-com
  • ベストアンサー率61% (1599/2592)
回答No.2

【M】class MyPoint{…内部の19行分省略…} 【S】class Sample5{…内部の12行分省略…} 上記の【M】と【S】は別のクラス。 コーディングする順序はどちらが先でどちらが後でもかまわない。 このプログラムの実行はどちらが先にコーディングされていようとも,public static void main()メソッドが定義されている【S】クラスのmain()メソッドから開始することになる。 -------- class MyPoint { int x; int y; 【A】void setX(int px){x = px;} 【B】void setY(int py){y = py;} 【C】int getX(){return x;} 【D】int getY(){return y;} } 上記の【A】【B】【C】【D】はそれぞれ別々のメソッド。 コーディングする順序はどれが先でどれが後でもかまわない。 これらのメソッド定義がどの順序で並んでいるかは実行にはまったく関係なく,他のメソッドがこれらのメソッドをどの順で呼び出しているかによって実行順序が決まる。

KAIJI-000
質問者

補足

呼び出し順がすべてなんですね。回答有難うございます。

その他の回答 (1)

  • kmee
  • ベストアンサー率55% (1857/3366)
回答No.1

すみません。おっしゃっている意味がよくわからないのですが。 各メソッドは void setX(int px){x = px;} でsetX void setY(int py){y = py;} でsetY int getX(){return x;} でgetX int getY(){return y;} でgetYの定義になります。閉じ括弧までがセットです。 「return y;まで」では、メソッドの途中になります。通常は、そんなところを入れかえたら、元のプログラムと意味が変ってきます。 今回はたまたま変化しない例となりますが。 メソッドの定義の固まりを分解しないのなら、順番は変更可能です。 例えば // X関係。getter,setter int getX(){return x;} void setX(int px){x = px;} // Y関係。getter,setter int getY(){return y;} void setY(int py){y = py;} のように。 この順番を変えることと、「関連の章ではreturnが先に来ている」「voidから始まっている」との関連がわかりません。 一般には、関係のあるものを近くにまとめるのが、作法です。 上はX,Yに注目して集めてますし、例示されたものは、 set? と get? とで集めています returnやvoidで順番を決める、ということは、まずやりません。

KAIJI-000
質問者

お礼

回答またお願いします。

KAIJI-000
質問者

補足

やさしいJavaを読んだことのない人からしたら唐突だったかもしれません。同じ章の前のページを見てみると、returnの箇所が先に来てて、voidの箇所が後に書いてあったのに何故この練習問題はvoidが先に来てて、returnが後に来ているのでなぜかなあと思いまして。

関連するQ&A

  • C++のプログラムが走りません。

    <<条件は以下です。>> データメンバ x:xの座標(ただし 0-1000とする) y:yの座標(ただし 0-1000とする) z:zの座標(ただし 0-1000とする) メンバ関数 void setX(int a): xの座標を設計する(範囲外の値は、error messageを出力する) void setY(int b): Yの座標を設計する(範囲外の値は、error messageを出力する) void setZ(int c) Zの座標を設計する(範囲外の値は、error messageを出力する) int getX(): Xの座標値を得る int getY(): Yの座標値を得る int getZ(): Zの座標値を得る << 不明な点は、 if文で、どう戻るかがわからないことと、 最後の結果表示の部分です。 以下が、作成したプログラムです。ネットで検索して類似しているプログラムを参考にしたんですが。 よろしくお願いします。>> #include <iostream> using namespace std; class Zahyou{ private: int getX();//Xの座標値を得る int getY();//Yの座標値を得る int getZ();//Zの座標値を得る int a,b,c; public: void setX(int a);//Xの座標を設計する void setY(int b);//Yの座標を設計する void setZ(int c);//Zの座標を設計する void show(); }; void Zahyou::show(){ cout << "The result is: (" << a << "," << b << "," << c << ")"; } void Zahyou::setX(int a){ cout << " Please Input X " << "\n "; cin >> a ; if(a < 0 && a > 1000){ cout << "The value of X is a mistake, Please input X again! " << " \n "; } } void Zahyou::setY(int b){ cout << "Please Input Y " << "\n "; cin >> b ; if(b < 0 && b > 1000){ cout << "The value of y is a mistake, Please input X again! " << " \n "; cin >> b ; } } void Zahyou::setZ(int c){ cout << " Please Input Z " << "\n "; cin >> c ; if(c < 0 && c > 1000){ cout << "The value of Z is a mistake, Please input X again! " << " \n "; cin >> c ; } } int main(){ Zahyou zahyou1; zahyou1.getX(); zahyou1.getY(); zahyou1.getZ(); zahyou1.show(); return 0; }

  • 巡回セールスマン問題

    このプログラミングを実際に視覚的(探索している状況など)に表したいんですが、どのようにすべきなのでしょうか? いろいろ参考書を見たのですが、わかりませんでした。 import java.io.*; public class TSP { public static void main(String[] args) { TSP instance = new TSP(); TspPoint[] points = new TspPoint[5]; //コンポーネントの作成 points[0] = new TspPoint("A", 5, 10); points[1] = new TspPoint("B", 4, 2); points[2] = new TspPoint("C", 6, 3); points[3] = new TspPoint("D", 3, 4); points[4] = new TspPoint("E", 2, 7); instance.setPoints(points); instance.traveling(); instance.dispResult(); } private TspPoint[] points; private double min_distance; private int[] min_route; public void setPoints(TspPoint[] points) { this.points = points; } public void traveling() { min_distance = Double.MAX_VALUE; min_route = new int[points.length]; int p1, p2, p3, p4, p5; p1 = 0; for (p2 = 1; p2 < 5; p2++) { for (p3 = 1; p3 < 5; p3++) { for (p4 = 1; p4 < 5; p4++) { for (p5 = 1; p5 < 5; p5++) { if (p1 == p2 || p1 == p3 || p1 == p4 || p1 == p5 || p2 == p3 || p2 == p4 || p2 == p5 || p3 == p4 || p3 == p5 || p4 == p5) { // 重複する地点は対象外 } else { // p1→p2→p3→p4→p5→p1への巡回経路長を求める double distance = 0.0; distance += calcDistance(points[p1], points[p2]); distance += calcDistance(points[p2], points[p3]); distance += calcDistance(points[p3], points[p4]); distance += calcDistance(points[p4], points[p5]); distance += calcDistance(points[p5], points[p1]); if (distance < min_distance) { // 現在のところの最短経路を覚えておく min_route[0] = p1; min_route[1] = p2; min_route[2] = p3; min_route[3] = p4; min_route[4] = p5; // 最短距離を記憶する min_distance = distance; } } } } } } } public void dispResult() { System.out.print("最小の巡回経路は "); for (int i = 0; i < 5; i++) { System.out.print(points[min_route[i]].toString() + " → "); } System.out.println(points[min_route[0]].toString()); System.out.println("巡回経路長は " + min_distance); } public double calcDistance(TspPoint a, TspPoint b) { double temp; temp = (a.getX() - b.getX()) * (a.getX() - b.getX()) + (a.getY() - b.getY()) * (a.getY() - b.getY()); return Math.sqrt(temp); //平方根を返す } } class TspPoint { private String name; private int x; private int y; public TspPoint(String name, int x, int y) { this.name = name; this.x = x; this.y = y; } public String getName() { return name; } public int getX() { return x; } public int getY() { return y; } public String toString() { return name + "(" + x + "," + y + ")"; } }

  • 配列のソート

    Javaのプログラムで、以下のように半径rでソートして並び替えて出力したいのですがどうやって作ればいいのでしょうか? ご教授願います。 0x座標は0 y座標は0 半径は48 1x座標は1 y座標は2 半径は42 2x座標は2 y座標は4 半径は5 3x座標は3 y座標は6 半径は75 4x座標は4 y座標は8 半径は21 0x座標は2 y座標は4 半径は5 1x座標は4 y座標は8 半径は21 2x座標は1 y座標は2 半径は42 3x座標は0 y座標は0 半径は48 4x座標は3 y座標は6 半径は75 半径の値はランダムです 自分では以下まで作りました。なるべく以下の形は変えないようにしたいです。 class Circle{ private int x,y,r,j; private static int i=0; Circle(int px,int py,int pr) { x=px; y=py; r=pr; } public static void show(Circle c){ System.out.println(i+"x座標は"+c.x+" y座標は"+c.y+" 半径は"+c.r); i++; } public static void sort(Circle c){ } } class Sample{ public static void main(String args[]) { Circle[] a=new Circle[5]; for(int i=0;i<a.length;i++) { a[i]=new Circle(i,2*i,(int)(Math.random()*100)); a[i].show(a[i]); } } }

  • 【至急】メソッドの設定方法についての課題

    メソッドの設定についての課題が出ています。 1:メソッドbkの設定方法について,簡単に説明しなさい /** n だけ後ろに進む。 */ public void bk(int n) { fd(-n); } 2:メソッドgetX, getY, getAngleの設定について,簡単に説明しなさい /** 現在の座標の X 成分を返す。 */ public int getX() { return (int)this.x; } /** 現在の座標の Y 成分を返す。*/ public int getY() { return (int)this.y; } /** 現在の角度を返す。*/ public int getAngle() { return (int)(this.angle * 180.0 /Math.PI); } 3:メソッドup,downの設定について,簡単に説明しなさい /** ペンをあげる。 */ public void up() { penDown = false; } /** ペンをおろす。ペンをおろした状態で進むと、その軌跡が画面に残る。*/ public void down() { penDown = true; } 問題文以外のプログラムは、該当箇所と判断した箇所のみを抜粋して掲載しました。 そこで質問なのですが、全ての設問とも、簡単に説明しなさいとのことですが、 そのまま、/** */ の中に簡単な説明が書かれてるじゃん・・・という感じでどの様に説明すればいいのか、中々答えがまとまりません。 丸投げの様な形になってしまい申し訳ございませんが、どなたかお助け下さい。

    • ベストアンサー
    • Java
  • Javaのアプレットについて質問です。

    星型の図形をアプレットビューワ上でマウスを押した場所に移動させたいのですが・・・ import java.applet.Applet; import java.awt.Graphics; import java.awt.Color; import java.awt.Font; import java.awt.event.MouseListener; import java.awt.event.MouseEvent; import java.awt.Polygon; public class Enshu1_5 extends Applet implements MouseListener { int px []={100,80,10,70,40,100,160,130,190,120}; int py []={10,75,75,113,190,140,190,113,75,75}; private Polygon poly = new Polygon(px,py,10 ); public void init() { addMouseListener(this); } public void mouseClicked(MouseEvent e) { } public void mouseEntered(MouseEvent e) { } public void mouseExited(MouseEvent e) { } public void mousePressed(MouseEvent e) { } public void mouseReleased(MouseEvent e) { } public void paint(Graphics g) { g.setColor(Color.red); g.fillPolygon(poly); g.setFont(new Font("serif",Font.BOLD,24)); g.drawString("Star",100,200); } } こんな感じでつくってみたのですが現在位置とクリック位置との差分割り出し方をpublic void mouseClicked(MouseEvent e)の所に書きたいのですが普通にpoly.translate( e.getX(), e.getY() );をしてしまうと原点からの移動になってしまうため、フィールド上にint x=0,y=0をつくりmouseClickedのところで if(e.getX()>x&&e.getY()>y) { int dx=e.getX()-x; int dy=e.getY()-y; x=dx; y=dy; poly.translate(dx,dy); repaint(); }の様な感じで考えられる条件を条件分岐していこうと思ったのですがどうもうまくいきませんしかなりかさばったものになってしまうと思います。何かいい方法はないでしょうか? 教えて下さい><

    • ベストアンサー
    • Java
  • オブジェクト指向のエラーについてです。

    オブジェクト指向のエラーについてです。 初めて質問するので、至らない点があれば、スミマセンm(_ _)m コンパイルしようすると、 DrawPanelMouseHandler.java:10: シンボルを見つけられません。 シンボル: クラス DrawPanel 場所 : DrawPanelMouseHandler の クラス private DrawPanel drawPanel; と、なります。 上記と同様のエラーが上記を含め、9つ発生します。 どうしたらよいのでしょうか? 以下ソースです。 import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; public class DrawPanelMouseHandler extends MouseAdapter { private DrawPanel drawPanel; private ShapeFactory factory; private int x0; private int y0; private Shape shape; public DrawPanelMouseHandler(DrawPanel dp, ShapeFactory factory) { this.drawPanel = dp; this.factory = factory; } public DrawPanelMouseHandler(DrawPanel dp) { this.drawPanel = dp; } public void mousePressed(MouseEvent me) { x0 = me.getX(); y0 = me.getY(); shape = factory.newShape(x0, y0); drawPanel.addShape(shape); } public void mouseDragged(MouseEvent me) { int x = me.getX(); int y = me.getY(); shape.setBoundary(x0, y0, x, y); drawPanel.repaint(); } public void mouseReleased(MouseEvent me) { int x = me.getX(); int y = me.getY(); shape.setBoundary(x0, y0, x, y); drawPanel.removeShape(shape); Command cmd = new CommandAddShape(drawPanel, shape); drawPanel.execute(cmd); } public void setShapeFactory(ShapeFactory sf) { this.factory = sf; } } よろしくお願いします。

    • ベストアンサー
    • Java
  • C#にて別クラスの関数を使いたい

    C#にて、別クラスの関数を使用する方法を教えてほしいです。 下記のような、構造体を受け取るメソッドを作りました。 ***************************** private struct MyPoint { public int x; public int y; } private void proc1(MyPoint pt) { MessageBox.Show("座標:" ; pt.x + "," + pt.y + "実行結果"); } private void button1_Click(object sender ,System.EventArgs e) { MyPoint pt; pt.x = 10; pt.y = 20; proc(pt); } ***************************** 別のフォームのクラスから、proc1を呼び出したいのですが、やり方がわかりません。 どうか、教えてください。

  • 複数線を引くには?

    最近プログラミングを習いだし、1つずつ色々独学で学んでいて、 本に載っている範囲で勉強しているます。 ここから下のプログラミングでは1つしか線を1つしか引けないのですが、これを何個も線を引くようにするにはどうすればいいか教えてください! mport java.awt.*; import java.awt.event.*; import javax.swing.*; public class Challnege13 extends JApplet { private static final long serialVersionUID = 1L; int Px=0,Py=0; // 直前の位置。 int Cx,Cy; // 現在の位置。 JPanel p; // initメソッドの定義。 public void init() { // アプレットからコンテンツペインを取得。 Container c = this.getContentPane(); // コンテンツペインのレイアウトマネージャをBorderLayoutに設定。 c.setLayout(new BorderLayout()); // パネルを定義(匿名クラス)。 p = new JPanel() { /** * */ private static final long serialVersionUID = 1L; public void paintComponent(Graphics g) { super.paintComponent(g); // 直線描画。 if( (Px == 0)&&(Py == 0) ) { Px = Cx; Py = Cy; } g.drawLine(Px,Py,Cx,Cy); // 直前の位置を更新。 Px = Cx; Py = Cy; } }; // コンテンツペインに追加。 c.add(p,BorderLayout.CENTER); // イベントリスナを定義(匿名クラス)。 MouseAdapter ma = new MouseAdapter() { // mouseClickedメソッドの定義。 public void mouseClicked(MouseEvent e) { Cx = e.getX(); // クリックした点のx座標を取得する。 Cy = e.getY(); // クリックした点のy座標を取得する。 p.repaint(); } }; // イベントリスナの登録。 this.addMouseListener(ma); } }

  • ソースコードの間違いを教えて下さい

    10日で覚えるjava第三版 84-85Pのソースをコンパイルして実行すると Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 0 at lesson09.Lesson09.main(Lesson09.java:6) と出てきてしまいます。 6行目に問題があるようですが、私は初心者のために下記で調べてみても http://www.javaroad.jp/faq/faq_error2.htm#q5 配列の何が問題なのか良く分かりません。 どこをどう直したら動くのでしょうか? また、この本は書いてないことが多いような気がします。 他の本で勉強した方が良いでしょうか? 以下、問題のあったソースコードです public class Lesson09 { public static void main(String[] args) { int x,y; //実行引数の受け取りをint型に変換する x = Integer.parseInt(args[0]); y = Integer.parseInt(args[1]); //Pointオブジェクトの生成する java.awt.Point point = new java.awt.Point(); //座標を設定する point.setLocation(x,y); System.out.println("X, Y座標をフィールドで参照します (int) "); //フィールドで座標を取得する System.out.println("X 座標 : " + point.x); System.out.println("Y 座標 : " + point.y); System.out.println("X, Y座標をgetメソッドで参照します(double)"); //getメソッドで座標を取得する System.out.println("X 座標 : " + point.getX()); System.out.println("Y 座標 : " + point.getY()); } }

    • ベストアンサー
    • Java
  • アプレットの配列をテキスト形式で保存する

    ある画像の上をマウスクリックするとそこに赤いマーカーが表示され、さらにそのマーカーの座標をテキスト形式で保存できるプログラムを組みたいと考えています。マーカー表示はできましたが、保存方法がまったくわかりません。35箇所のマーカー座標を保存したいのですが…。 どなたか教えていただけませんでしょうか。 ブラウザ上で動作させたいので、JavaAppletにて組んでいます。 import java.awt.*; import java.awt.event.*; import java.applet.Applet; public class sample extends Applet{ private int[] xpos = new int[35]; private int[] ypos = new int[35]; private int num = 0; Image imgs; public sample(){ addMouseListener(new MyMouseAdapter()); } public void init(){ imgs = getImage(getDocumentBase(),"sample.gif"); } public void paint(Graphics g){ g.drawImage(imgs,0,0,this); g.setColor(Color.red); for(int i = 0; i < num; i++){ g.fillOval(xpos[i]-2, ypos[i]-2, 4, 4); } } class MyMouseAdapter extends MouseAdapter { public void mouseClicked(MouseEvent e){ if(num >= 35){ return; } int x,y; x = e.getX(); y = e.getY(); xpos[num] = x; ypos[num] = y; num++; Graphics g = getGraphics(); g.setColor(Color.red); g.fillOval(x-2, y-2, 4, 4); } } }

専門家に質問してみよう