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

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

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

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

Q&A

解決済

3回答

1426閲覧

Javaプログラミング

kitagawasho

総合スコア28

Java

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

1グッド

1クリップ

投稿2018/12/23 10:18

前提・実現したいこと

Javaを個人で学習していて、練習問題で解答例が載っていないので教えてもらいたい。
円や球などの面積や体積を求めるプログラミングです。

出力としては、
半径1.0の円の面積:3.1
半径1.0の球の面積:4.2
一辺1.0の正方形の面積:1.0
一辺1.0の立方体の面積:1.0

となるようなプログラミングを行いたい。

発生している問題・エラーメッセージ

CircleクラスとSquareクラスで今まではreturnで計算式を返せば、よかったがそれぞれのクラスで二つ式が必要でどうすればいいか手詰まりになった。

該当のソースコード

Java

1interface calcFigure{ 2 double calcArear( double x ); 3 double calcVolume( double x ); 4} 5 6CircleSquareクラスを作成 7 8class FigCalculator{ 9 public static void main( String [] args){ 10 Circle cc = new Circle(); 11 Square sq = new Sqare(); 12 double x= Double.parseDouble(args[0]); 13 Sestem.out.printf("半径%.1fの円の面積:%.1f\n", x, cc.calcArea(x)); 14 Sestem.out.printf("半径%.1fの球の体積:%.1f\n", x, cc.calcvolume(x)); 15 Sestem.out.printf("一辺%.1fの正方形の面積:%.1f\n", x, sq.calcArea(x)); 16 Sestem.out.printf("一辺%.1fの立方体の体積:%.1f\n", x, sq.calcVolume(x)); 17 } 18} 19 20

試したこと

returnで計算式を返そうとしたが一つの式しか返せなかった。

補足情報(FW/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

前提・実現したいこと

ここに質問の内容を詳しく書いてください。
(例)PHP(CakePHP)で●●なシステムを作っています。
■■な機能を実装中に以下のエラーメッセージが発生しました。

発生している問題・エラーメッセージ

エラーメッセージ

該当のソースコード

ソースコード

試したこと

ここに問題に対して試したことを記載してください。

補足情報(FW/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

bochan2👍を押しています

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

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

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

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

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

swordone

2018/12/23 10:44

球や立方体の面積…?
guest

回答3

0

ベストアンサー

クラスは4つ必要ですね。計算式は 円、正方形は面積、 球,立方体は体積ですね。

java

1interface calcFigure2D { 2 public double calcArea(double x); 3} 4interface calcFigure3D { 5 public double calcVolume(double x); 6} 7 8// クラスを作成 9class Circle implements calcFigure2D { 10 public double calcArea(double x) { 11 return Math.PI * x * x; 12 } 13} 14class Square implements calcFigure2D { 15 public double calcArea(double x) { 16 return x * x; 17 } 18} 19class Ball implements calcFigure3D { 20 public double calcVolume(double x) { 21 return 3.0 / 4 * Math.PI * x * x * x; 22 } 23} 24class Cube implements calcFigure3D { 25 public double calcVolume(double x) { 26 return x * x * x; 27 } 28} 29 30public class FigCalculator{ 31 public static void main(String [] args){ 32 Circle circle = new Circle(); 33 Ball ball = new Ball(); 34 Square square = new Square(); 35 Cube cube = new Cube(); 36 37 double x = Double.parseDouble(args[0]); 38 System.out.printf("半径%.1fの円の面積:%.1f\n", x, circle.calcArea(x)); 39 System.out.printf("半径%.1fの球の体積:%.1f\n", x, ball.calcVolume(x)); 40 System.out.printf("一辺%.1fの正方形の面積:%.1f\n", x, square.calcArea(x)); 41 System.out.printf("一辺%.1fの立方体の体積:%.1f\n", x, cube.calcVolume(x)); 42 } 43}

投稿2018/12/24 06:23

katoy

総合スコア22324

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

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

0

球はCircleではないし、立方体もSquareではないので、設計が根本的に間違っている気がする。

投稿2018/12/23 10:43

koko_u

総合スコア936

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

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

bochan2

2018/12/23 10:46

質問者さんは円と正方形のプログラムは出来たけれど球のクラスが出来ないと言いたいのではないでしょうか? なぜかバグで低評価ボタンが押せないので代わりに高評価押しときます
koko_u

2018/12/23 10:50

低評価ボタン、めっちゃ押せそうな気がするけど試してない。
Zuishin

2018/12/23 12:10

低評価は一日に使える限度があります。
guest

0

Java

1class Circle{ 2 private double radius; 3 public Circle(double radius){ 4 this.radius=radius; 5 } 6 public double GetArea(){ 7 return radius*radius*Math.PI; 8   } 9 public double getRadius(){ 10 return radius; 11 } 12 13 public void setRadius(float radius){ 14 this.radius=radius; 15 } 16 17} 18 19class Sphere{ 20 public double radius; 21 public Sphere(double radius){ 22 this.radius=radius; 23 } 24 public double GetArea(){ 25 return radius*radius*Math.PI*4; 26   } 27 public double GetVolume(){ 28 return radius*radius*radius*Math.PI*4/3; 29 } 30 public double getRadius(){ 31 return radius; 32 } 33 34 public void setRadius(float radius){ 35 this.radius=radius; 36 } 37 38}

普通に宣言すれば関数は複数作れますよ

投稿2018/12/23 10:36

編集2018/12/23 12:16
bochan2

総合スコア2050

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

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

LouiS0616

2018/12/23 11:19

radiusフィールドをpublicにしているのはどうしてでしょうか?
bochan2

2018/12/23 11:51

面積と表面積を求めるだけ外部から変更しても差し支えが無いのでpublicにしました。 構文的に冗長的になっている気もしますがある程度はまともだと思います。
LouiS0616

2018/12/23 12:01 編集

積極的な理由が無い限りフィールドをpublicにするのは避けた方が良いかと。 そもそも外部から自在に半径を設定したいのならば、getArea及びgetVolumeを非staticにする正当な理由が無いです。
Zuishin

2018/12/23 12:09 編集

getArea や getVolume は呼ばれる度に一々計算していますが、それなら引数に radius を取る関数で十分です。 radius を設定するタイミングまたは radius が設定された後はじめて呼ばれたタイミングで計算し、後はキャッシュを返すだけにした方が効率的ですし、オブジェクト指向らしくなります。 その意味でも radius は公開せず getter setter を公開するのが良いと思います。
bochan2

2018/12/23 12:11

LouiSさん、Zuishinさんアドバイスありがとうございます。 radiusを公開せずにgetter setterをpublicにする形に編集しておきます。
LouiS0616

2018/12/23 12:56 編集

radiusの値を外部からいじれるようにするくらいなら、引数として受け取った方が良いという話です。 Zuishinさんの言うとおりキャッシュを用意するならその限りではありませんが。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問