Java コマンドライン引数で平均を求める
- 評価
- クリップ 0
- VIEW 3,593

退会済みユーザー
以下の問いのプログラムを現在作成しています。
Java
標準入力から、n個の年齢を受け取り、その平均年齢を算出するプログラムを作成してください。
年齢はコマンドライン引数から取得するものとします。
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class test42 {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
// String old = br.readLine();
int n = args.length;
int sum = 0;
for (int i = 0; i < n; i++) {
sum += Integer.parseInt(args[i]);
}
int ave = (sum / n);
System.out.println(ave);
}
}
// エラー
Exception in thread "main" java.lang.ArithmeticException: / by zero
at test42.main(test42.java:19)
おそらくnが0になって計算が出来ないからだと思います。
どのようにこの後を組み立てればよいか教えていただけるとありがたいです。
当方はコマンドライン引数の使い方が十分な理解が出来ていないのであわせて教えていただけたら幸いです。
-追記-
文字の入力も出来ずにn==0のままです。
問題はキーボードで入力させてそれを引数として渡すのでしょうか。
-
気になる質問をクリップする
クリップした質問は、後からいつでもマイページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
クリップを取り消します
-
良い質問の評価を上げる
以下のような質問は評価を上げましょう
- 質問内容が明確
- 自分も答えを知りたい
- 質問者以外のユーザにも役立つ
評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。
質問の評価を上げたことを取り消します
-
評価を下げられる数の上限に達しました
評価を下げることができません
- 1日5回まで評価を下げられます
- 1日に1ユーザに対して2回まで評価を下げられます
質問の評価を下げる
teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。
- プログラミングに関係のない質問
- やってほしいことだけを記載した丸投げの質問
- 問題・課題が含まれていない質問
- 意図的に内容が抹消された質問
- 過去に投稿した質問と同じ内容の質問
- 広告と受け取られるような投稿
評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。
質問の評価を下げたことを取り消します
この機能は開放されていません
評価を下げる条件を満たしてません
質問の評価を下げる機能の利用条件
この機能を利用するためには、以下の事項を行う必要があります。
- 質問回答など一定の行動
-
メールアドレスの認証
メールアドレスの認証
-
質問評価に関するヘルプページの閲覧
質問評価に関するヘルプページの閲覧
checkベストアンサー
+2
割り算は分母が0になってしまうと計算できないので、そのチェックは必要になるかと。
そもそも実行しても結果が出ないんだから、引数がない旨メッセージ出力で終了しちゃってもいいんじゃないかと。
コマンドライン引数 について
main()メソッドの引数String[] args
に入ってくるのは、javaコマンドを実行した際の引数(コマンドライン引数)です。
java 実行するクラス名 引数1 引数2 ・・・ 引数n
引数1から引数nまでが配列として扱われ、main()メソッドの引数args
に渡されて実行されます。
2つ目以降を指定したい場合はスペースで区切ります。
なので、引数1 は args[0] に当たります。その後は・・・わかりますよね?(笑
eclipseで作成・実行してしまうと分かりにくいのですが、
実行->実行構成 で実行したいクラスを選択すると「(x)=引数」というタブがあると思います。
そのタブの「プログラムの引数」がコマンドライン引数になります。
指定するときはここに入力し、実行してください。
複数渡すときはスペースで区切りますよ。
ちなみに、main()メソッドの最初にやってるSystem.inを使った処理は、java実行後にコマンドライン入力を受け付ける処理です。
今回のやりたいことを考えると、不要かと。使うならclose()処理も必要。。。かな。
投稿
-
回答の評価を上げる
以下のような回答は評価を上げましょう
- 正しい回答
- わかりやすい回答
- ためになる回答
評価が高い回答ほどページの上位に表示されます。
-
回答の評価を下げる
下記のような回答は推奨されていません。
- 間違っている回答
- 質問の回答になっていない投稿
- スパムや攻撃的な表現を用いた投稿
評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。
+1
>おそらくnが0になって計算が出来ないからだと思います。どのようにこの後を組み立てればよいか教えていただけるとありがたいです。
推測の通りだと思います。
nが0の場合、どのように処理したいのでしょうか?
nが0の場合とnが0以外の場合で処理を分けるように実装したい場合、分岐文(if文)を用いて処理を分けるのが良いかと思います。
具体的な例はあえて記載しません。
どのようなロジックを組むべきか、フローチャート等を書くと手順が整理できてよいかと思います。
※if文の使い方であればGoogleで調べるなりすればたくさん出てくると思いますので。
投稿
-
回答の評価を上げる
以下のような回答は評価を上げましょう
- 正しい回答
- わかりやすい回答
- ためになる回答
評価が高い回答ほどページの上位に表示されます。
-
回答の評価を下げる
下記のような回答は推奨されていません。
- 間違っている回答
- 質問の回答になっていない投稿
- スパムや攻撃的な表現を用いた投稿
評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。
+1
nが0と言うのは、args.lengthが0、もっと言うとコマンドライン引数に何も入っていない状態ということになります。その場合はそもそも平均を計算出来ない旨を表示するのが妥当では?
あと、これは不要なのでは?
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
投稿
-
回答の評価を上げる
以下のような回答は評価を上げましょう
- 正しい回答
- わかりやすい回答
- ためになる回答
評価が高い回答ほどページの上位に表示されます。
-
回答の評価を下げる
下記のような回答は推奨されていません。
- 間違っている回答
- 質問の回答になっていない投稿
- スパムや攻撃的な表現を用いた投稿
評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。
+1
コマンドライン上で
java test42
みたいに打って実行すると思いますが、
「コマンドライン引数で渡す」とは
java test42 21 42 10
のように実行時にパラメータを渡す、というものです。
投稿
-
回答の評価を上げる
以下のような回答は評価を上げましょう
- 正しい回答
- わかりやすい回答
- ためになる回答
評価が高い回答ほどページの上位に表示されます。
-
回答の評価を下げる
下記のような回答は推奨されていません。
- 間違っている回答
- 質問の回答になっていない投稿
- スパムや攻撃的な表現を用いた投稿
評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。
+1
1.main()の入り口で、“コマンドライン引数”があるかどうか確認(args.lengthが1以上)
こんな感じ・・・
if (args.length < 1) {
System.err.println("引数がありません");
System.exit(1);
}
2.以下はそのまま使えます
int n = args.length;
int sum = 0;
for (int i = 0; i < n; i++) {
sum += Integer.parseInt(args[i]);
}
int ave = (sum / n);
System.out.println(ave);
コマンドで起動する場合は、java test 31 32 33・・・など
投稿
-
回答の評価を上げる
以下のような回答は評価を上げましょう
- 正しい回答
- わかりやすい回答
- ためになる回答
評価が高い回答ほどページの上位に表示されます。
-
回答の評価を下げる
下記のような回答は推奨されていません。
- 間違っている回答
- 質問の回答になっていない投稿
- スパムや攻撃的な表現を用いた投稿
評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。
+1
皆さんが仰る通り、プログラム実行に引数を入力しないと意図通りの動作にならないです。つまり、コマンドラインの使い方(プログラムの実行のさせ方)に問題があります。
例えば、以下のようにコマンドを入力すればいいです。
「java クラス名 引数1 引数2・・・」
なお、これも皆さんの仰る通りですが、引数がない場合の注意文とか数字でない場合とかUSAGE ERRORを表示すると親切ですね。
投稿
-
回答の評価を上げる
以下のような回答は評価を上げましょう
- 正しい回答
- わかりやすい回答
- ためになる回答
評価が高い回答ほどページの上位に表示されます。
-
回答の評価を下げる
下記のような回答は推奨されていません。
- 間違っている回答
- 質問の回答になっていない投稿
- スパムや攻撃的な表現を用いた投稿
評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。
0
コマンドライン引数の使い方の例を示します。参考になれば幸いです。
Samole01.java
public class Sample01 {
public static void main(String[] args) {
if (args.length == 0) {
System.out.println("データを入力してください。");
return;
}
for (String s : args) {
System.out.println(s);
}
}
}
実行例:
$ java Sample01
データを入力してください。
$ java Sample01 1 2 3
1
2
3
投稿
-
回答の評価を上げる
以下のような回答は評価を上げましょう
- 正しい回答
- わかりやすい回答
- ためになる回答
評価が高い回答ほどページの上位に表示されます。
-
回答の評価を下げる
下記のような回答は推奨されていません。
- 間違っている回答
- 質問の回答になっていない投稿
- スパムや攻撃的な表現を用いた投稿
評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。
15分調べてもわからないことは、teratailで質問しよう!
- ただいまの回答率 88.35%
- 質問をまとめることで、思考を整理して素早く解決
- テンプレート機能で、簡単に質問をまとめられる
質問への追記・修正、ベストアンサー選択の依頼
swordone
2016/05/06 22:51
何を使ってプログラミングしていますか?