-PR-
解決済み

Javaのforとwhileの使い方

  • 困ってます
  • 質問No.92127
  • 閲覧数90
  • ありがとう数6
  • 気になる数0
  • 回答数2
  • コメント数0

お礼率 69% (145/210)

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

「何回か数字を入力してその合計が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~~~の場所が間違っているのだろうと
思うのですが、どのようにすればよろしいのでしょうか?
通報する
  • 回答数2
  • 気になる
    質問をブックマークします。
    マイページでまとめて確認できます。

質問者が選んだベストアンサー

  • 回答No.2
レベル14

ベストアンサー率 50% (1122/2211)

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

クラス名 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 は使ってません。
お礼コメント
fuyu

お礼率 69% (145/210)

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

また、NumberFormatException あたりはよく
分からないまま本を写していた状況だったのですが、
教えていただいたことで少し理解できました。
ありがとうございました。
投稿日時 - 2001-06-19 22:03:22
-PR-
-PR-

その他の回答 (全1件)

  • 回答No.1
レベル12

ベストアンサー率 41% (324/772)

そりゃ~エラーが出るでしょう。
また、エラーの原因はエラーメッセージの通りです。

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

まず、この2点を治しましょう。
補足コメント
fuyu

お礼率 69% (145/210)

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

教えていただいた2点を中心にもう少し考えてみます。
投稿日時 - 2001-06-19 00:37:20
お礼コメント
fuyu

お礼率 69% (145/210)

精一杯考えてみました。

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:12


このQ&Aで解決しましたか?
AIエージェント「あい」

こんにちは。AIエージェントの「あい」です。
あなたの悩みに、OKWAVE 3,500万件のQ&Aを分析して最適な回答をご提案します。

関連するQ&A
-PR-
-PR-
こんな書き方もあるよ!この情報は知ってる?あなたの知識を教えて!
このQ&Aにはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。

その他の関連するQ&A、テーマをキーワードで探す

キーワードでQ&A、テーマを検索する
-PR-
-PR-
-PR-

特集


専門家があなたの悩みに回答!

-PR-

ピックアップ

-PR-
ページ先頭へ