- PR -

if文の条件式(配列)

投稿者投稿内容
さうす
会議室デビュー日: 2008/10/16
投稿数: 8
投稿日時: 2008-10-24 11:32
とても初歩的な事で大変恐縮ですが、以下のソースでエラーとなる理由をお教え頂けないでしょうか。

public static void main(String argv[]) {

if (argv[0] == null || argv[0].equals("") || argv.length == 0) {
System.out.println("指定してください");
} else {
System.out.println(argv[0]);
}
}

条件式に length だけを指定するとエラーにはなりませんでした。
Edosson
ぬし
会議室デビュー日: 2004/04/30
投稿数: 675
投稿日時: 2008-10-24 11:39
argv.length == 0 の場合、argv[0]は、どんな状態でしょうか。
さうす
会議室デビュー日: 2008/10/16
投稿数: 8
投稿日時: 2008-10-24 11:59
引用:

Edossonさんの書き込み (2008-10-24 11:39) より:
argv.length == 0 の場合、argv[0]は、どんな状態でしょうか。



eclipseのコマンドライン引数に何も入力せず実行した状態です。

ご質問の意図と違う回答でしたらすいません。
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2008-10-24 12:19
引用:

さうすさんの書き込み (2008-10-24 11:59) より:

eclipseのコマンドライン引数に何も入力せず実行した状態です。
ご質問の意図と違う回答でしたらすいません。


Edosson さんが仰りたいのは、argv.length が 0 の時は argv には 「要素がひとつもない」 ですよねということです。 要素 0 は箱自体存在しないので null チェックさえできません。 length の意味を取り違えていませんか? あるいは配列自体を示す箱と、配列の要素の数と、要素の中身をそれぞれで考えられていないかでしょう。

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
mio
ぬし
会議室デビュー日: 2005/08/25
投稿数: 734
お住まい・勤務地: 神奈川県
投稿日時: 2008-10-24 12:23
>if (argv[0] == null || argv[0].equals("") || argv.length == 0) {
この中に
条件が3つあるわけですが、どういう順番で確認されると思いますか。
Edosson
ぬし
会議室デビュー日: 2004/04/30
投稿数: 675
投稿日時: 2008-10-24 12:49
書き方が悪かったかな。
配列がどんな状態なのか、理解できたら、あれで済むと考えたのですが。

精進します。
さうす
会議室デビュー日: 2008/10/16
投稿数: 8
投稿日時: 2008-10-24 13:22
皆さん、返信ありがとうございます。

引用:

じゃんぬねっとさんの書き込み (2008-10-24 12:19) より:
要素 0 は箱自体存在しないので null チェックさえできません。


引用:

mioさんの書き込み (2008-10-24 12:23) より:
>if (argv[0] == null || argv[0].equals("") || argv.length == 0) {
この中に
条件が3つあるわけですが、どういう順番で確認されると思いますか。



左から順に判定(?)され、箱自体が存在しないのでエラーになる。
length でエラーにならないのは、箱が存在するかどうかのチェックだから。

という事で問題ないでしょうか。

やんち
常連さん
会議室デビュー日: 2008/10/24
投稿数: 32
投稿日時: 2008-10-24 13:32
変数の中身を表示してデバッグしてみてはどうでしょうか。

コード:
public class Sample {

    public static void main(String[] args) {
        if (args == null) {
            System.out.println("args is null.");
            return;
        }
        
        System.out.println("args.length{" + args.length + "}");
        
        for (int i = 0; i < args.length; i++) {
            System.out.println("args[" + i + "]{" + args[i] + "}");
        }
    }

}


スキルアップ/キャリアアップ(JOB@IT)