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

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

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

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

Q&A

解決済

2回答

627閲覧

引数ゼロの時の例外処理について

Takuma71

総合スコア6

Java

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

0グッド

0クリップ

投稿2020/04/27 11:04

import java.util.regex.Pattern;
import java.util.regex.Matcher;

public class OutputWeek{

//dayの中身を宣言します。 static final String[] DAY = {"月曜日","火曜日","水曜日","木曜日","金曜日","土曜日", "日曜日"}; private static final int MAX_COUNT = 8; private static final int END_COUNT = 1; private static final int ZERO = 0; /** * メインメソッド * @param args javaコマンド実行時に渡されるパラメータ */ public static void main(String[] args){ //引数ゼロの場合 //数値かどうかの判断を行い数値でない場合処理を終了します。 //1から7の数値でない場合処理を終了します。 if (!(isNumber(args[ZERO]))) { System.out.println("数値ではありません。"); return; } //argsの文字列をint型に変更します。 int num = Integer.parseInt(args[ZERO]); if (END_COUNT > num || MAX_COUNT < num) { System.out.println("数値が不正なため、1から7を入力してください"); return; } System.out.println(DAY[num - END_COUNT]); } // trueの数値を出力します。 private static boolean isNumber(String value){ System.out.println(value); //0-9の数字と曜日が一致するかの正規表現を行います。 String regex = "^[0-9]$"; Pattern pattern = Pattern.compile(regex); Matcher matcher = pattern.matcher(value); //入力した数値とマッチした変数を返します。 return matcher.find(); }

}

■ 質問内容
コンパイルできるようには、なっていますが引数ゼロの際落ちてしまします。
引数ゼロがlength == 0だと言うことは理解できております。
実装仕方がわからないのでご教授いただきたいです。
あと、0の定数名何かいいものがあればそちらもお願い致します。

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

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

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

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

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

退会済みユーザー

退会済みユーザー

2020/04/27 11:06

引数0のとき落ちる、と判断した理由は何でしょう? エラーが出ているならそれを書いてください。
kaina

2020/04/27 11:14

引数ゼロがlength == 0だということが理解出来ていて、何が分からないの? if文の書き方? それともlengthの使い方? argsは文字列配列だから引数の数はargs.lengthで求まることが分からない???
Takuma71

2020/04/27 11:16

Exception in thread "main" java.lang.ArrayIndexOutofBoundsException: Index 0 out of bounds for length 0 at OutputWeek.main(OutputWeek.java:29)と出ております。 実行時は java OutputWeek 1 = 月曜日 java OutputWeek = 上記に記載したエラーです。 迅速ご返事ありがとうございます。
Takuma71

2020/04/27 11:18

すみません理解は出来ているのですが lengthの使ったif文の書き方が分からないです。
guest

回答2

0

args.length == 0
でいいのでは

投稿2020/04/27 11:16

y_waiwai

総合スコア87774

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

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

Takuma71

2020/04/27 11:21

ご返事ありがとうございます。 その内容をif文で書き、system.out.println("数値を入力してください)とし、returnで処理を終了したいのですがどのように記載すれば良いでしょうか?
退会済みユーザー

退会済みユーザー

2020/04/27 11:31

他のif文と同じように書くだけです。 むしろそこまで分かってるなら、それをそのまま書いてください。
guest

0

ベストアンサー

ちょび修正、定数名も追加してみた。

java

1 private static final int NO_ARGUMENTS = 0; 2 3 if(args.length == NO_ARGUMENTS){ 4 System.out.println("パラメータが指定されていません。"); 5 return; 6 }

投稿2020/04/27 11:21

編集2020/04/27 11:33
kaina

総合スコア418

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

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

Takuma71

2020/04/27 12:16

ご回答ありがとうございます! 問題なく記載された文は出力できたのですが、1〜7のチェックのsystem. outが動かなくなりました、、
Takuma71

2020/04/27 12:42

すみません、うごきました!僕の記載ミスでした。
kaina

2020/04/28 00:26

解決して良かったですね。 尚、次回からコードは以下のように「```」で囲った範囲に書くようにして下さい。 そうすることでインデントがある状態で表示され、視認性が上がり、 回答が集まりやすくなります。 ``` コード ```
momon-ga

2020/04/28 09:15

個人的な意見ですが、0に対して定数名をつけるのって悪手だと思います。 args[ZERO] っていうアクセス方法はargs[0]と、見た目にも差がないと思いますし、 args[NO_ARGUMENTS]は、あり得ないでしょう。(定数名を修正でなく”追加”にしているのは、このようなアクセスはおかしい自覚してるからだと推測します) 配列の要素数がゼロでないことを確認するのは、args.length==0で十分かと思います。 名前が欲しいならメソッド作成するかorg.apache.commons.lang3.ArrayUtils#isEmpty使うかなぁ
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問