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

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

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

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

Q&A

解決済

7回答

6653閲覧

Java コマンドライン引数で平均を求める

退会済みユーザー

退会済みユーザー

総合スコア0

Java

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

0グッド

0クリップ

投稿2016/05/06 04:45

編集2016/05/06 05:35

以下の問いのプログラムを現在作成しています。
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のままです。
問題はキーボードで入力させてそれを引数として渡すのでしょうか。

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

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

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

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

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

swordone

2016/05/06 13:51

何を使ってプログラミングしていますか?
guest

回答7

0

ベストアンサー

割り算は分母が0になってしまうと計算できないので、そのチェックは必要になるかと。
そもそも実行しても結果が出ないんだから、引数がない旨メッセージ出力で終了しちゃってもいいんじゃないかと。

コマンドライン引数 について
main()メソッドの引数String[] argsに入ってくるのは、javaコマンドを実行した際の引数(コマンドライン引数)です。

java 実行するクラス名 引数1 引数2 ・・・ 引数n

引数1から引数nまでが配列として扱われ、main()メソッドの引数argsに渡されて実行されます。
2つ目以降を指定したい場合はスペースで区切ります。
なので、引数1 は args[0] に当たります。その後は・・・わかりますよね?(笑

eclipseで作成・実行してしまうと分かりにくいのですが、
実行->実行構成 で実行したいクラスを選択すると「(x)=引数」というタブがあると思います。
そのタブの「プログラムの引数」がコマンドライン引数になります。
指定するときはここに入力し、実行してください。
複数渡すときはスペースで区切りますよ。

ちなみに、main()メソッドの最初にやってるSystem.inを使った処理は、java実行後にコマンドライン入力を受け付ける処理です。
今回のやりたいことを考えると、不要かと。使うならclose()処理も必要。。。かな。

投稿2016/05/06 05:40

編集2016/05/06 05:44
kaputaros

総合スコア1844

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

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

0

皆さんが仰る通り、プログラム実行に引数を入力しないと意図通りの動作にならないです。つまり、コマンドラインの使い方(プログラムの実行のさせ方)に問題があります。

例えば、以下のようにコマンドを入力すればいいです。
「java クラス名 引数1 引数2・・・」

なお、これも皆さんの仰る通りですが、引数がない場合の注意文とか数字でない場合とかUSAGE ERRORを表示すると親切ですね。

投稿2016/05/06 16:20

HogeAnimalLover

総合スコア4830

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

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

0

1.main()の入り口で、“コマンドライン引数”があるかどうか確認(args.lengthが1以上)
こんな感じ・・・

java

1 if (args.length < 1) { 2 System.err.println("引数がありません"); 3 System.exit(1); 4 } 5

2.以下はそのまま使えます

java

1 int n = args.length; 2 3 int sum = 0; 4 5 for (int i = 0; i < n; i++) { 6 sum += Integer.parseInt(args[i]); 7 } 8 9 int ave = (sum / n); 10 11 System.out.println(ave); 12

コマンドで起動する場合は、java test 31 32 33・・・など

投稿2016/05/06 06:35

cateye

総合スコア6851

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

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

0

コマンドライン上で

java test42

みたいに打って実行すると思いますが、
「コマンドライン引数で渡す」とは

java test42 21 42 10

のように実行時にパラメータを渡す、というものです。

投稿2016/05/06 05:21

ozwk

総合スコア13512

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

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

0

nが0と言うのは、args.lengthが0、もっと言うとコマンドライン引数に何も入っていない状態ということになります。その場合はそもそも平均を計算出来ない旨を表示するのが妥当では?
あと、これは不要なのでは?

BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

投稿2016/05/06 05:18

swordone

総合スコア20649

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

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

0

おそらくnが0になって計算が出来ないからだと思います。どのようにこの後を組み立てればよいか教えていただけるとありがたいです。

推測の通りだと思います。
nが0の場合、どのように処理したいのでしょうか?

nが0の場合とnが0以外の場合で処理を分けるように実装したい場合、分岐文(if文)を用いて処理を分けるのが良いかと思います。

具体的な例はあえて記載しません。
どのようなロジックを組むべきか、フローチャート等を書くと手順が整理できてよいかと思います。
※if文の使い方であればGoogleで調べるなりすればたくさん出てくると思いますので。

投稿2016/05/06 05:04

takyafumin

総合スコア2335

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

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

0

コマンドライン引数の使い方の例を示します。参考になれば幸いです。
Samole01.java

java

1public class Sample01 { 2 3 public static void main(String[] args) { 4 if (args.length == 0) { 5 System.out.println("データを入力してください。"); 6 return; 7 } 8 for (String s : args) { 9 System.out.println(s); 10 } 11 } 12}

実行例:

$ java Sample01 データを入力してください。 $ java Sample01 1 2 3 1 2 3

投稿2016/05/06 13:49

katoy

総合スコア22324

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問