• ベストアンサー

問題が解けません(インスタンスメソッド)

こんにちは。 課題をやっているのですが、問題が解けません。 問題内容です。 以下のクラス図で示したRectangleクラスを作成し、実行結果と同じに なるようにメソッドを作成する。 クラス図 Rectangle -width:ing -height:int ----------- Rectangle() Rectangle(w:int,h:int) getArea():int ------------- 問題文 getArea()メソッドでは面積の計算をする(高さ×幅) コンストラクタRectangle()ではwidthとheightに初期値0を設定。 main()メソッドでは標準入力より幅、高さを整数として受け取り コンストラクタの引数とする。 実行結果 >10 >20 インスタンスr1の面積は200 >123 >45 インスタンスr2の面積は5535 -------------------------- 途中経過 import java.io.*; class Rectangle{ public static int sum=0; private int width; private int height; public Rectangle(){ width=0; height=0; sum++; } public void Rectangle(int w, int h){ width=w; height=h; } public void getArea(){ int num; num=width*height; System.out.println("r" + sum + "インスタンスの面積は" + num); } } class Ex54{ public static void main(String args[]){ BufferedReader input = new BufferedReader (new InputStreamReader(System.in)); String wid = input.readLine(); String hei = input.readLine(); Rectangle rectangle1 = new Rectangle(); rectangle1.Rectangle(wid, hei); } } 「現在の問題点」 UML図の通り記述できているか自信がありません。 rectangle1.Rectangle(wid, hei);というところでエラーが出てしまいます。 r1、r2を表示するときにsumを使っているのですがこのような記述でいいか自身がありません。 どなたかよろしくお願いします。

noname#39315
noname#39315
  • Java
  • 回答数8
  • ありがとう数3

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

  • ベストアンサー
  • kztk
  • ベストアンサー率53% (59/110)
回答No.3

>UML図の通り記述できているか自信がありません。 (1) public static int sum=0; というコードを書かれていますが、クラス図には +sum:int という記述ははありません。 後の質問ともつながりますが、課題を出す方としては、Rectangleクラスにこのような属性は不要だと考えられているのだと思います。私もそう思います。 (2) Rectangle(w:int,h:int) が違っています。 No.1の方の回答にもあるとおり、 Rectangle(w:int,h:int):void ではなく、 Rectangle(w:int,h:int) であることの意味を考えてみてください。 (3) getArea():int が違っています。 ちなみに、後の質問ともつながりますが、Javaの世界では一般的にgetXXX()という命名をするメソッドはどのような役割を持たせるものなのかが、一般的に決まっています。"setter/getter"等の言葉でググってみてください。getterならばvoidはありえません。 >rectangle1.Rectangle(wid, hei);というところでエラーが出てしまいます。 「エラーが出てしまう」という現象だけ捉えるのではなく、エラーメッセージを読んで内容を理解しましょう。なぜエラーになるのかはエラーメッセージに書いています。呼び出す方と呼び出されるほうの型はあっていますか? Rectangle.java:33: Rectangle(int,int) (Rectangle 内) を (java.lang.String,java.lang.String) に適用できません rectangle1.Rectangle(wid, hei); ^ >r1、r2を表示するときにsumを使っているのですがこのような記述でいいか自身がありません。 No.1の方の回答の通り、 System.out.println("インスタンスr1の面積は" …(以下略) System.out.println("インスタンスr2の面積は" …(こっちも略) でよいと思います。 というか、そちらの方が望ましい。 No.2の方が書かれているように、getArea()は「面積を求める」だけにすべきです。 sumの意味合いもよく分かりません(何の「合計」でしょうか?)。

noname#39315
質問者

補足

ご回答ありがとうございます。 どうしても解決できない部分があります。 それはRectangle rectangle1 = new Rectangle(wid, wei)の部分です 解説していただけないでしょうか? よろしくお願いします。 メッセージ:シンボルを解決できません。 コンストラクタ Rectangle import java.io.*; class Rectangle{ private int width; private int height; public Rectangle(){ width=0; height=0; } public Rectangle(int w, int h){ width=w; height=h; } public int getArea(){ return width*height; } } class Ex54{ public static void main(String args[]){ BufferedReader input = new BufferedReader (new InputStreamReader(System.in)); String wid = input.readLine(); String hei = input.readLine(); Rectangle rectangle1 = new Rectangle(wid, hei); System.out.println("インスタンスr1の面積は" + rectangle1.getArea()); } }

その他の回答 (7)

  • kztk
  • ベストアンサー率53% (59/110)
回答No.8

まず、クラスRectangleはクラス図が提示されていますが、Ex56は提示されていません。出題者としてはRectangleクラスの方の設計を重視していると思ってください。 いかにRectangleクラスを「それらしく」つくるかがポイントです。「それらしい」とは「再利用性が高い」ということです。 例えば、Rectangle(矩形)というものに「高さ」「幅」「面積」のような属性があることは普遍的です。どのような矩形にも高さと幅があるでしょうし、面積が高さ×幅で求まることも変わりません。矩形に関する他の課題でもそのままプログラムを再利用することができるでしょう。 しかし、「矩形1と矩形2の2つがある」ことや「矩形1と2の面積を1,2の順に標準出力に表示する」ことは普遍的でしょうか?これは課題56だけの話です。課題57では、もしかしたら ・矩形1,2,3の面積を表示した後もう一度矩形1の面積と高さを表示しろ、といわれるかも知れません。 ・標準出力ではなく、SWINGで作ったGUIの画面に表示してくれ、というかもしれませんし、Webの画面に出してくれと言われるかもしれません。 そうした場合に今のRectangleクラスは手直しゼロ、あるいは最小限の手直しで再利用できますか? 従って、Ex56は Rectangle r1 = new Rectangle(wid1, hei1); System.out.println("インスタンスr1の面積は" + r1.getArea()); Rectangle r2 = new Rectangle(wid2, hei2); System.out.println("インスタンスr2の面積は" + r2.getArea()); で十分なのです。こんなコード、誰も再利用しないのですから。

noname#39315
質問者

お礼

私の質問に気づいていただきありがとうございました。 やっと問題が解決してホッとしております。 kztkさんの仰る再利用性が高いプログラムを 作っていきたいと思います。 ありがとうございました^^

  • kztk
  • ベストアンサー率53% (59/110)
回答No.7

残念ながら、改良ではなく、改悪されています。 (オブジェクト指向的ではなくなったという意味で) 以下の2つは出題者の指示でしょうか?それとも質問者さんが発想されたものでしょうか。(1)はまだともかく、(2)が出題者の指示だとすると??? >(1)インスタンスに個別の番号をつける。 >Rectangleクラスにクラス変数countを追加 >コンストラクタRectangle()でcountをインクリメント >(2) >getArea()メソッドをクラスメソッドに書き換える >クラスメソッドとして書いたgetAreaで、引数でインスタンスを渡してもらい >オブジェクト名.フィールド名として使う。

  • koko_u_
  • ベストアンサー率18% (459/2509)
回答No.6

>Rectangle.getArea(num1, num2)ということでしょうか。 まったく違う。 関数に Rectangle のインスタンス rect を渡せば、rect は自分の幅と高さを「知っている」ので面積を計算できるでしょう。 しかし、rect が自分の幅と高さを知っているので、rect 自身が面積を計算することができると考えた方が自然でしょう。

  • koko_u_
  • ベストアンサー率18% (459/2509)
回答No.5

>引数でインスタンスを渡すとはどういうことでしょうか Rectangle rect(10, 100); Rectangle.getArea(rect); という風に使う。てことじゃろ。 でも、クラスメソッドにする理由がわからない。

noname#39315
質問者

補足

ご回答ありがとうございます。 Rectangle.getArea(num1, num2)ということでしょうか。 その場合getArea()からどのように値(幅×高さ)を表示したら いいのでしょうか。 getAreaに直接System.out.println("インスタンスr1の"・・・・・) と言った感じで表示したらまずいですよねぇ?

  • kztk
  • ベストアンサー率53% (59/110)
回答No.4

String wid = input.readLine(); String hei = input.readLine(); Rectangle rectangle1 = new Rectangle(wid, hei); widとheiはどちらもStringですからString型の引数を2つ持つコンストラクタを探しに行くのですが、そんなものはないので シンボルを解決できません。 と言われるわけです。 widとheiをint型に変換してからコンストラクタに渡せば、javac君はちゃんとあなたの作ったコンストラクタを見つけてくれます。Integer.parseInt()等を使えばよいでしょう。

noname#39315
質問者

補足

私の補足にお気づき頂きありがとうございます。 Integer.parseInt()をつかったら見事コンパイルを通ることができました。 今度はそのプログラムの改良版ということで (1)インスタンスに個別の番号をつける。 Rectangleクラスにクラス変数countを追加 コンストラクタRectangle()でcountをインクリメント 実行例 >10 >20 インスタンスr1の面積は200 インスタンスr1は1番目のインスタンスです。 >123 >45 インスタンスr2の面積は5535 インスタンスr2は2番目のインスタンスです。 (2) getArea()メソッドをクラスメソッドに書き換える クラスメソッドとして書いたgetAreaで、引数でインスタンスを渡してもらい オブジェクト名.フィールド名として使う。 ----------------------------------------------------------- 改良版の(1)はできたのですが(2)がどうもよく分かりません。 疑問点 引数でインスタンスを渡すとはどういうことでしょうか インスタンスメソッド内でthisを使えばいいのでしょうか 途中経過 import java.io.*; class Rectangle{ public static int count = 0; private int width; private int height; public Rectangle(){ width=0; height=0; count++; } public Rectangle(int w, int h){ width=w; height=h; count++; } public static void getArea(){ } public static void count(){ System.out.println("インスタンスはr" + count + "番目のインスタンスです。"); } } class Ex56{ public static void main(String args[])throws IOException{ BufferedReader br = new BufferedReader (new InputStreamReader(System.in)); int num=0; while(num < 2){ System.out.print(">"); String wid = br.readLine(); System.out.print(">"); String hei = br.readLine(); int num1 = Integer.parseInt(wid); int num2 = Integer.parseInt(hei); Rectangle rectangle1 = new Rectangle(num1, num2); Rctangle.getArea(??); Rectangle.count(); num++; } } } どなたかよろしくおねがいします。

  • koko_u_
  • ベストアンサー率18% (459/2509)
回答No.2

>r1、r2を表示するときにsumを使っているのですが >このような記述でいいか自身がありません。 俺もそこまでする必要を感じませんが、するなら public Rectangle(int w, int h) のコンストラクタの中でもカウントアップするべきじゃない? そしてオブジェクトが破棄されたら sum--; したいけど、Java ってオブジェクトが破棄された時の動作って何処に書くんだっけ? あと getArea() の中で出力しちゃダメでしょ。 これは「面積を求める」だけで出力は別にするべき。

  • neko_noko
  • ベストアンサー率45% (146/319)
回答No.1

>UML図の通り記述できているか自信がありません。 Rectangle(w:int,h:int)は、戻り値(getArea():intの「:int」の部分)がないですね。 さらに、クラス名と同名なので「void Rectangle(int w, int h)」と書いて良いでしょうか? >rectangle1.Rectangle(wid, hei);というところでエラーが出てしまいます。 エラーが何だったかにもよりますが、そもそもUMLの部分が分かれば、ここはどうなるでしょう? ということは、…new Rectangle();という所はどうなるでしょうか?このままでOKですか? >r1、r2を表示するときにsumを使っているのですがこのような記述でいいか自身がありません。 う~ん。ここは解釈がやや難しいですが、個人的には「そこまでやらなくてもいいのでは」という感じです。 System.out.println("インスタンスr1の面積は" …(以下略) System.out.println("インスタンスr2の面積は" …(こっちも略) と、そのままコードに入れてしまっても、合格レベルなのかなあと… もちろん、質問者さんの書き方でも、問題ないと思います。 ※自分が課題を作った立場なら、「よくぞそこまで考えた!」くらいのものです。

noname#39315
質問者

お礼

ご回答ありがとうございました。 UML図を理解していないがためかなり手間取りました。 さらにjavaの専門用語も理解不足なため小さなミスが多く なかなか苦労しました(汗 ありがとうございました^^

関連するQ&A

  • java 継承

    こんにちは。 javaの問題なのですが、問題文が理解できなかったので質問させていただきます。 問題文 Ex54で作成したRectangleクラスを継承するPlaceRectangleクラスを作成する Ex54 import java.io.*; class Rectangle{ private int width; private int height; public Rectangle(){ width=0; height=0; } public Rectangle(int w, int h){ width=w; height=h; } public int getArea(){ return width*height; } } class Ex54{ public static void main(String args[])throws IOException{ BufferedReader br = new BufferedReader (new InputStreamReader(System.in)); int num=0; while(num < 2){ System.out.print(">"); String wid = br.readLine(); System.out.print(">"); String hei = br.readLine(); int num1 = Integer.parseInt(wid); int num2 = Integer.parseInt(hei); Rectangle rectangle1 = new Rectangle(num1, num2); System.out.println("インスタンスr" + (num+1) + "の面積は" + rectangle1.getArea()); num++; } } } --------------------------------------------------------------- PlacedRectangleクラス 四角形の位置をx座標y座標で表す。 長方形の左端を示しx座標は右に大きくy軸は下に大きくなる。 ・次の三つのコンストラクタを持つ (1)引数なし (2)位置の引数付き (3)位置と大きさの引数付き いづれのコンストラクタも位置のセットはsetLocationメソッドを実行する 大きさのセットはスーパークラスのコンストラクタを呼ぶ (コンストラクタで値を設定しているのになぜ再設定(位置のセット、大きさのセット)する必要があるのか分かりません。) ・setLocationメソッドは位置をセットする mainメソッドから次の操作をする 1引数無しでPalacedRectangleのインスタンスaを作成 2引数12と34でPlacedRectangleのインスタンスbを作成 3引数31と41と59と26でPlacedRectangleのインスタンスcを作成 1、2、3ともそれぞれのインスタンスの位置と面積を表示する 実行例 インスタンスaの面積は1534 位置は(12,13)です。 UML図 PlacedRectangle ----------------- -x:int -y:int ----------------- +PlacedRectangle() +PlacedRectangle(x:int,y:int) +PlacedRectangle(x:int,y:int,width:int,height:int) +setLocation(x:int,y:int):void 「疑問点」 コンストラクタで値を設定しているのになぜ再設定(位置のセット、大きさのセット)する必要があるのか分かりません。 main文のwhile(num < 2){というところをスッキリさせたい(処理が2回しかないため)何かよい方法はないでしょうか? よろしくおねがいします。

    • ベストアンサー
    • Java
  • java

    javaの問題がわかりません。 問題文は以下の通りです。 幅と高さを指定するコンストラクタ内で作ったr1とr2というインスタンスの 内容をmain()メソッドで表示する。 〔クラス図〕 クラス名 Rectangle ---------- -width:int -height:int ---------- Rectangle() Rectangle(w:int, h:int) getArea():int ------------- getArea()メソッドでは面積(高さ×幅) コンストラクタRectangle()では、widthとheightに初期値0を設定 main()メソッドでは標準入力より幅と高さを整数として受け取り コンストラクタの引数にする。 よろしくおねがいします。 途中経過 class Rectangle{ private int width; private int height; public Rectangle(???){ width = 0; height = 0; } class MENSEKI{ public static void main(String args[]){ }

    • ベストアンサー
    • Java
  • パッケージ化とコンパイルについて

    下記のプログラムにについての質問になります。 /*Rectangle.java*/ package com.shoeisha.shape; public class Rectangle { private int width; private int height; public Rectangle() { } public Rectangle(int width, int height) { this.width = width; this.height = height; } public int getArea(){ return width * height; } } /*Test.java*/ import com.shoeisha.shape.*; ^^(1) class Test { public static void main(String[] args) { Rectangle rc = new Rectangle(10, 15); System.out.println(rc.getArea()); } } (1)の箇所になりますが、com.shoeisha.shapeにあるクラス(Rectangle)を 利用し、プログラムを作成しようと思うのですが、Test.javaにてコンパイルエラーが生じてしまいます。 (1)の箇所をRectangleにするとコンパイルが通るようになり、「*」は使えないものかと思えてしまいます。 java.util.*;といった、既に用意されているものは普通に使えるのですが、自作でパッケージ化した物は 正規表現を使うことができないものなんでしょうか?? 何かの設定がされていないから、正規表現が使えないのではと思っておりますが、 それ以上がわかりませんでしたので、掲示板にて記載させていただきました。 以上、ご教授の程お願い致します。

    • ベストアンサー
    • Java
  • クラス変数/メソッドとインスタンス変数/メソッドの見え方について

    Javaの言語仕様(?)についてお教え下さい。 参照変数の型がインスタンスのスーパークラスの型の時、クラス変数/メソッドとインスタンス変数/メソッドの見え方が納得いかずに困っています。 以下のような条件の時です。   ・クラスが2つあり、1つはもう1つのクラスを継承しています。     それぞれを「スーパー」「サブ」と以下で呼びます。   ・インスタンスは"サブ"の型です。   ・上記インスタンスへの参照変数は"スーパー"のクラスの型です。   ・"スーパー"、"サブ"ともに【同名】の「クラス」変数/メソッド、「インスタンス」変数/メソッドがあります。 この場合に、"サブ"のインスタンスを参照している"スーパー"の型の変数を介し、それらにアクセスしたらどれが見えるか?という疑問です。 実験結果では以下のようになりました。           [フィールド]  [メソッド]   [1.static ]  スーパーの   スーパーの   [2.非static]  スーパーの   サブの 納得いかないのは「2.非static」で「フィールド」が、「スーパーの」になるところです。 これも「サブの」になると思っていました。 なぜサブクラスのが見えないのでしょうか? 同名の変数なのでスーパークラスのはサブクラスので隠れされ、サブクラスのが見えると思っていたのですが。 参考書には以下のように書いてありました。   フィールドの場合、参照変数の型のものが見える。   メソッドの場合、インスタンスの型のものが見える。 私には不自然に感じられるのですが、「こういう仕様だから。」と納得するしか無いのでしょうか? 「なぜこうなるか」について説明がある文献、サイトなどありましたらお教えください。 参考までに以下が実験したサンプルコードと結果です。長くて申し訳ありません。 「サンプルコード」 public class Super { static int staticField = 10; int instanceField = 100; static void staticMethod() { System.out.println( "staticField = " + staticField ); } void instanceMethod() { System.out.println( "instanceField = " + instanceField ); } } public class Sub extends Super { static int staticField = 90; int instanceField = 900; static void staticMethod() { System.out.println( "staticField = " + staticField ); } void instanceMethod() { System.out.println( "instanceField = " + instanceField ); } } public class TestStatic { public static void main(String[] args) { // インスタンスはSub、参照変数もSub、という状態。 Sub sub = new Sub(); System.out.println( "実験1" ); System.out.println( "1.クラス変数      " + sub.staticField ); System.out.print( "2.クラスメソッド    " ); sub.staticMethod(); System.out.println( "3.インスタンス変数   " + sub.instanceField ); System.out.print( "4.インスタンスメソッド " ); sub.instanceMethod(); // インスタンスはSub、参照変数はSuper、という状態。 Super sup = new Sub(); System.out.println( "実験2" ); System.out.println( "5.クラス変数      " + sup.staticField ); System.out.print( "6.クラスメソッド    " ); sup.staticMethod(); System.out.println( "7.インスタンス変数   " + sup.instanceField ); System.out.print( "8.インスタンスメソッド " ); sup.instanceMethod(); } } 「結果」 実験1 1.クラス変数      90 2.クラスメソッド    staticField = 90 3.インスタンス変数   900 4.インスタンスメソッド instanceField = 900 実験2 5.クラス変数      10 6.クラスメソッド    staticField = 10 7.インスタンス変数   100 8.インスタンスメソッド instanceField = 900 納得が行かないのは7のところです。 以上よろしくお願いいたします。

    • ベストアンサー
    • Java
  • javaの課題が難しくて解けません。力を貸してください

    本日、プログラムの授業で課題が出されました。 解ける方がいましたら、回答を教えてください。 課題:これまでの演習で作成した Rectangle, Triangle, Circle, Trapezoidクラスを利用するクラス (メインクラス)を修正して, コマンドライン引数から図形の種類、入力値を指定できるようにしてみよ。 ※4つのクラスをpackageで1つにまとめる必要があるようです。 お手数かけますが、宜しくお願いします。 下記が演習で作成した4つのクラスになります。参考にしてください。 (Rectangleクラス) import java.io.*; class Rectangle { private int width; private int height; public Rectangle(int w, int h) { width = w; height = h; } public void setWidth(int w) { width = w; } public void setHeight(int h) { height = h; } public int getWidth() { return width; } public int getHeight() { return height; } public double calcArea() { return width * height; } public void show() { System.out.println("width=" + getWidth() + ", height= " + getHeight()); } } public class kadai1 { public static void main(String args[]) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); System.out.print("width= "); String str1 = br.readLine(); System.out.print("height= "); String str2 = br.readLine(); Rectangle r = new Rectangle(Integer.parseInt(atr1),Integer.parseInt(str2)); r.show(); System.out.println("面積 = " + r.calcArea()); } } (Triangleクラス) public double calcArea() { return width * height / 2.0; } (Circleクラス) public double calcArea() { return Math.PI * radius * radius; } public void show() { System.out.println("radius= " + getRadius()); } (Trapezoidクラス) public double calcArea() { return (upper + lower) * height / 2.0; } public void show() { System.out.println("upper= " + getUpper() + ", lower= " + getLower() + ", height= " + getHeight()); }

  • Javaの基礎のプログラム

    結城浩さんの本に載っていたプログラムです。 ですが、説明がわかりにくくていまいち処理がわからなかったので 質問させていただきました。 どうやら、X軸とY軸がありY軸は下に行けばいくほど数字が大きくなる。 X軸は右に行けばいくほど大きくなる。座標上にある、二つの長方形の重なりあう部分の座標を求めるプログラムのようです。(イメージとしては、下に添付してある画像のような感じになるようです。) 質問としては一つです。 プログラム中のこの部分なのですが、おそらく「長方形の座標を示している」行であると思います。 a = new Rectangle(0, 0, 20, 10); b = new Rectangle(5, 5, 20, 10); c = new Rectangle(20, 10, 20, 10); d = new Rectangle(-10, -20, 100, 200); e = new Rectangle(21, 11, 20, 10); その後の処理としては、aとb→c→d→eというようにそれぞれ比較していっているのもなんとなくわかります。 ですが、しっかり解説されていなかったので、この4つの数字がどのように座標を示しているのかよくわかりませんでした。 よろしくお願いします。 class Rectangle { final int INITIAL_WIDTH = 10; final int INITIAL_HEIGHT = 20; int width; int height; int x; int y; Rectangle() { width = INITIAL_WIDTH; height = INITIAL_HEIGHT; x = 0; y = 0; } Rectangle(int width, int height) { this.width = width; this.height = height; this.x = 0; this.y = 0; } Rectangle(int x, int y, int width, int height) { this.width = width; this.height = height; this.x = x; this.y = y; } void setLocation(int x, int y) { this.x = x; this.y = y; } void setSize(int width, int height) { this.width = width; this.height = height; } public String toString() { return "[" + x + ", " + y + ", " + width + ", " + height + "]"; } Rectangle intersect(Rectangle r) { int sx = Math.max(this.x, r.x); int sy = Math.max(this.y, r.y); int ex = Math.min(this.x + this.width, r.x + r.width); int ey = Math.min(this.y + this.height, r.y + r.height); int newwidth = ex - sx; int newheight = ey - sy; if (newwidth > 0 && newheight > 0) { return new Rectangle(sx, sy, newwidth, newheight); } else { return null; } } public static void main(String[] args) { Rectangle a, b, c, d, e; a = new Rectangle(0, 0, 20, 10); b = new Rectangle(5, 5, 20, 10); c = new Rectangle(20, 10, 20, 10); d = new Rectangle(-10, -20, 100, 200); e = new Rectangle(21, 11, 20, 10); System.out.println("a = " + a); System.out.println("b = " + b); System.out.println("c = " + c); System.out.println("d = " + d); System.out.println("e = " + e); System.out.println("a と a の重なり = " + a.intersect(a)); System.out.println("a と b の重なり = " + a.intersect(b)); System.out.println("a と c の重なり = " + a.intersect(c)); System.out.println("a と d の重なり = " + a.intersect(d)); System.out.println("a と e の重なり = " + a.intersect(e)); } }

    • ベストアンサー
    • Java
  • 初歩的な メソッドの引数について

    参考書のサンプルなんですが、 Carクラスのメソッドの引数のところで num = n と代入しているのですが、 これを直接void setNum(int num)としたほうがらくだと思うのですがなにか意味があるのでしょうか? class Sample4{ public static void main(String args[]){ Car car1 = new Car(); car1.setNum(33); } } class Car{ int num; void setNum(int n){ num = n; System.out.println("台数" + num); } }

    • ベストアンサー
    • Java
  • クラスメソッドの仕様

    次のようなクラスメソッドを作りたいのですが、自分で作って見たところ、どのような点を修正すればいいか分かりません。 どうか教えてください。 (1) 次に示す内容を満たすバー(Bar)クラスを作成せよ。 1. バーの右端のx座標(=バーの長さ)、バーの名前を扱う2つのprivateなインスタンス変数を持つ。 2. バーの総数を扱うprivateなクラス変数を持つ。ただし、 ここでいう総数とは、(1)コンストラクタで作成したもの、(2)代入操作で作成したもの、の両方を含む。 3. 引数無しのコンストラクタが呼び出されてバーオブジェクトが作成されると、そのバーのx座標は0以上400未満でランダムに決定され、名前は文字「A」とランダムに決定された0以上10000未満の整数が連接されたものに決定される。 4. バーのx座標を設定するインスタンスメソッドを持つ。 5. バーの名前を設定するインスタンスメソッドを持つ。 6. バーのx座標を取得するインスタンスメソッドを持つ。 7. バーの名前を取得するインスタンスメソッドを持つ。 8. 作成されたバーの総数を取得するクラスメソッドを持つ。 9. 作成されたバーの総数を1増やすクラスメソッドを持つ。 10. 作成されたバーの総数を1減らすクラスメソッドを持つ。 これを自分なりに解釈したところ、 class Bar{ private int x; private String name; private int count; private Bar(){ x=0; count=0; name=""; } public void Bar(){ x = (int)(Math.random()*400); name = "A" + (int)(Math.random()*10000); } public void setBar(int bx){ x=bx; } public void setName(String nm){ name=nm; } public void getX(int bx){ } public void getName(String nm){ } public void getCount(int c){ } } どうか御教授お願いします。

  • javaの質問です。合っているかお願いします

    間違ってる場合は何が違って何が正解かをお願いします。 よろしくお願いします 1 this.numとnumの違い this.numはインスタンス変数でnumは変数 2 メソッド内のthis.numは何行目で宣言されているか? 4行目 public class Example4 { int num; void plus( int num ) { this.num = this.num + num; } void multiple( int num ) { this.num = this.num * num; } void setNum( int num ) { this.num = num; } int getNum() { return this.num; } }

    • ベストアンサー
    • Java
  • Java言語プログラミングに関して質問です

    以下の問いでソースを作りました。 問.2次元上の円と長方形を表すデータファイルが与えられたとき、以下の処理を行うプログラムを作成せよ。ただし、長方形は必ず座標軸に並行変を持つとする。 1.全図形の合計面積を表示せよ 2.一番面積の大きい図形データを表示せよ 3.周の長さ順に図形データを表示せよ 4.重なり合ってるすべての円のペアを列挙せよ 5.重なり合っているすべての図形のペアも列挙せよ 図形データの例 1. 1, 50.0, 50.0, 50.0 2. 2, -100.0, 100.0, 0.0, 0.0 3. 1, 0.0, 0.0, 10.0 4. 1, 50.0, 0.0, 30.0 5. 2, -75.0, 75.0, -25.0, 25.0 class Shape{ int id; int type; public double getArea() { return 0.0; } public double getPerimeter() { return 0.0; } } class Circle extends Shape{ double cx,cy; double r; Circle(int id, int type, double cx, double cy, double r){ this.id = id; this.type = type; this.cx = cx; this.cy = cy; this.r = r; } public double getArea(){ return 3.14159265 * r * r; } public double getPerimeter(){ return 3.14159265 * 2 * r; } } class Rectangle extends Shape{ double lx,ly,rx,ry; Rectangle(int id,int type,double lx,double ly,double rx,double ry){ this.id = id; this.type = type; this.lx = lx; this.ly = ly; this.rx = rx; this.ry = ry; } public double getArea(){ return (rx - lx) * (ly - ry); } public double getPerimeter(){ return 2 * (ly - ry) + 2* (lx - rx); } } class ShapeTest{ public static void main(String[] args) { Shape shapes[] = new Shape[5]; shapes[0] = new Circle(1, 1, 50.0, 50.0, 50.0); shapes[1] = new Rectangle(2, 2, -100.0, 100.0, 0.0, 0.0); shapes[2] = new Circle(3, 1, 0.0, 0.0, 10.0); shapes[3] = new Circle(4, 1, 50.0, 0.0, 30.0); shapes[4] = new Rectangle(5, 2, -75.0, 75.0, -25.0, 25.0); double sum = 0.0; for(int i=0;i<shapes.length;i++){ sum += shapes[i].getArea(); } System.out.println("合計面積は " +sum); Shape maxShape = shapes[0]; for(int i=1;i<shapes.length;i++){ if(shapes[i].getArea() > maxShape.getArea()){ maxShape = shapes[i]; } } System.out.println("一番面積の大きい図形は ID=" + maxShape.id); for(int i=0;i<shapes.length-1;i++){ for(int j=i+1;j<shapes.length;j++){ if(shapes[j].getArea() > shapes[i].getArea()){ Shape tmp = shapes[i]; shapes[i] = shapes[j]; shapes[j] = tmp; } } } System.out.println("周の長さの大きい順は "); for(int i=0;i<shapes.length;i++){ System.out.print(" " +shapes[i].id); } System.out.println(); } } //実行結果 合計面積は 23495.574275 一番面積の大きい図形は ID=2 周の長さの大きい順は 2 1 4 5 3 この問題ですが、周の長さの大きい順は2→1→5→4→3になり、問4、5ができていません。どうしたらよろしいですか?教えてください。解説とソースをお願いします。