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

「何回か数字を入力してその合計が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~~~の場所が間違っているのだろうと
思うのですが、どのようにすればよろしいのでしょうか?

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

A 回答 (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 は使ってません。
    • good
    • 0
この回答へのお礼

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

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

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

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


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

変数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

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

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

QInteger.parseInt()について public static void main(String[] args) { int a =

初歩的な質問だと思うのですが、、、

public class TestTree {

public static void main(String[] args) {

int a = Integer.parseInt(args[0]);
int b = Integer.parseInt(args[1]);

GreatTree myTree = new GreatTree(a, b);
myTree.makeTree();
myTree.makeGround();
}

}

というプログラムについて、Integer.parseInt()はどういう意味を持つのかがわかりません。ただ適当につけた名前だとは思えないです。教えてもらえたら幸いです。お願いします。

Aベストアンサー

> argsで入力されたものは例え数字でも文字列として扱われているから、それをintにしている。ということですよね?

引数として (String[] args) と設定されていますので、
おっしゃるとおり 引数 args[]配列に入っているものは、文字列です。

ポイントは、 「String[]」でしょうか。。

QString a = "a"; と String b = new String ("b"); の違い

String a = "a";
String b = new String ("b");

お伺いしたいのですが、
b は String のインスタンスを作ってると思いますが、
a はどんなことをしてるのでしょうか?

Aベストアンサー

お二人の回答を具体的に言うと、こういうことです。
String a1 = "a";
String a2 = "a";
String b1 = new String ("b");
String b2 = new String ("b");

a1のために、aという文字列のインスタンスが作られますが、
a2に代入されるのは、a1に使われたインスタンスが再利用されます。
これは、
if(a1 == a2) System.out.print("a1と同じインスタンス");
の結果でもわかります。

一方、b1とb2は、bという文字列オブジェクトを引数に、新しいインスタンスを生成する指示がありますので、b1とb2と、その初期化に使った無名のStringインスタンスの3つがメモリ上に存在することになります。
if(b1 != b2) System.out.print("b1とは違うインスタンス");
の結果でもわかると思います。

したがって、
String b = new String ("b"); というのは、Integerに例えると
Integer i = new Integer(new Integer(1)); という処理を
していることになり、ひとつ無駄なインスタンス生成となります。

お二人の回答を具体的に言うと、こういうことです。
String a1 = "a";
String a2 = "a";
String b1 = new String ("b");
String b2 = new String ("b");

a1のために、aという文字列のインスタンスが作られますが、
a2に代入されるのは、a1に使われたインスタンスが再利用されます。
これは、
if(a1 == a2) System.out.print("a1と同じインスタンス");
の結果でもわかります。

一方、b1とb2は、bという文字列オブジェクトを引数に、新しいインスタンスを生成する指示がありますので、b1とb2と、その...続きを読む

QSystem.err. printlnとSystem.out.printlnはどう違うんでしょうか?

 初心者なので今までSystem.out.println文しか見たことがなかったのですが、テキストで急にIOExceptionのcatch文の中にSystem.err. println文が出てきました。
 errをoutに書き換えてもエクリプスではチェックされなかったのですが、どういう違いがあるのでしょうか?

Aベストアンサー

出力先が「標準出力」か「標準エラー出力」かの違いです。

Windows環境ですと、
標準出力はコンソール(コマンドプロンプト、もしくはDOS窓のこと)に出力されます。
標準エラー出力も同じくコンソールに出ます。

ただし、リダイレクト機能を使ったときに違いが表れます。
リダイレクトとは、
>program > a.txt
のように、標準出力をするプログラムの出力を、
テキストファイルに書き出すことです。
Javaでも、コンソールへのテキスト出力をするプログラムだったら、
>java nantoka > a.txt
で、a.txtにテキストが書き込まれると思います。
試してみてください。

それで、「標準エラー出力」の方は、
リダイレクトをしてもリダイレクトされず、
コンソールにテキストが書き出されます。
標準エラー出力は、通常、エラーが起こったときの
表示に使うもので、
これまでリダイレクトされてしまうと、
ユーザーがエラーを検知できなくなるからです。

ためしに
System.out.println("ABCD");
System.err.println("いろはに");
System.out.println("EFG");
System.err.println("ほへと");
と出力するtestプログラムを作って、

>java test

>java test > a.txt
として、動作の違いをたしかめてみてください。

(付記:どうしてもエラー出力をリダイレクトしたい場合、
>のかわりに2>を使うことによって可能です。
Linux系ではシェルによって違いがあります)

出力先が「標準出力」か「標準エラー出力」かの違いです。

Windows環境ですと、
標準出力はコンソール(コマンドプロンプト、もしくはDOS窓のこと)に出力されます。
標準エラー出力も同じくコンソールに出ます。

ただし、リダイレクト機能を使ったときに違いが表れます。
リダイレクトとは、
>program > a.txt
のように、標準出力をするプログラムの出力を、
テキストファイルに書き出すことです。
Javaでも、コンソールへのテキスト出力をするプログラムだったら、
>java nantoka > a.txt
で、a.tx...続きを読む

QA a = new A(){}; の構文の意味が分からない。

下記サイトのコードを読んでいて、

ResponseListener listener = new ResponseListener() {
//略
};

という書き方があったのですが、どういう意味になるのでしょうか?
インスタンスの作り方は単に

A a = new A();

だと思うのですが…。

http://www.snmp4j.org/doc/org/snmp4j/Snmp.html

Aベストアンサー

無名クラスと呼ばれるものよ。
私も良くやるわ。

ちなみに
A a = new A();
はできないわよ。
Aはインターフェースだからね。


上記の場合、正式に実装するなら、
ResponseListenerをimplementsした
MyResponseListener(仮名)を別途作成し、
それを
ResponseListener listener = new MyResponseListener();
とする必要があるわ。
でも、このMyResponseListenerは
今ここでしか使わない、他からまったく参照する必要のない
超ローカルなクラスなのよ。
このメソッドが終了すればGCにかけてもいいわけ。
そんな場合、わざわざクラスを1つ作る必要なくて
その場でちょちょいとやってしまうことができるのよ。
それが無名クラスっていう実装方法よ。

http://www.javaroad.jp/java_class15.htm

FileFilterやCompare、Runnableなんかで
他のクラスで再利用しないときは良くやるわ。

無名クラスと呼ばれるものよ。
私も良くやるわ。

ちなみに
A a = new A();
はできないわよ。
Aはインターフェースだからね。


上記の場合、正式に実装するなら、
ResponseListenerをimplementsした
MyResponseListener(仮名)を別途作成し、
それを
ResponseListener listener = new MyResponseListener();
とする必要があるわ。
でも、このMyResponseListenerは
今ここでしか使わない、他からまったく参照する必要のない
超ローカルなクラスなのよ。
このメソッドが終了すればGCにかけても...続きを読む

QJavaScriptで【window.google={kHL:"ja"};】という記述はどういう意味?

JavaScriptで【window.google={kHL:"ja"};】という記述はどういう意味?


YOUTUBE日本語版
http://jp.youtube.com/
のHTMLソースを見ていたら、



<script type="text/javascript">
    window.google={kHL:"ja"};
</script>


という記述を目にしたのですがこれはどういう意味あいというか目的のものなのでしょうか?


教えていただければ幸いです。

Aベストアンサー

これは、window.googleに'kHL'というキー(値は'ja')を持つ連想配列を
作成しています。

JavaScriptでの連想配列は

var 変数名 = {
キー : '値',
キー : '値',
:,
キー : '値'
};

というような感じで作成します。
キーはダブルクォートまたはシングルクォートで囲まなくても
いいようです。

参考URL:http://javascriptist.net/docs/basic_hash.html,http://www.openspc2.org/JavaScript/kouza2007/array/hash/index.html


人気Q&Aランキング

おすすめ情報