前提・実現したいこと
各インスタンスに格納される数値に番号をつけたいです。
色々な図形の大きさを設定して面積を求めるメソッドを含むサブクラスを作りました。それらを使って別のクラスに各図形の面積を表す文字列を乱数発生させてコンソールに表示させたいのです。その際に各図形の面積にNo.1... のように番号を振りたいです。
各図形の面積に関するサブクラスは
java
1package object; 2 3public class Circle1 extends Figure { 4 private double radius = 0; 5 6 Circle1(){ 7 this.radius = 20; 8 } 9 public Circle1() { 10 // TODO 自動生成されたコンストラクター・スタブ 11 } 12 void Circle(double r){ 13 this.radius = r; 14 } 15 void setRadius(double r) { 16 } 17 void setSize(double r) { 18 setRadius(r); 19 } 20 double getRadius() { 21 return this.radius; 22 } 23 @Override 24 double getArea() { 25 area = Math.PI * this.radius * this.radius; 26 return area; 27 // TODO 自動生成されたメソッド・スタブ 28 } 29 void identify() { 30 System.out.println("I am a Circle1 with area" + getArea() + "and" + getNumber() + "."); 31 // TODO 自動生成されたメソッド・スタブ 32 33 } 34 private String getNumber() { 35 // TODO 自動生成されたメソッド・スタブ 36 return null; 37 } 38 @Override 39 void iduntify() { 40 // TODO 自動生成されたメソッド・スタブ 41 42 } 43 44}
と、同様にRectangle、Square、Triangleを作成しています。
複数のサブクラスに渡って番号をふることができません。
実行したいクラスのコードは以下のようです
エラーメッセージ
「暗黙的スーパー・コンストラクターFigure()は未定義です。別のコンストラクターを目地的によびだす必要があります。」
と表示されますが、どういうことなのかいまいちよくわかりません。
該当のソースコード
java
1package object; 2 3public class Figures{ 4 public static void main(String[] args) { 5 Figure[] figures1 = new Figure[9]; 6 Figure[] figures2 = new Figure[9]; 7 Rectangle r1 = new Rectangle(); 8 Rectangle r2 = new Rectangle(30, 20); 9 int i = 0; 10 11 System.out.println("The area of r1 is" + r1.getArea()); 12 System.out.println("The area of r2 is" + r2.getArea()); 13 14 r1.setWidth(40); 15 r1.setHeight(30); 16 System.out.println("The area of r1 is" + r1.getArea()); 17 18 r2.setSize(60, 40); 19 System.out.println("The area of r2 is" + r2.getArea()); 20 21 figures1[i++] = r1; 22 figures1[i++] = r2; 23 24 Circle1 c1 = new Circle1(); 25 Circle1 c2 = new Circle1(20); 26 figures1[i++] = c1; 27 figures1[i++] = c2; 28 System.out.println("The area of c1 is" + c1.getArea()); 29 System.out.println("The area of c2 is" + c2.getArea()); 30 31 Triangle t1 = new Triangle(3, 5); 32 Triangle t2 = new Triangle(30, 20); 33 Triangle t3 = new Triangle(300, 200); 34 System.out.println("The area of t1 is" + t1.getArea()); 35 System.out.println("The area of t2 is" + t2.getArea()); 36 System.out.println("The area of t3 is" + t3.getArea()); 37 38 figures1[i++] = t1; 39 figures1[i++] = t2; 40 figures1[i++] = t3; 41 42 Square2 s1 = new Square2(); 43 Square2 s2 = new Square2(20); 44 System.out.println("The area of s1 is " + s1.getArea()); 45 System.out.println("The area of s2 is " + s2.getArea()); 46 47 figures1[i++] = s1; 48 figures1[i++] = s2; 49 50 System.out.println(); 51 for(int j=0; j<figures1.length; j++) { 52 figures1[j].iduntify(); 53 } 54 55 System.out.println(); 56 i = 0; 57 for (int j=0; j<figures2.length; j++) { 58 figures2[j] = figures1[choose()]; 59 } 60 for (int j=0; j<figures2.length; j++) { 61 figures2[j].iduntify(); 62 } 63 } 64 static int choose() { 65 int x = (int)(Math.random()*9); 66 return x; 67 } 68 69 70}
試したこと
スーパークラスに
java
1package object; 2 3public abstract class Figure { 4 double area = 0; 5 abstract double getArea(); 6 abstract void iduntify(); 7 void identify() { 8 // TODO 自動生成されたメソッド・スタブ 9 } 10 public static void main(String[] args) { 11 int[] array = new int[10]; 12 for(int i=0;i<=array.length;i++) { 13 array[i]=i+1; 14 } 15 } 16}
というコードを書いてみました。
補足情報(FW/ツールのバージョンなど)
初心者なので用語の正しい定義を理解していない部分があるかと思います。いくつもクラスが分かれてしまって自分でもよくわからなくなってしまったので、同じようなコードを作成したことがある方がいらっしゃいましたら何かアドバイスがいただけたら幸いです、、、
回答1件
あなたの回答
tips
プレビュー