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

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

新規登録して質問してみよう
ただいま回答率
87.20%
Java

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

解決済

「型の不一致」というエラーメッセージに関して、それぞれの型の違いがわかりません。

shimajiro1917
shimajiro1917

総合スコア4

Java

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

2回答

0評価

0クリップ

339閲覧

投稿2021/01/05 16:40

#様々な図形の面積を求めるいくつかのインスタンスを別のクラスで番号をつけてランダムに実行するプログラムが描きたいです。
サブクラスはそれぞれRectangle,Circle1,Triangle,Squareです。
##スーパークラスは以下の通りに作りました。

java

package object; public abstract class Figure { double area = 0; abstract double getArea(); abstract void identify(); final String name; public Figure(String name) { this.name = ""; } public Figure(){ this.name = ""; } @Override public String toString() { return name + ":" + String.format("%.1f", getArea()); } }

###これらのサブクラスをFiguresというクラスに入れてランダムに面積をコンソールに表示したいです。

java

package object; import java.util.Random; import java.util.concurrent.ThreadLocalRandom; public class Figures{ public static void main(String[] args) { Figure[] figures1 = new Figure[8]; Figure[] figures2 = figures1.clone(); Figure temp; Rectangle r1 = new Rectangle(); Rectangle r2 = new Rectangle(30, 20); int i = 0; figures1[i++] = r1; figures1[i++] = r2; 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; Figure[] cloneShuffle;Figure[] figures;{ Figure[] result = figures.clone(); Random rnd = ThreadLocalRandom.current(); for (int k = result.length - 1; k > 0; k--) { int index = rnd.nextInt(k + 1); Figure temp1 = result[index]; result[index] = result[k]; result[k] = temp1; } return; } for(i=0;i<figures2.length;i++) { System.out.println(figures2[i].getClass().getName()+":"+figures2[i].getArea()); } } ///図形の説明 class Figure{ int count = 0; double area =0; double getArea() { return 0; } } class Rectangle extends Figure{ int width; int height; String name="Rectangle"; Rectangle(){ setSize(10,20); } Rectangle(int width,int height){ setSize(width,height); } void setSize(int w,int h) { width=w; height=h; } double getArea() { return width*height; } } class Circle extends Figure{ int r; String name="Circle"; Circle(){ setSize(5); } Circle(int r){ setSize(r); } void setSize(int r){ this.r=r; } double getArea() { return r*r*Math.PI; } } }

####このコードを実行すると、
figures1[i++] = r1;
figures1[i++] = r2;
は格納されるのですが、残りのCircle1,Triangle,Squareがうまく格納されず「型の不一致: Circle1 から Figures.Figure には変換できません」というエラーメッセージが表示されてしまいます。

RectangleのコードとCircle1のコードは以下のように描きました。

java

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); 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() + "."); } }

java

package object; import java.util.concurrent.atomic.AtomicInteger; public class Circle1 extends Figure { private double radius = 0; static final String NAME = Rectangle.class.getSimpleName(); static final java.util.concurrent.atomic.AtomicInteger counter = new AtomicInteger(0); Circle1(){ this.radius = 20; } void Circle(double r){ this.radius = r; } void setRadius(double r) { } void setSize(double r) { setRadius(r); } double getRadius() { return this.radius; } Circle1(int r){ super(NAME + counter.addAndGet(1)); this.radius = r; } @Override double getArea() { area = Math.PI * this.radius * this.radius; return area; // TODO 自動生成されたメソッド・スタブ } void identify() { System.out.println("I am a Circle1 with area" + getArea() + "and" + getNumber() + "."); // TODO 自動生成されたメソッド・スタブ } private String getNumber() { // TODO 自動生成されたメソッド・スタブ return null; } @Override void iduntify() { // TODO 自動生成されたメソッド・スタブ } }

型の不一致というエラーはStringとintの時によくみられるエラーですが、今回私は全てint型で書いているつもりで、なぜRectangleは実行できたのに他のものが実行できなかったのかがわかりませんでした。試しにRectangleとCircleの順を変えてみたのですが結果は同じでした。
初心者で理解が甘い部分があるかと思います。何かわかるかたがいらっしゃいましたらご回答をお願いします。

良い質問の評価を上げる

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

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

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

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

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

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

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

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

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

hoshi-takanori

2021/01/05 17:47

Figure クラスが 2 つありますね…。
dodox86

2021/01/06 02:57

コンパイルエラーを取ることに集中してしまっているのか、少々場当たり的な修正で混乱を呼んでいる気がします。先の以下のご質問ではFigureクラスは抽象クラスで、それを継承したものがRectangleなどであったはずですが、ひとつひとつ解決しましょう。 [個々のインスタンスに番号を振りたいです。サブクラスの扱い方等、、] https://teratail.com/questions/314103 (※修正著しいようなので回答はやめました)

まだ回答がついていません

会員登録して回答してみよう

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

ただいまの回答率
87.20%

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

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

質問する

関連した質問

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

Java

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