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

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

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

if文とは様々なプログラミング言語で使用される制御構文の一種であり、条件によって処理の流れを制御します。

Java

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

継承

継承(インヘリタンス)はオブジェクト指向プログラミングに存在するシステムです。継承はオブジェクトが各自定義する必要をなくし、継承元のオブジェクトで定義されている内容を引き継ぎます。

Q&A

解決済

2回答

3787閲覧

条件分岐で継承されたクラスを使う

cacao86

総合スコア97

if

if文とは様々なプログラミング言語で使用される制御構文の一種であり、条件によって処理の流れを制御します。

Java

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

継承

継承(インヘリタンス)はオブジェクト指向プログラミングに存在するシステムです。継承はオブジェクトが各自定義する必要をなくし、継承元のオブジェクトで定義されている内容を引き継ぎます。

0グッド

0クリップ

投稿2020/05/28 05:08

編集2020/05/28 05:17

Javaでクラスの継承について学んでいます。
ユーザーからの入力でplusが入力されたらPlusCalcクラスを用いて足し算へ、mulが入力されたらMulCalcクラスを用いて掛け算をして結果を出力したいと思っています。
現在入力を受け付けるだけでその後のif文の実行がされない状態です。
3つ入力するだけで何も起こりません。エラーなども出ていないです。
Calcクラスのメンバーの使い方がよくわからず詰まってしまいました。
どのようにすれば継承先のメソッドが使えるのかご教示お願いいたします。

Java

1import java.util.*; 2 3public class Calculate{ 4 public static void main(String[] args) { 5 Calc c = new Calc(); 6 Scanner scan1 = new Scanner(System.in); 7 Scanner scan2 = new Scanner(System.in); 8 Scanner scan3 = new Scanner(System.in); 9 c.x = scan1.nextInt(); 10 c.input = scan2.next(); 11 c.y = scan3.nextInt(); 12 if (c.input == "plus") { 13 PlusCalc pulsRes = new PlusCalc(); 14 pulsRes.plus(c.x, c.y); 15 }else if(c.input == "mul"){ 16 MulCalc mulRes = new MulCalc(); 17 mulRes.mul(c.x, c.y); 18 } 19 } 20} 21 22class Calc { 23 Integer x; 24 String input; 25 Integer y; 26 Integer res = null; 27 28 // public Calc(){} 29 30 // public Calc(Integer x, Integer y){ 31 // this.x = x; 32 // this.y = y; 33 // } 34} 35 36class PlusCalc extends Calc{ 37 // public PlusCalc(Integer x, Integer y){ 38 // super(x, y); 39 // } 40 public void plus(Integer x, Integer y){ 41 Integer res = x + y; 42 System.out.println("結果: " +res); 43 } 44} 45 46class MulCalc extends Calc{ 47 // public MulCalc(Integer x, Integer y){ 48 // super(x, y); 49 // } 50 public void mul(Integer x, Integer y){ 51 Integer res = x * y; 52 System.out.println("結果: " +res); 53 } 54}
以下理想の出力です 100 plus 200 結果:300

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

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

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

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

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

maisumakun

2020/05/28 05:15

「その後のif文の実行がされない状態です」とありますが、何かエラーなどは出ていますか?何も表示せずに終了する感じでしょうか?
gentaro

2020/05/28 05:17

まぁなんというか、そもそもPlusCalcとMinusCalcというクラスを派生させるのが設計的におかしいと思いますよ。plusもmulも普通に考えればCalcクラスの責務だと思うし。 百歩譲ってそのクラス設計で行くとして、mainメソッドの中でCalcクラスのオブジェクトを作っているのも意味がわかりません。
guest

回答2

0

if (c.input == "plus") { PlusCalc pulsRes = new PlusCalc(); pulsRes.plus(c.x, c.y); }else if(c.input == "mul"){ MulCalc mulRes = new MulCalc(); mulRes.mul(c.x, c.y); }

入力された「文字」と比較するなら、==ではなくequals()です。
if文の条件に何も引っかからずにそのまま終了しています。

あと、以下も気になったのでコメントします。

  • scan2scan3scan1と同じなので不要です。scan1だけでもその後の処理は期待通りになります。
  • 最後にscan1.close();をしてストリームを閉じる癖をつけたほうがいいです。
  • switch文で判定するのもありですね。

投稿2020/05/28 05:40

編集2020/05/28 05:41
kaputaros

総合スコア1844

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

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

kaputaros

2020/05/28 05:41 編集

あ、回答被った(笑)
guest

0

ベストアンサー

× c.input == "plus"
c.input.equals("plus")


継承の使い方として練習の途中のコードと思いますので、ひとまずこれだけで。

投稿2020/05/28 05:31

編集2020/05/28 06:34
quickquip

総合スコア11235

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

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

cacao86

2020/05/28 05:36

ご提示通り書き換えたら無事動作いたしました!ありがとうございます! そこが悪いとは気付きませんでした。 自分の中でこのコードすごく汚く見えるのですが、お手隙でしたら、どう直すべきか意見などいただければ幸いです!
quickquip

2020/05/28 06:33

いや、練習になってないは言い過ぎでした。訂正します。 練習の途中だと思うので「継承の使い方に関してはここでは立ち入りません」という意図なだけでした。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問