- 締切済み
教えてください。。。
コマンドライン引数を2個 入力したときに加算されるプログラムを作成中なのですが、桁が大きい場合と文字を入力した場合が同じエラー処理になります。 別々に分けるエラー処理を教えて頂きたいと思います。 あと、引数一つの時もエラーになる処理をご教授お願いします。 public class Sample20 { public static void main(String[] argv) { if(argv.length>=2) { int a,b; try { if(argv[0].indexOf(".") == -1 && argv[1].indexOf(".") == -1) { try { a=Integer.parseInt(argv[0].replaceAll("\\+" , "")); b=Integer.parseInt(argv[1].replaceAll("\\+" , "")); System.out.println(a+b); } catch(NumberFormatException e) { System.out.println("整数の桁がおおき過ぎます"); } } else { System.out.println("小数点は整数ではないので実行できません"); } } catch(Exception e) { System.out.println ("エラー:2個整数のみ入力して下さい"); } } else { System.out.println("エラー:整数ではありません。"); } } }
- みんなの回答 (4)
- 専門家の回答
みんなの回答
- kousai
- ベストアンサー率100% (2/2)
>if(argv[0].length() >= 10 && argv[1].length() >= 10) &&(かつ)だと、『両方とも』10桁以上の場合にのみtrueになるので、||(または)を使います。 intの範囲は-2147483648から2147483647までで、その範囲外だとparseInt時に例外(NumberFormatException)が発生します。 こんなかんじでどうでしょう。 public static void main(String[] argv) { int a = 0, b = 0; if (argv.length != 2) { System.out.println("2個の整数のみ入力して下さい"); } else if (argv[0].contains(".") || argv[1].contains(".")) { System.out.println("小数は整数ではないので実行できません"); } else if (argv[0].length() >= 9 || argv[1].length() >= 9) { System.out.println("整数の桁が大き過ぎます"); } else { try { a = Integer.parseInt(argv[0].replaceAll("\\+", "")); b = Integer.parseInt(argv[1].replaceAll("\\+", "")); System.out.println(a + b); } catch (NumberFormatException e) { System.out.println("エラー:整数ではありません。"); } } }
- lailai2580
- ベストアンサー率64% (16/25)
>if(argv[0].length >=10 , argv[1].length>=10) if(argv[0].length() >= 10 && argv[1].length() >= 10) ではないでしょうか。 # ご質問とは直接関係ありませんが、質問タイトルをもう少し工夫されるとよろしいのではないでしょうか。 # ここは質問するための掲示板なので「教えて欲しい」ということは誰もが分かっていることです。 # なので、どういったことを質問したいのかを簡潔にまとめた文をタイトルにすべきかと思います。
- ProKaseifu
- ベストアンサー率51% (98/192)
if(argv.length>=2) { ↑の部分のあとにargv[0]の長さが10以上 かつ argv[1]の長さが10以上の場合エラー処理を行う。 という処理をいれてあげればできると思います。
補足
返答有難うございます。 >↑の部分のあとにargv[0]の長さが10以上 かつ argv[1]の長さが10以上の場合エラー処理を行う。 if(argv[0].length >=10 , argv[1].length>=10) 早速試してみましたが出来なかったです。 すみませんが、もう少し教えて頂いてもいいですか?
- ProKaseifu
- ベストアンサー率51% (98/192)
>コマンドライン引数を2個 入力したときに加算されるプログラムを作成中なのですが、桁が大きい場合と文字を入力した場合が同じエラー処理になります。 >別々に分けるエラー処理を教えて頂きたいと思います。 「桁が大きい場合」の判断基準がわからないので回答できません。 >あと、引数一つの時もエラーになる処理をご教授お願いします。 プログラムのはじめのところで if(argv.length == 1) の場合エラー処理を行い、プログラムを終了させたらいかがでしょうか?
お礼
ありがとうございます。 引数一つでもエラー表示が出るようになりました。 すみませんが、もう一つご教授お願いできますでしょうか? 今のプログラムだと引数に入れる値が何桁までが有効で何桁までがエラーかわからない状態です。 試してはいるのですが、ある程度の桁を入れますと[-]の値になったりします。 これを限定して10桁までと決めてそれ以上だとエラーといった形で処理したのですが、どうすればいいのでしょうか?
補足
早速のご回答有難うございます。 >「桁が大きい場合」の判断基準がわからないので回答できません。 説明不足ですみませんでした。 コマンドライン引数に1個辺り10桁以上を2個入力した際にエラーを出したいのですが、どうしても分からないです。 教えて頂いても宜しいでしょうか?
お礼
ご回答・指摘有難うございます。 次から、タイトルをつける時はもっと文章に気をつけてつけたいと思います。 >if(argv[0].length() >= 10 && argv[1].length() >= 10) ではないでしょうか。 早速試したのですが、何回しても引数入力時し実行するとエラーになってしまいます。 どのように改善したらいいのかが分からない次第なのですが、方法はありますでしょうか?