🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Java

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

Q&A

解決済

2回答

5109閲覧

インスタンスに格納した図形の情報を別のインスタンスにランダムに入れ直して実行する方法

shimajiro1917

総合スコア4

Java

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

1グッド

0クリップ

投稿2021/01/06 06:46

編集2021/01/06 12:51

#いくつかの図形の面積を求めるサブクラスを作り、別のクラスに入れてランダムに面積を表示するプログラムを作りたいです。

実行したいコードは以下の通りです

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

どこで間違えているかわかるかたがいらっしゃいましたら教えていただきたいです。

TayukoArakawa👍を押しています

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

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

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

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

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

guest

回答2

0

ベストアンサー

figures1[k].getName()の部分にエラーが出ているのであれば、
まずは、figures1[k]の型を調べます。
コードを辿ると……
public static void shuffle(int[] figures1) {
ここで、
int[] figures1
と定義されていますので、figures1[k]の型は、int型となります。
int型は、基本型なので.getName()のようなメソッドは持ちません。

それをまとめると、getName() を基本タイプ int で起動できませんのエラーになります。

これを解決するためには、適切な型を指定する必要があります。
何の型にすべきかは、何をしたいか次第ですので、それに合わせて相応しいものを選んでください。

投稿2021/01/06 16:15

amiya

総合スコア1218

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

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

shimajiro1917

2021/01/06 17:28

とても勉強になったのでベストアンサーに選ばせていただきました。 しかし、私の近いが甘いものでfigures1とfigures2にはどのような数値?が入っているのかいまいち理解できていない状態です。 System.out.println("The area of r1 is" + s1.getArea()); の中身をランダムにfigures2の中に入れて実行しているものと思っていたので、どのように型を変換すれば実行できるのかわからないのでご助言をいただけると幸いです。
amiya

2021/01/06 23:53

何が入っているのか?は、何を入れたか?(入れたいか?)という話になります。 どうなっているのか、よりも前に、どうしたいのか?の方から、コードをそれに寄せてゆくものかと。 とりあえず、現行ではshuffleメソッドは独立しているので、外側のfigures1、figures2とは、無関係になっています。 まずは、このメソッドが何をどうしたいのか?という点から考えると良いかと思います。
shimajiro1917

2021/01/07 07:53

figures1の内容をfigures2に入れたいのでその方向で再度調べて考えてみます。 理解が浅いので再度検討し直します。ご丁寧にご回答していただきありがとうございます。
guest

0

java

1public static void shuffle(int[] figures1) {

の部分を直せばよいです。

投稿2021/01/06 07:01

momon-ga

総合スコア4826

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

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

shimajiro1917

2021/01/06 12:38

そこなんですね。 どのように間違えているのか検討がつかないのでもう少し詳細に教えていただけると幸いです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問