-1

私はこのコードを持っています

public class CountHi {
    static public void main(String[] args) {
        String s1 = "abc.xyz";
        System.out.println(s1.length());
        System.out.println(xyzThere(s1));
    }
    public static boolean xyzThere(String str) {
        if (str.length() > 3)
        {
            for (int i = 0; i < str.length() - 3; i++) {
                System.out.println(str.substring(i, i + 4));
                if (str.substring(i, i + 4).equals(".xyz"))
                {
                    return false;
                } else {
                    return true;
                }
            }
        }
        return false;
    }
}

i++過去 1 時間ほど検索してきましたが、がデッド コードになった理由を見つけることができませんでした。実際、私はプログラミングとJavaが初めてなので、助けてください。ありがとう。

4

4 に答える 4

7

forループの最初の反復で戻っているため、そのi++部分は決して実行されません。

for(int i = 0; i < str.length()-3;i++) {
    System.out.println(str.substring(i,i+4));

    if(str.substring(i,i+4).equals(".xyz")) {
        return false;

    } else {
        return true;
    }
}

ifまたはブロックのいずれかelseが実行され、両方ともすぐに戻ります。したがって、ループは再び反復する機会がありません。

そこのループのポイントがわかりません。拡張子があるかどうかを確認したいだけの場合は.xyz、単一の部分文字列で行うことができます。

if (s1.substring(s1.lastIndexOf(".")).equals(".xyz")) {
    // true
}

または、テストしたいだけの場合、文字列に が含まれている場合は.xyz、単にString#contains()メソッドを使用します。

s1.contains(".xyz");
于 2013-09-24T08:42:45.127 に答える
1

条件if(str.substring(i,i+4).equals(".xyz"))成立・不成立でループしている間は、いずれにしてもループから戻ります。i++実行されることはありません。

于 2013-09-24T08:43:59.737 に答える
1

あなたは保つ必要があります

        System.out.println(str.substring(i,i+4));

内部{}

于 2013-09-24T08:44:08.533 に答える
0

あなたif loopは常に関数の外に出ますreturn

ブール変数を使用し、戻り値をメソッドの最後に置く必要があります。

グローバル変数を宣言します。

boolean result = false;

次に、yout if ループで使用します。

            if (str.substring(i, i + 4).equals(".xyz"))
            {
                result = false;
            } else {
                result true;
            }

メソッドの最後に return を追加します。

return result;
于 2013-09-24T09:30:49.307 に答える