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

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

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

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

Q&A

解決済

4回答

2184閲覧

return文でまとめて計算したい

shou_hitotose

総合スコア66

Java

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

0グッド

0クリップ

投稿2019/12/15 04:36

編集2019/12/15 04:40

現在Javaを学習中です。Javaについてふと疑問に思ったことがあったので質問したいです。

Java

1class Calculator { 2 private double sum; 3 private static int n; 4 5 public Calculator() { 6 sum = 0.0; 7 n = 0; 8 } 9 10 public Calculator(double x) { 11 sum = x; 12 n = 0; 13 } 14 15 public double getSum() { 16 return sum; 17 } 18 19 public int getN() { 20 return n; 21 } 22 23 public double plus(double x) { 24 sum += x; 25 n++; 26 return sum; 27 } 28 29 public double minus(double x) { 30 sum -= x; 31 n++; 32 return sum; 33 } 34 35 public double multiplied(double x) { 36 sum *= x; 37 n++; 38 return sum; 39 } 40 41 public double divided(double x) { 42 sum /= x; 43 n++; 44 return sum; 45 } 46} 47 48class NewCalculator extends Calculator { 49 public NewCalculator() { 50 super(0.0); 51 } 52 53 public NewCalculator(double x) { 54 super(x); 55 } 56 57 public void plus_n(double x, int n) { 58 for(int i=1; i<=n; i++) 59 plus(x); 60 } 61 62 public void multiplied_n(double x, int nn) { 63 for(int i=1; i<=nn; i++){ 64 multiplied(x); 65 } 66 } 67} 68 69class Exercise5_3 { 70 public static void main(String[] args) { 71 NewCalculator cal1 = new NewCalculator(10); 72 NewCalculator cal2 = new NewCalculator(); 73 cal1.divided(3.0); 74 cal1.multiplied_n(5.0, 3); 75 cal2.plus_n(5.0, 3); 76 cal2.minus(3.5); 77 cal2.multiplied_n(2.0, 3); 78 79 System.out.println("計算機1の計算結果は" + String.format("%.3f", cal1.getSum())); 80 System.out.println("計算機2の計算結果は" + String.format("%.3f", cal2.getSum())); 81 System.out.println("計算機1のスーパークラスの呼ばれた回数は" + cal1.getN() + "回です。"); 82 System.out.println("計算機2のスーパークラスの呼ばれた回数は" + cal2.getN() + "回です。"); 83 84 } 85}

上記のプログラムのうちの計算部分
public double plus(double x) {
sum += x;
n++;
return sum;
}などにおいてsum+=x;とreturn文を一つの文で記述することは可能なのでしょうか?
ためしにreturn sum + x;などで試してみたのですがこれだと計算がされずに出力されてしまいました。もし一つの文にまとめるとしたらどう記述すればいいのか教えていただけると幸いです。またできたらreturn sum + x;でできない理由も教えてください

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

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

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

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

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

NAOPI-05

2019/12/15 04:59

計算がされずに出力されたとのことですが、具体的にはどのような結果でしたか? それと、質問の際には極力関係のない部分はプログラムから削ぎ落とした方が良いと思います。 質問の本質的な部分だけを載せた方が、回答者が読み解くのに時間がかからず素早く回答を得られると思います。
shou_hitotose

2019/12/15 14:18

具体的には0.0000と出力されました。 すみません、次回からそぎ落として質問しようと思います。
guest

回答4

0

return sum += x; にしてみてください。

投稿2019/12/15 05:00

kazuma-s

総合スコア8224

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

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

shou_hitotose

2019/12/15 14:17

回答ありがとうございます! ちなみになぜ return sum += x;にするとできるのでしょうか?
momon-ga

2019/12/16 07:35

sum + x と、sum += x の違いがわからないってこと? i + 1 と、 i++ の違いは、わかる?
guest

0

ベストアンサー

Java

1return sum + x;

という書き方では、呼び出し元にはsumxを足した結果が返されますが、sumの値そのものは更新されません。

Java

1return sum += x;

という書き方では、呼び出し元にはsumxを足した結果が返されますが、sumの値そのものが更新されます。

なぜなら、「+」は加算演算子と言い、左右の項を足した結果を返すからで、「+=」は加算代入演算子と言い、左右の項を足した結果を左の項(変数)に代入して返すからです。

投稿2019/12/16 02:41

NAOPI-05

総合スコア132

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

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

0

単純にreturn sum += x;で目標達成できそうです。ただし、staticフィールドnの用途が不明です。これ次第では意味が変わってしまいますので、それを理解した上で書き換えてください。

投稿2019/12/15 14:31

HogeAnimalLover

総合スコア4830

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

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

0

別の方法として、returnしない手もあり?

java

1class Calculator { 2 private double value; 3 private static int times; 4 5 public Calculator() { 6 value = 0.0; 7 times = 0; 8 } 9 10 public String toString() { 11 return "" + value; 12 } 13 14 public Calculator(double x) { 15 value = x; 16 times = 0; 17 } 18 19 protected void setValue(double value) { 20 this.value = value; 21 this.times++; 22 } 23 24 public double getValue() { 25 return value; 26 } 27 28 public int getTimes() { 29 return times; 30 } 31 32 public void plus(double x) { 33 setValue(value + x); 34 } 35 36 public void minus(double x) { 37 setValue(value - x); 38 } 39 40 public void multiplied(double x) { 41 setValue(value * x); 42 } 43 44 public void divided(double x) { 45 setValue(value / x); 46 } 47} 48 49class NewCalculator extends Calculator { 50 public NewCalculator() { 51 super(); 52 } 53 54 public NewCalculator(double x) { 55 super(x); 56 } 57 58 public void plus(double x, int n) { 59 setValue(getValue() + x * n); 60 } 61 62 public void multiplied(double x, int n) { 63 double value = getValue(); 64 for(int i=0; i<n; i++) 65 value *= x; 66 setValue(value); 67 } 68} 69 70class Exercise5_3 { 71 public static void main(String[] args) { 72 NewCalculator cal1 = new NewCalculator(10); 73 NewCalculator cal2 = new NewCalculator(); 74 cal1.divided(3.0); 75 cal1.multiplied(5.0, 3); 76 cal2.plus(5.0, 3); 77 cal2.minus(3.5); 78 cal2.multiplied(2.0, 3); 79 80 System.out.println("計算機1の計算結果は" + String.format("%.3f", cal1.getValue())); 81 System.out.println("計算機2の計算結果は" + String.format("%.3f", cal2.getValue())); 82 System.out.println("計算機1のスーパークラスの呼ばれた回数は" + cal1.getTimes() + "回です。"); 83 System.out.println("計算機2のスーパークラスの呼ばれた回数は" + cal2.getTimes() + "回です。"); 84 85 } 86}

投稿2019/12/15 05:16

編集2019/12/15 05:22
shiracamus

総合スコア5406

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問