牛、豚、鶏、どれか一つ食べられなくなるとしたら?

(1) 「1以上の整数を入力:」と表示
(2) 1行読み込みをし、入力された値が文字列「exit」と等しいかどうかをチェックし、「exit」と等しい場合はプ ログラムを終了する。
(3) 入力された値が1以上の場合、階乗の計算

という問題で、どうしても「exit」で終わることができません。
できても、NumberFormatException になって終わりってしまいます。
こんな説明で理解してもらえるか分かりませんが、教えていただけませんか。

A 回答 (5件)

そのものズバリ。

宿題じゃなければ良いけど(笑

import java.io.* ;

class Test {
public static void main(String[] args) {
try {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in)) ;
while(true) {
System.out.print("1以上の整数を入力:") ;
System.out.flush() ;
String s = br.readLine() ;
try {
int i = Integer.parseInt(s) ;
if(i>0) {
int answer = 1 ;
for(int j=1 ; j<=i ; j++) {
answer*=j ;
}
System.out.println(i+"の階乗は"+answer) ;
continue ;
}
else {
System.out.println("不正な入力値です") ;
}

}
catch(NumberFormatException ne) {
if("exit".equals(s)) {
System.exit(0) ;
}
else {
System.out.println("不正な入力値です") ;
}
}
}
}
catch(IOException ie) {
ie.printStackTrace() ;
System.exit(0) ;
}

}
}
    • good
    • 0
この回答へのお礼

そのものずばりなんてすごくありがたいです。
何日もエラーとの格闘だったもので。半ば諦めていました。とても勉強になります。
長文を書いていただいてすみません。ありがとうございました。

お礼日時:2002/09/02 18:37

皆さんの意見をまとめるとこんな感じですか?



//sample
public class CheckNumber{
static public void main(String[] arg){
int i = 0;
//引数のチェック
if(arg.length==0){
System.out.println("エラー: 引数を入力してください");
return;
}
//exitのチェック
if("exit".equals(arg[0]))return;
try{
i=Integer.parseInt(arg[0]);
}catch(NumberFormatException nfe){
System.out.println("エラー: 数値を入力してください");
return;
}
//数値のチェック
if(i<1){
System.out.println("エラー: 1以上の数値を入力してください");
return;
}
}
// ここに階乗計算処理
}


exitの評価は
arg[0].equals("exit")
とはしないほうがよいと思います。
この場合は問題ないとは思いますが、変数にnullが入る場合もあるので、普段から定数を頭に持ってくるほうがいいと思います。
    • good
    • 0
この回答へのお礼

わざわざまとめてくださってありがとうございます。
組み立て方がよく分かりました。
arg[0].equals("exit")とはしないようにします。

お礼日時:2002/09/02 18:25

逆にInteger.parseInt()の前にequals("exit")の判断をしてしまうという手もありますね。

    • good
    • 0
この回答へのお礼

おお、equals()なんてありましたね。
私って全然覚えてなくて駄目ですね。
いったい文字はどのようにして比較するんだぁ・・なんて考えていました。
ありがとうございました。

お礼日時:2002/09/02 18:22

>書き忘れてましたが、NumberFormatException になったら、「エラー 値は1以上の数字ではありません」と表示するようにしなければならないんですよ…。



それならcatchしたあとでifで条件分岐してやれば
できると思いますがいかがでしょう。

ちなみにAPIを見るのはプログラムを組むときの
基本ですのでお忘れなく。
(すでにあるものを自分で実装してしまうというのもよくある話です)

参考URL:http://java.sun.com/j2se/1.4/ja/docs/ja/index.html
    • good
    • 0
この回答へのお礼

なるほど、catchした後にifとは気が付きませんでした。
ずっと、数値変換する前にif・・とかで考えていたものですから。
二度にわたるご回答ありがとうございました。

お礼日時:2002/09/02 18:20

Integer.parseInt()を使ってますよね。



その場合、数字に変換できない場合NumberFormatException を
投げる仕様になっています。

Integer.parseInt()のあたりをtryでくくり
NumberFormatException をcatchして
終了処理を記述してください。
(java.lang.String)↓

参考URL:http://java.sun.com/j2se/1.4/ja/docs/ja/api/java …
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
Integer.parseInt()を使ってます。なるほど、そこをtryをくくるんですね。
でも書き忘れてましたが、NumberFormatException になったら、「エラー 値は1以上の数字ではありません」と表示するようにしなければならないんですよ…。すみません。
教えていただいたHP、参考にさせていただきます。

お礼日時:2002/09/01 21:10

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


おすすめ情報