忙しい現代人の腰&肩のお悩み対策!

わからないので教えてください。

キーボード入力を負の整数になるまで繰り返し、負の整数を入力したら
負の整数を含めずにその平均値を出しなさい。

という問題なのですが、

僕は繰り返しなので、
do{
System.out.println("整数を入力してください。負の数が入力されたら終了します。");
line = br.readLine();
i= Integer.parseInt(line);
}while(i>0);

と考えたのですが、これ以上先に進めなくて困っています。

まずこのiに入力されたものを合計しなくてはいけないので、配列を使わないとならないとわかったのですが、配列の使い方がいまいちわかりません。
int []m=new int[i];
と入力し(その前にiを初期化)
m[i]= Integer.parseInt(line);
としたのですが、うまくいきませんでした。この場合どのように配列を考えればよいのでしょうか。

あと、「最後の入力した負の整数を含まず」ということは、どう書けばよいのでしょうか。


ヒントでもいいので教えてください。よろしくお願いします。

このQ&Aに関連する最新のQ&A

A 回答 (2件)

koko_uさんの回答にもありますが、配列は使わなくてもいいと思います。


以下に流れを簡単に書いてみます。

(1)
とりあえず、do~whileの前に、int型の適当な変数を2つ(仮にsum、counterとします)を用意しておきましょう。
sumは入力値の和を格納するため、counterは加えた回数を格納するために使います。
(2)
do~whileの中で
 i= Integer.parseInt(line);
として取得した入力値のint型の値について、負の数かどうか判定します。
(3)
上記(2)で負の数でなければ、sumにiを加え、counterを1だけ増やします。
もし負の数だった場合は、break;として、ループを抜けましょう。
(今回はwhile判定があるので、breakは必須ではありません)
(4)
いつかはループを抜けてここにたどり着くでしょう。
そうしたら、先ほどのsum(合計)をcounter(加えた回数)で割れば、求めたい平均になります。


なお、入力値が数値でないときの保証や、用意した変数の初期化には言及していません。
必要でしたらそれも付け加えておいてください。

あえて日本語の説明で書くようにして、コーディングをお見せしないようにしました。
アルゴリズムに強くなったほうが、gumgumgumさんの今後のプログラミング技術につながると考えましたので。

がんばってください!
    • good
    • 0
この回答へのお礼

わかりやすいご説明ありがとうございます!!!

さっそくやってみます!!

お礼日時:2008/10/13 21:38

>合計しなくてはいけないので、配列を使わないとならないとわかったのですが


合計するだけなら配列は要らない。どんどん足していくだけ。

この回答への補足

i+1 ...ということでしょうか?

補足日時:2008/10/12 00:14
    • good
    • 0

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

QIOException ってどういうときに起こるのでしょうか?

IOException ってどういうときに起こるのでしょうか?

http://www.atmarkit.co.jp/fjava/rensai2/javaent12/javaent12.html
を見て勉強しています。

  catch ( IOException e) {
    System.out.println( "キーボードが故障しているのかもしれません" );
  }

と書いてあります。
ハード(キーボード)が故障しているのを Java のプログラムのレベル(ソフトウェア)で感知できるというのがよくわかりません。「

NumberFormatException の方はわかるのですが・・・

Aベストアンサー

現実的には、キーボードからの入力でIOExceptionが発生することは、
ほとんどあり得ないと思います。
そもそも、キーボードが故障していたとしても、
IOExceptionは投げられないでしょう。
「キーボードが故障しているのかもしれません」というのは、
その記事の著者が冗談で書いたのだと思います。

ではなぜ、try-catchを書かなくてはいけないのか?
InputStreamやBufferedReaderは、
データ入力を抽象化したものだからです。
実際の入力元はキーボードだったり、ファイルだったり、
ネットワーク接続だったりするわけですけど、
InputStreamは、その入力元の情報を持っていないので、
データを読み取る際は常に
IOExceptionをキャッチするコードを書かなくてはいけません。
たとえ、絶対にIOエラーが発生しないストリームだとしても。

さらに付け加えるなら、
そもそも「標準入力=キーボード」であるとは限りません。
(一般的にはキーボードであることが多いですが。)
Javaでは、
System.setIn(InputStream)
を呼び出して、標準入力を変えてしまうことができますし、
標準入力を指定してプログラムを実行することができるOSもあります。

追伸1:
例外をキャッチしたときは、
スタックトレースをプリントすることをおすすめします。
catch (IOException e) {
e.printStackTrace();
}

追伸2:
そのプログラムでIOExceptionを発生させる最も簡単な方法は、
readLine()を呼び出す前に
標準入力(System.in)を閉じてしまうことです。
System.in.close();

現実的には、キーボードからの入力でIOExceptionが発生することは、
ほとんどあり得ないと思います。
そもそも、キーボードが故障していたとしても、
IOExceptionは投げられないでしょう。
「キーボードが故障しているのかもしれません」というのは、
その記事の著者が冗談で書いたのだと思います。

ではなぜ、try-catchを書かなくてはいけないのか?
InputStreamやBufferedReaderは、
データ入力を抽象化したものだからです。
実際の入力元はキーボードだったり、ファイルだったり、
ネットワーク接...続きを読む


人気Q&Aランキング

おすすめ情報