質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

コマンドライン

コマンドライン(別名:Command Line Interface)は、ユーザに命令の入力を促す(プロンプト)文字列の表示を行い、すべての操作をキーボードを用いて文字列を打ち込む事でプログラムを走らせるユーザインターフェースです。

例外処理

例外処理(Exception handling)とは、プログラム実行中に異常が発生した場合、通常フローから外れ、例外として別の処理を行うようにデザインされたプログラミング言語構造です。

Q&A

解決済

2回答

1006閲覧

Java try-catch文の使い方について

momo1122

総合スコア17

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

コマンドライン

コマンドライン(別名:Command Line Interface)は、ユーザに命令の入力を促す(プロンプト)文字列の表示を行い、すべての操作をキーボードを用いて文字列を打ち込む事でプログラムを走らせるユーザインターフェースです。

例外処理

例外処理(Exception handling)とは、プログラム実行中に異常が発生した場合、通常フローから外れ、例外として別の処理を行うようにデザインされたプログラミング言語構造です。

0グッド

0クリップ

投稿2020/08/27 09:12

前提・実現したいこと

try-catch文を使ってコマンドライン引数に入力された値が整数かそうでないかを判断して整数でなかった場合にエラーメッセージを表示したいです。

ここに質問の内容を詳しく書いてください。

現在、コマンドライン引数を使って、入力された値が整数かそれ以外かを判断する処理の作成を試みています。しかし、どうしてもtry-catch文がうまくつかえません。

発生している問題・エラーメッセージ

コマンドライン引数に「あいうえお」と入力した場合は一つ以上の整数を入力してくださいと表示されるのですが、そもそもコードに「デッドコード」という表示がでてしまっています。
また、−5と入力した場合にはどう認識されているのかエラーメッセージ+通常の実行と同じメッセージが同時にでてきます。

該当のソースコードイメージ説明

試したこと

isNumberメソッドがboolean型なのでif文でfalseだった場合は、エラーメッセージを表示するということを試しました。
しかしif文自体にデッドコードですという表示がでてしまいます。

補足情報(FW/ツールのバージョンなど)

メソッドの勉強が足りておらず、理解不足に至っているのは重々承知なのですがヒントだけでもいただけないでしょうか?
初心者なのでお手柔らかにお願い致します。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

また、−5と入力した場合にはどう認識されているのかエラーメッセージ+通常の実行と同じメッセージが同時にでてきます。

「一以上の整数値~」の部分は条件判定が行われていませんので、何を入力しようとも真っ先に表示されます。

投稿2020/08/27 09:16

maisumakun

総合スコア146018

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

maisumakun

2020/08/27 09:17

if(false)の中身は絶対に実行されませんので、「デッドコード」で間違いありません。
maisumakun

2020/08/27 09:18

「どうしてもtry-catch文がうまくつかえません。」とありますが、try-catchの必要なisNumber()メソッドには特に問題がないかと思います。
momo1122

2020/08/27 09:19

ご回答ありがとうございます。 失礼いたしました、先ほどコードをいじってしまって変わっていたのですが 本来は if(false) { System.out.println("一以上の整数値を入力してください" + isNumber(args[0])); } としていました。 条件判定なのですが、これはboolean型で判断するのではないのでしょうか? よろしくお願い致します。
maisumakun

2020/08/27 09:21

> 条件判定なのですが、これはboolean型で判断するのではないのでしょうか? いえ、外側のif(false)の条件が成立しないので、中身のコードは絶対に実行されないデッドコードです。
momo1122

2020/08/27 09:26

ご回答ありがとうございます。 この条件判定の部分がわからず、ヒントをいただけないでしょうか? よろしくお願い致します。
maisumakun

2020/08/27 09:54

if(isNumber(略))と書けばいいだけではないでしょうか?
momo1122

2020/08/27 10:11

ご回答ありがとうございます。 if(isNumber(args[0])) { System.out.println("1以上の数を入力してください"); }else { System.out.println("引数を一つ入力してください"); } として、文字列を入力したのですがエラーメッセージが表示されませんでした。 この場合、文字列として認識されていないということなのでしょうか? 何度も申し訳ありません。よろしくお願い致します。
maisumakun

2020/08/27 10:39

> エラーメッセージが表示されませんでした。 「1以上の数を入力してください」も「引数を一つ入力してください」も表示されなかった、ということでしょうか?(それ以外になにか出力されましたか?)
momo1122

2020/08/27 10:58

ご回答ありがとうございます! 引数を一つ入力してくださいと表示されました!しかし、文字列が入力された際には「1以上の数を入力してください」と表示をしてほしいとおもっています。
maisumakun

2020/08/27 11:06

> しかし、文字列が入力された際には「1以上の数を入力してください」と表示をしてほしいとおもっています。 この場合はisNumber()はfalseになりますので、elseの側で「1以上の数を入力してください」を実行してください。
momo1122

2020/08/27 11:17

ありがとうございます!うまく表示することができました! ありがとうございました????‍♀️!
guest

0

引数の個数は args.length に入っているので、
if文でそれをチェックしてください。

数値が入力されなかった場合と、1より小さい数値が入力された場合とで
「1以上の数を入力してください」という一つのメッセージを表示したいのであれば、
if文の式はちょっと複雑になります。

Java

1class Test { 2 public static void main(String[] args) { 3 if (args.length != 1) { 4 System.out.println("引数を一つ入力してください"); 5 return; 6 } 7 int n1; 8 if (!isNumber(args[0]) || (n1 = Integer.parseInt(args[0])) < 1) { 9 System.out.println("1以上の整数値を入力してください"); 10 return; 11 } 12 System.out.println("ランダム数値を" + n1 + "個生成します"); 13 } 14 15 public static boolean isNumber(String num) { 16 try { 17 Integer.parseInt(num); 18 return true; 19 } catch(NumberFormatException e) { 20 return false; 21 } 22 } 23}

もちろん、絶対にこのように書かなければならないというわけではありません。
if文をもっと単純にする書き方もあります。興味ありますか?

追記
if文は単純になりますが、同じメッセージの表示が必要になります。

Java

1class Test { 2 public static void main(String[] args) { 3 if (args.length != 1) { 4 System.out.println("引数を一つ入力してください"); 5 return; 6 } 7 if (!isNumber(args[0])) { 8 System.out.println("1以上の整数値を入力してください"); 9 return; 10 } 11 int n1 = Integer.parseInt(args[0]); 12 if (n1 < 1) { 13 System.out.println("1以上の整数値を入力してください"); 14 return; 15 } 16 System.out.println("ランダム数値を" + n1 + "個生成します"); 17 } 18 19 public static boolean isNumber(String num) { 20 try { 21 Integer.parseInt(num); 22 return true; 23 } 24 catch(NumberFormatException e) { 25 return false; 26 } 27 } 28}

投稿2020/08/27 10:48

編集2020/08/27 12:31
kazuma-s

総合スコア8224

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

momo1122

2020/08/27 10:59

ご回答ありがとうございます。 なるほど!こういった条件式を書く方法があるのですね、ありがとうございます。 単純に書く方法なのですが、興味があるのでご教示頂いてもよろしいでしょうか? よろしくお願い致します。
momo1122

2020/08/28 01:12

追記いただきありがとうございます。自分では導き出せなかった答えなので、すごく参考になります。どういったしくみになっているのか自分なりに理解しながら書いてみます。 本当にありがとうございました。
momo1122

2020/08/28 01:29

お忙しいところ、大変申し訳ないのですがif文の中にあるreturnとはなにを何を意味するのでしょうか?調べたのですが、理解できるサイトが見つかりませんでした。 もし、まだみてくださっていたらどうかよろしくお願い致します。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問