#いくつかの図形の面積を求めるサブクラスを作り、別のクラスに入れてランダムに面積を表示するプログラムを作りたいです。
実行したいコードは以下の通りです
java
1```java 2package object; 3 4import java.util.Arrays; 5import java.util.Random; 6import java.util.concurrent.ThreadLocalRandom; 7 8public class Figures{ 9 public static void main(String[] args) { 10 Figure[] figures1 = new Figure[9]; 11 Figure[] figures2 = figures1.clone(); 12 13 Rectangle r1 = new Rectangle(); 14 Rectangle r2 = new Rectangle(30, 20); 15 int i = 0; 16 figures1[i++] = r1; 17 figures1[i++] = r2; 18 System.out.println("The area of r1 is" + r1.getArea()); 19 System.out.println("The area of r2 is" + r2.getArea()); 20 21 Circle1 c1 = new Circle1(); 22 Circle1 c2 = new Circle1(25); 23 figures1[i++] = c1; 24 figures1[i++] = c2; 25 26 System.out.println("The area of c1 is" + c1.getArea()); 27 System.out.println("The area of c2 is" + c2.getArea()); 28 29 Triangle t1 = new Triangle(); 30 Triangle t2 = new Triangle(30, 20); 31 Triangle t3 = new Triangle(300, 200); 32 System.out.println("The area of t1 is" + t1.getArea()); 33 System.out.println("The area of t2 is" + t2.getArea()); 34 System.out.println("The area of t3 is" + t3.getArea()); 35 36 figures1[i++] = t1; 37 figures1[i++] = t2; 38 figures1[i++] = t3; 39 40 Square2 s1 = new Square2(); 41 Square2 s2 = new Square2(20); 42 System.out.println("The area of s1 is " + s1.getArea()); 43 System.out.println("The area of s2 is " + s2.getArea()); 44 45 figures1[i++] = s1; 46 figures1[i++] = s2; 47 } 48 public static void shuffle(int[] figures1) { 49 Random rnd = ThreadLocalRandom.current(); 50 for (int k = figures1.length - 1; k > 0; k--) { 51 int index = rnd.nextInt(k + 1); 52 // 要素入れ替え(swap) 53 int tmp = figures1[index]; 54 figures1[index] = figures1[k]; 55 figures1[k] = tmp; 56 } 57 58for(int k=0; k<figures1.length;k++) { 59 System.out.println(figures1[k].getName()+":"+figures1[k].getArea()); 60 61 } 62 } 63 64 } 65 66 67
ここの
java
1for(int k=0; k<figures1.length;k++) { 2 System.out.println(figures1[k].getName()+":"+figures1[k].getArea()); 3 4 }
という部分が
「この行に複数マーカーがあります
- getName() を基本タイプ int で起動できません
- getArea() を基本タイプ int で起動できません」
というエラーコードを出してうまく動きません。
既出の質問を参考にさせてもらっています。
図形配列をシャッフルして別の配列に格納する方法
##各図形のコード
java
1 package object; 2 3import java.util.concurrent.atomic.AtomicInteger; 4 5public class Rectangle extends Figure { 6 private double height = 0; 7 private double width = 0; 8 9 static final String NAME = Rectangle.class.getSimpleName(); 10 static final java.util.concurrent.atomic.AtomicInteger counter = new AtomicInteger(0); 11 12 String name = "Rectangle"; 13 14 Rectangle(){ 15 this.width = 20; 16 this.height = 10; 17 } 18 Rectangle(double w, double h){ 19 this.width = w; 20 this.height = h; 21 } 22 void setWidth(double w) { 23 this.width = w; 24 } 25 void setHeight(double h) { 26 this.height = h; 27 } 28 void setSize(double w, double h) { 29 setWidth(w); 30 setHeight(h); 31 } 32 double getWidth() { 33 return this.width; 34 } 35 double getHeight() { 36 return this.height; 37 } 38 39 Rectangle(int width, int height){ 40 super(NAME + counter.addAndGet(1)); 41 this.width = width; 42 this.height = height; 43 } 44 45 @Override 46 double getArea() { 47 return width * height; 48 } 49 void identify() { 50 System.out.println("I am a rectangle with area" + getArea() + "."); 51 } 52} 53
###スーパークラス
java
1package object; 2 3public abstract class Figure { 4 final String name; 5 public Figure(){ 6 this.name = ""; 7 } 8 public Figure(String name) { 9 this.name = name; 10 } 11 12 abstract double getArea(); 13 14 @Override 15 public String toString() { 16 return name + ":" + String.format("%.1f", getArea()); 17 } 18 public void identify() { 19 // TODO 自動生成されたメソッド・スタブ 20 21 } 22 23 24 25 26} 27
どこで間違えているかわかるかたがいらっしゃいましたら教えていただきたいです。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/01/06 17:28
2021/01/06 23:53
2021/01/07 07:53