プログラミングをはじめたばかりのものです。
「何回か数字を入力してその合計が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~~~の場所が間違っているのだろうと
思うのですが、どのようにすればよろしいのでしょうか?
No.1
- 回答日時:
そりゃ~エラーが出るでしょう。
また、エラーの原因はエラーメッセージの通りです。
変数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点を中心にもう少し考えてみます。
精一杯考えてみました。
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);
}
}
}
No.2ベストアンサー
- 回答日時:
タイプミスがいくつかあります。
クラス名 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 は使ってません。
for (; i <= 100 ; i = i + Integer.parseInt(reader.readLine())) {
System.out.println("まだ100じゃない");
}
というような書き方ができるんですね。
初めて知りました。
解答ありがとうございました。
おかげさまでできました。
また、NumberFormatException あたりはよく
分からないまま本を写していた状況だったのですが、
教えていただいたことで少し理解できました。
ありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Java java 入力 3 4 3 出力 ABC DEFG HIJ このようなプログラムの書き方を教えてくだ 2 2022/07/15 14:18
- Java Java プログラム public class Main { public static void 3 2023/08/10 23:46
- Ruby 【JAVA】数字をひし形に出力するプログラムについて 2 2022/07/11 23:32
- Java javaでのプログラム(配列)について質問です. 2 2022/10/14 22:27
- Java Java 配列<選挙> 4 2023/07/31 15:07
- Java 直し方について教えて頂きたいです。 4 2022/08/13 02:11
- C言語・C++・C# C# DatagridviewにExcelシートを反映するとエラーが出る 2 2023/05/06 17:12
- C言語・C++・C# 大量のデータを読み込んで表示する速度を改善したい 8 2023/05/07 13:29
- Java java final 1 2022/06/10 22:49
- C言語・C++・C# C言語 3 2022/10/04 15:07
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ループ処理の際、最後だけ","を...
-
続・ZZZ,ZZZ,ZZ9形式の金額形式...
-
java キーボード入力された値の...
-
Java、2の0乗~10乗の表示
-
数値⇒漢数字変換 java
-
countに実行した回数をいれたい...
-
学校で課題を出されて困ってい...
-
コマンドライン引数の例外処理...
-
論理演算子”||”またはの入力方法
-
Java 配列<選挙>
-
JAVAのfor文で困っています。
-
Java 入力した整数値の合計を、...
-
テキストボックスに入力された...
-
繰り返しによる星印の出力
-
階乗
-
リトルエンディアン→ビッグエン...
-
配列を逆順させて表示させる方...
-
キーボードから10人分の点数を...
-
3つの値の中間値を求める
-
配列から最大値・最小値
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ループ処理の際、最後だけ","を...
-
続・ZZZ,ZZZ,ZZ9形式の金額形式...
-
Randomメソッドの確率設定
-
論理演算子”||”またはの入力方法
-
テキストボックスに入力された...
-
java キーボード入力された値の...
-
countに実行した回数をいれたい...
-
Java 配列<選挙>
-
総称型ArrayList<E>への参照...
-
Java、2の0乗~10乗の表示
-
2つのスクロールバーを連動させ...
-
数値⇒漢数字変換 java
-
Java 入力した整数値の合計を、...
-
配列を逆順させて表示させる方...
-
エラー(互換性の無い型)
-
javaで数独を解くプログラムに...
-
2次元配列の並び替え
-
javaのエラーが回収できない
-
7つ数字を表示したら改行すると...
-
java 電卓のプログラム
おすすめ情報