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

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

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

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

Q&A

1回答

1603閲覧

コンストラクタに関する課題

aikosu

総合スコア12

Java

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

0グッド

0クリップ

投稿2017/09/21 08:41

編集2017/09/21 09:00

■問題
キーボードから円の半径と円周率を入力させ円の面積と演習を計算して出力するプログラムを作成してください。なお『Circle』クラスを作成しコンストラクタで半径と円周率を設定してください。ただし円周率の入力が省略された場合は『Circle』クラスの定数『PI』に『3.14』を代入しておきその定数を利用してください。また半径と円周率に数値以外のものが入力された場合『半径は数値を入力してください』とメッセージを出力してください。可能であれば面積、円周の値は小数第2位までの出力としてください。

実行例

半径>5
円周率>3
面積:75.0 円周:30.0

この問題を解いているのですがいまだ解けていません...

Java

1package en12; 2 3import java.io.BufferedReader; 4import java.io.IOException; 5import java.io.InputStreamReader; 6 7public class Ex0512 { 8 9 10 public static void main(String[] args) throws IOException { 11 BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); 12 try { 13 System.out.print("半径>"); 14 String str = br.readLine(); 15 double radius = Double.parseDouble(str); 16 try { 17 System.out.print("円周率>"); 18 String str1 = br.readLine(); 19 if(str1 == null || str1.length() == 0){ 20 Circle C= new Circle(radius); 21 C.area(); 22 } 23 double pi = Double.parseDouble(str1); 24 Circle B = new Circle(radius, pi); 25 B.area(); 26 } catch (NumberFormatException e) { 27 System.out.println("円周は数値を入力してください"); 28 } 29 } catch (NumberFormatException e) { 30 System.out.println("半径は数値を入力してください"); 31 } 32 } 33}

Java

1package en12; 2 3public class Circle { 4 private double pi, radius; 5 final double PI = 3.14; 6 7 public Circle(double radius) { 8 this.pi = 3.14; 9 } 10 11 public Circle(double radius, double pi) { 12 super(); 13 this.radius = radius; 14 this.pi = pi; 15 } 16 17 public double getPi() { 18 return pi; 19 } 20 21 public void setPi(double pi) { 22 this.pi = pi; 23 } 24 25 public double getRadius() { 26 return radius; 27 } 28 29 public void setRadius(double radius) { 30 this.radius = radius; 31 } 32 33 void area() { 34 System.out.print("面積:" + (radius * radius * pi)); 35 } 36} 37

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

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

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

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

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

aikosu

2017/09/21 08:44

そうです...いまだ解けません...
LouiS0616

2017/09/21 08:46

せめて、前回の回答で何が理解出来なかったか書きましょう。
aikosu

2017/09/21 08:51

円周率を入力しなかった場合どうコードを書けばよいのかわかりません
aikosu

2017/09/21 08:54 編集

コメントミスしたので消しました
LouiS0616

2017/09/21 08:54

さすがにこれは読めません。質問を編集してください。編集するときは、コード部分を選択した状態で<code>ボタンを押すようにしてください。読みやすくなります。
aikosu

2017/09/21 09:00

ありがとうございます。作成したコードを追加しました
LouiS0616

2017/09/21 09:11

なにをもって、『円周率の入力を省略』とみなすのでしょう?
aikosu

2017/09/21 09:25

コンソール上で文字数字を打たずにEnterを押すことです
guest

回答1

0

上手くいかない理由

コンストラクタCircle(double radius)で、入力値が処理されていないからです。
また、3.14という即値をここに書くのはおそらく仕様に反するでしょう。

Java

1public Circle(double radius) { 2 this.pi = 3.14; 3}

さらに、入力が省略された際に、省略されていないときの処理をスキップ出来ていません。
if-elseで分離する必要があります。

質問する際には、どのように上手くいかないのか書いておくとスムーズです。

楽をするなら

とりあえず、円周率の入力省略を感知できれば良いと仮定します。

こういう静的メソッドを組むと楽が出来るかもしれません。
ただし、負の数値の入力は受け付けず、入力を省略されたときは-1を返すようにしてあります。

Java

1private static double readPositiveDouble(String varName) throws IOException { 2 while(true) { 3 System.out.print(varName + "> "); 4 try { 5 String input = br.readLine(); 6 if(input.length() == 0) return -1; 7 8 double ret = Double.parseDouble(input); 9 if(ret < 0) { 10 System.out.println(varName + "は正数を入力してください。"); 11 continue; 12 } 13 14 return ret; 15 16 } catch(NumberFormatException e) { 17 System.out.println(varName + "は数値を入力してください。"); 18 } 19 } 20}

使い方に関しては、そんなに難しくないので適宜試してみてください。
どのような処理をしているかも、じっくり考えればわかるはずです。

ついでに

日頃から処理を細かく切り分ける癖をつけておくと、いろいろ工夫できます。
たとえば、入力の省略を禁止したり、

Java

1private static double readPositiveDoubleByForce(String varName) throws IOException { 2 double ret; 3 do { 4 System.out.println(varName + "の入力は必須です。"); 5 ret = readPositiveDouble(varName); 6 } while(ret == -1); 7 return ret; 8}

デフォルト値を設定したり。

Java

1private static double readPositiveDouble(String varName, double defaultValue) throws IOException { 2 double ret = readPositiveDouble(varName); 3 return ret == -1 ? defaultValue : ret; 4}

今回の課題の場合、後者は不適ですが。

投稿2017/09/21 09:39

編集2017/09/21 10:19
LouiS0616

総合スコア35660

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

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

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問