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

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

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

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

Q&A

解決済

5回答

28929閲覧

合計、平均の出しかた

Tutti

総合スコア83

Java

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

0グッド

0クリップ

投稿2016/07/13 08:06

編集2016/07/13 08:51
class Art{ public static void main(String[] args){ //argを初期化 String arg = ""; //sumを初期化 int sum = 0; for(int i = 0; i < args.length; i++){ arg = args[i]; } int num = Integer.parseInt(arg); double heikin = 0.0; //平均を算出 heikin = sum/num; System.out.println("平均は「" + heikin + "」です"); System.out.println("合計は「" + num + "」です"); } }

コマンドライン引数から受け取った値を合計をして平均をだすプログラムを作ったつもりなのですが、合計のところで何と何を合計したらいいのか、など、分からなくなってしまいました。
どなたか教えていただけませんか?

↓訂正をして、表示が出来るようになりました。
ですが、まだ答えが違う答えになります。

class Art02{ public static void main(String[] args){ //ループ中に取り出した文字列を、数値に変換して処理するための変数 int sum = 0; //数値の合計入れるための変数 int sum2 = 0; for(int i = 0; i < args.length; i++){ //lengthから受け取ったargをint型に変換 sum2 = sum + (Integer.parseInt(args[i])); } //数値の合計と配列数から求めた平均値を保持するための変 //平均を算出 double average=(double)sum/args.length; System.out.println("平均は「" + average + "」です"); System.out.println("合計は「" + sum2 + "」です"); } }

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

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

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

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

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

guest

回答5

0

ベストアンサー

質問文にコードをベースに書いてみました。

java

1class Art02 { 2 public static void main(String[] args) { 3 if (args.length == 0) { 4 return; 5 } 6 7 int sum = 0; 8 for (int i = 0; i < args.length; i++) { 9 // 受け取ったargsをintに変換してから、足し算していく 10 sum += (Integer.parseInt(args[i])); 11 } 12 13 System.out.println("平均は「" + (double) sum / args.length + "」です"); 14 System.out.println("合計は「" + sum + "」です"); 15 } 16}

投稿2016/07/13 12:35

katoy

総合スコア22324

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

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

Tutti

2016/07/13 23:42

回答していただきありがとうございます! あの、もしよろしければ、なぜ if 文で 0 のときは値を返すようにしているのかおしえていただけませんか?
katoy

2016/07/13 23:47

0 で割り算をするとExceptionが発生してしまいます。 入力データ数が 0 個だったときにどうするかが質問文からは不明だったので、 ここでは、なにもしないでプログラムを終了 (return )しています。 値は返していません。main() から return するのでプログラムが終了するだけです。
katoy

2016/07/13 23:50

本当はエラー処理はいろいろ検討をする必要があります。 入力した文字列が数字でなかった場合とか、足し算しているあいだに整数で表せる値の範囲を超えてしまった場合とか, ....
Tutti

2016/07/13 23:56

なるほど!確かに0のときはエラーが発生しますからその処理を行わなければなりませんね。そのことに気がつきませんでした。 このような場合、returnで返してあげればエラー対処しなくても、いいのですか? エラーを受け取ったほうがよいのでしょうか?
Tutti

2016/07/14 00:07

すみません。問題文の記入が抜けていました。 これの問題文は、コマンドライン引数で複数の値を受け取り、合計して、その平均を出しなさいという問題です。 なので、今回は0を受け取ったときのエラーの対処は書かなくても大丈夫でした。
Tutti

2016/07/14 00:10

それと、今回の問題、おかげさまで解くことが出来ました!!回答を参考にさせて頂きました。本当にありがとうございます!!助かりました。 このとき方を忘れないようにします!
guest

0

変数名を簡略化しすぎで逆に何をする変数か分からなくなった、って感じですかね?

変数を宣言しているところで、「argを初期化」といったコメントを書いていますが、
ここは、変数の役割をコメントとして書いたほうが良いと思います。
argを初期化していることぐらい、コード見れば分かりますからね。

今回の場合なら、

Java

1//ループ中に、配列から文字列を1つ取り出して処理するための変数 2String arg; 3 4//ループ中に取り出した文字列を、数値に変換して処理するための変数 5int num; 6 7//数値の合計を行うための変数 8int sum = 0; 9 10//数値の合計と配列数から求めた平均値を保持するための変数 11double heikin;

みたいな感じですかね?

投稿2016/07/13 08:31

abs123

総合スコア1280

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

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

Tutti

2016/07/13 08:39

詳しく書いていただき、ありがとうございます!今後から、コメントの書き方はこのようにして書きます。
abs123

2016/07/13 08:50

他人からみて、分かりやすいコメントというのを、早いうちから意識すると後が楽です。 分かりやすいコメント書いていると、徹夜明け等で倒れた後とかに、 いったい何を書いていたんだっけ?となることを防ぐことが出来ます。
Tutti

2016/07/13 08:52

そんなことがあるんですね。。。教えていただきありがとうございます!気をつけます。
guest

0

平均は合計/個数
で個数はargsの長さと同じ

java

1int num=0; 2//合計を計算 3for(int i=0;i<args.length;i++){ 4 num+= Integer.parseInt(args[i]); 5} 6//平均を計算 7double average=(double)num/args.length;

Java8ならラムダでもっときれいにかけそう・・
驚くべきことに一行でかけました=ラムダの出番はなかった

java

1System.out.println(Stream.of(args).mapToInt(Integer::parseInt).average().getAsDouble());

###追記
0+args[i]を代入してますよ・・

投稿2016/07/13 08:31

編集2016/07/13 09:02
tignear

総合スコア260

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

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

Tutti

2016/07/13 23:44

この処理を一文で書くことが出来るんですね!そのことに驚きです。。。 もっと沢山練習問題などを解いて、理解できるようにします。
guest

0

こんな感じですか?

java

1public class Art { 2 3 public static void main(String[] args) { 4 // TODO 自動生成されたメソッド・スタブ 5 //sumを初期化 6 int sum = 0; 7 8 for(int i = 0; i < args.length; i++){ 9 sum = sum +Integer.parseInt(args[i]); 10 } 11 12 double heikin = 0.0; 13 14 //平均を算出 15 heikin = sum/args.length; 16 17 System.out.println("平均は「" + heikin + "」です"); 18 System.out.println("合計は「" + sum + "」です"); 19 } 20 21}

投稿2016/07/13 08:23

tomo.ina

総合スコア357

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

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

tignear

2016/07/13 08:44 編集

double(float)=int/intとすると答えの小数点以下が切り捨てられます
Tutti

2016/07/13 08:46

それは困りますね! 小数点を残すにはdoubbleに直す必要がありますか?
tignear

2016/07/13 08:51

どちらかの値をキャストしておけば大丈夫です double heikin=(double)sum/args.length; みたいな感じです
Tutti

2016/07/13 08:53

ありがとうございます!!!!!
guest

0

コマンドライン引数で受け取った値を合計するんじゃないですか?

投稿2016/07/13 08:09

Zuishin

総合スコア28660

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

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

Tutti

2016/07/13 08:13

そうなんですが、、、 コマンドライン引数で受け取った値はnumに入れているので、そこでも悩んでいます。
Zuishin

2016/07/13 08:16

ループ終わってから入れてもしょうがないと思います。
Tutti

2016/07/13 08:46

おっしゃると通りです。
Zuishin

2016/07/13 08:59

先生はそこを自分で考えて欲しかったんだと思います。答えが必要なら学生に頼まず自分で出せるでしょうから。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.49%

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

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

質問する

関連した質問