アプリ版:「スタンプのみでお礼する」機能のリリースについて

プログラミングをはじめたばかりのものです。

「何回か数字を入力してその合計が100になったら終了
するプログラム(100になるまで入力待ちを繰り返すプログラム」
というのを作っているのですが、
以下のようにするとエラーが出ました。

public class upto100 {
public static void main(String[] args) {
for (int i=0; i <= 100; i=i+j) {
String line = reader.readLine();
int j = Integer.parseInt(line);
System.out.println("まだ100じゃない");
}
System.out.println("もう100");
}
}

入力待ちにするString line~~と
int j~~~の場所が間違っているのだろうと
思うのですが、どのようにすればよろしいのでしょうか?

A 回答 (2件)

そりゃ~エラーが出るでしょう。


また、エラーの原因はエラーメッセージの通りです。

変数iはfor (int i=0; i <= 100; i=i+j) で宣言
されているので問題はありませんが、変数jはこの
時点では宣言されていません。
従って、変数i,jともにfor()の前で宣言しましょう。
また、for()の前でj=0;と変数jを初期化しましょう。
String lineのfor()の外で、宣言しておけば
良いでしょう。

まず、この2点を治しましょう。

この回答への補足

初心者な上に、コンパイルとかできない環境で
ざっと書いたプログラムだったので、
BufferedReader reader =~~
の行が抜けていたり、穴だらけですね。

教えていただいた2点を中心にもう少し考えてみます。

補足日時:2001/06/19 00:37
    • good
    • 0
この回答へのお礼

精一杯考えてみました。

forの前で2つの変数を宣言してみたのですが、
Buffered Readerから、
System.out.println("もう100");あたりまでの
構造はあっていますでしょうか?

public class upto100 {
public static void main(String[] args) {
Buffered Reader reader = new BufferedReader(new InputStreamReader(System.in), 1);
try {
String line = reader.readLine();
int i = Integer.parseInt(line);
int j = 0
for (i <= 100; i=i+j) {
line = reader.readLine();
int j = Integer.parseInt(line);
System.out.println("まだ100じゃない");
}
System.out.println("もう100");
} catch (IOException e) {
System.out.println(e);
} catch (NumberFormatException e) {
System.out.println(ie);
}
}
}

お礼日時:2001/06/19 01:13

タイプミスがいくつかあります。



クラス名 BufferedReader に余計な空白が入っている。
変数 j の宣言の行の ";" がない。
for() の中に ";" がひとつしかない。
for() ループの中で二重に宣言されている。
NumberFormatException を e で受けているのに ie で使ってる。

で、それをふまえた上で、

> Buffered Readerから、System.out.println("もう100");あたりまでの
> 構造はあっていますでしょうか?

基本的にはあっていると思いますが、最初の入力で 100 を超えない場合に、
100 を超えると、一度「まだ100じゃない」と出力されてから、for ループを
抜けて「もう100」と表示されます。

これは、期待通りの動きではないですよね?

何通りも実装方法はあると思いますが、ひとつのやり方は

  for (j = 0 ; i <= 100 ; i = i + j) {
    line = reader.readLine();
    j = Integer.parseInt(line);
    System.out.println("まだ100じゃない");
  }

の数値を獲得して i に足すことをいっぺんにしてしまう、つまり

  for (; i <= 100 ; i = i + Integer.parseInt(reader.readLine())) {
    System.out.println("まだ100じゃない");
  }

という感じ。変数 j は使ってません。
    • good
    • 0
この回答へのお礼

for (; i <= 100 ; i = i + Integer.parseInt(reader.readLine())) {
    System.out.println("まだ100じゃない");
  }
というような書き方ができるんですね。
初めて知りました。
解答ありがとうございました。
おかげさまでできました。

また、NumberFormatException あたりはよく
分からないまま本を写していた状況だったのですが、
教えていただいたことで少し理解できました。
ありがとうございました。

お礼日時:2001/06/19 22:03

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