-1

プログラミングと本を読むのは初めてです。ループについての質問です。次のコードがあります。

public bool DoThisJob(string job, int numShift) {
        if (!string.IsNullOrEmpty(currentJob))
            return false;
        for (int i = 0; i < jobsICanDo.Length; i++) {
            if (jobsICanDo[i] == job) {
                currentJob = job;
                this.shiftsToWork = numberOfShifts;
                shiftsWorked = 0;
                return true;
            }
        return false;

currentJob 文字列が空でない場合は、false を返すか、true を返しますか? elseステートメントはありません。それが true である場合、どうすればよいかを知るにはどうすればよいでしょうか。

次にfor ループを実行しますが、再び for ループが実行されたのは、false または true が返されたからですか? 最後に、自明の if ステートメントを実行します。

4

5 に答える 5

1

「return」ステートメントのため、他にありません。関数の実行を即座に中止し、呼び出し元の関数に戻ります。あなたはelseでそれを書くことができ、それは同じように機能します.

于 2013-01-25T15:06:30.107 に答える
0

There is no else statement so how do we know what to do if it is true?.

オプションの場合はif ... else(または古典的に呼ばれるif .. then .. else)構造elseで、それがない場合、ブロックの外側の次のステートメントにフォールスルーしifます。この場合、そのforステートメント

上記の関数は、次のようになりますが、同等にすることができます

public bool DoThisJob(string job, int numShift) {
        if (!string.IsNullOrEmpty(currentJob))
            return false;
        else {
            for (int i = 0; i < jobsICanDo.Length; i++) {
                if (jobsICanDo[i] == job) {
                    currentJob = job;
                    this.shiftsToWork = numberOfShifts;
                    shiftsWorked = 0;
                    return true;
                }
            return false;
        }
于 2013-01-25T15:05:40.517 に答える
0

currentJob 文字列が null の場合、ステートメントは実行されず、ループifに陥ります。for

ループ内の条件によってfortrue が返された場合、メソッドは true を返し、最後の戻り値には到達しません。

ループが true を返さない場合、forループは最後の行に落ち、メソッドは false を返します。

于 2013-01-25T15:07:07.657 に答える
0

return ステートメントは、その時点で関数の実行を停止し、呼び出し元のプロシージャに制御を返します。

public bool DoThisJob(string job, int numShift) {
        if (!string.IsNullOrEmpty(currentJob))
            return false; // If it is not empty then function call returns from this statement

        // Else, flow control falls through and below code is executed
        for (int i = 0; i < jobsICanDo.Length; i++) {
            if (jobsICanDo[i] == job) {
                currentJob = job;
                this.shiftsToWork = numberOfShifts;
                shiftsWorked = 0;
                return true;
            }

        return false;
        }

これで問題が明確になることを願っています。

于 2013-01-25T15:09:33.987 に答える
0

関数は、ループなしで次のように簡略化できます。

public bool DoThisJob(string job, int numShift) {

    if (!string.IsNullOrEmpty(currentJob) || !jobsICanDo.Contains<string>(job))
    {
       //if currentJob NOT null/empty OR 
       //job is not in the jobsICanDo[] array
       return false;
    }
    else
    {
        currentJob = job;
        this.shiftsToWork = numberOfShifts;
        shiftsWorked = 0;
        return true;
    }
}
于 2013-01-25T15:21:27.760 に答える