質問をすることでしか得られない、回答やアドバイスがある。

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

ただいまの
回答率

88.23%

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

解決済

回答 2

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 206

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

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

```java  
package object;  

import java.util.Arrays;  
import java.util.Random;  
import java.util.concurrent.ThreadLocalRandom;  

public class Figures{  
public static void main(String[] args) {  
Figure[] figures1 = new Figure[9];  
Figure[] figures2 = figures1.clone();      

Rectangle r1 = new Rectangle();  
Rectangle r2 = new Rectangle(30, 20);      
int i = 0;  
figures1[i++] = r1;  
figures1[i++] = r2;  
System.out.println("The area of r1 is" + r1.getArea());  
System.out.println("The area of r2 is" + r2.getArea());  

Circle1 c1 = new Circle1();  
Circle1 c2 = new Circle1(25);  
figures1[i++] = c1;  
figures1[i++] = c2;  

System.out.println("The area of c1 is" + c1.getArea());  
System.out.println("The area of c2 is" + c2.getArea());  

Triangle t1 = new Triangle();  
Triangle t2 = new Triangle(30, 20);  
Triangle t3 = new Triangle(300, 200);  
System.out.println("The area of t1 is" + t1.getArea());  
System.out.println("The area of t2 is" + t2.getArea());  
System.out.println("The area of t3 is" + t3.getArea());  

figures1[i++] = t1;  
figures1[i++] = t2;  
figures1[i++] = t3;  

Square2 s1 = new Square2();  
Square2 s2 = new Square2(20);  
System.out.println("The area of s1 is " + s1.getArea());  
System.out.println("The area of s2 is " + s2.getArea());  

figures1[i++] = s1;  
figures1[i++] = s2;  
}  
public static void shuffle(int[] figures1) {             
Random rnd = ThreadLocalRandom.current();  
for (int k = figures1.length - 1; k > 0; k--) {  
int index = rnd.nextInt(k + 1);  
// 要素入れ替え(swap)  
int tmp = figures1[index];  
figures1[index] = figures1[k];  
figures1[k] = tmp;  
}  

for(int k=0; k<figures1.length;k++) {  
System.out.println(figures1[k].getName()+":"+figures1[k].getArea());  

}  
}  

}  

ここの

for(int k=0; k<figures1.length;k++) {  
System.out.println(figures1[k].getName()+":"+figures1[k].getArea());  

}  

という部分が    「この行に複数マーカーがあります

各図形のコード

package object;  

import java.util.concurrent.atomic.AtomicInteger;  

public class Rectangle extends Figure {  
private double height = 0;  
private double width = 0;  

static final String NAME = Rectangle.class.getSimpleName();  
static final java.util.concurrent.atomic.AtomicInteger  counter = new AtomicInteger(0);  

String name = "Rectangle";  

Rectangle(){  
this.width = 20;  
this.height = 10;  
}  
Rectangle(double w, double h){  
this.width = w;  
this.height = h;  
}      
void setWidth(double w) {  
this.width = w;  
}  
void setHeight(double h) {  
this.height = h;  
}  
void setSize(double w, double h) {  
setWidth(w);  
setHeight(h);  
}  
double getWidth() {  
return this.width;  
}  
double getHeight() {  
return this.height;  
}  

Rectangle(int width, int height){  
super(NAME + counter.addAndGet(1));  
this.width = width;  
this.height = height;  
}  

@Override  
double getArea() {  
return width * height;  
}  
void identify() {  
System.out.println("I am a rectangle with area" + getArea() + ".");  
}  
}  

スーパークラス

package object;  

public abstract class Figure {  
final String name;  
public Figure(){  
this.name = "";  
}  
public Figure(String name) {  
this.name = name;  
}      

abstract double getArea();  

@Override  
public String toString() {  
return name + ":" + String.format("%.1f", getArea());  
}  
public void identify() {  
// TODO 自動生成されたメソッド・スタブ  

}  




}  

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

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 2

checkベストアンサー

0

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

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

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

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2021/01/07 02:28

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

    キャンセル

  • 2021/01/07 08:53

    何が入っているのか?は、何を入れたか?(入れたいか?)という話になります。
    どうなっているのか、よりも前に、どうしたいのか?の方から、コードをそれに寄せてゆくものかと。

    とりあえず、現行ではshuffleメソッドは独立しているので、外側のfigures1、figures2とは、無関係になっています。

    まずは、このメソッドが何をどうしたいのか?という点から考えると良いかと思います。

    キャンセル

  • 2021/01/07 16:53

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

    キャンセル

0

public static void shuffle(int[] figures1) {

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

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2021/01/06 21:38

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

    キャンセル

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

  • ただいまの回答率 88.23%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る

  • トップ
  • Javaに関する質問
  • インスタンスに格納した図形の情報を別のインスタンスにランダムに入れ直して実行する方法