-1

else単純な//ステートメントを使用して、 else if1日の時間に応じてどちらを選択するかを決定する必要があるメソッドを作成しています。else

elseプログラムがこのセクションに直接進む理由がわかりません。

私のロジックの何が問題になっていますか?私はこの質問が質問を受け入れていることを知っていますが、私はとても混乱していて、ここで何が間違っているのかを本当に知りたいです。

public String whichClass()
{
    String string = "";
    int ClassLength = 2;

    this.setLengthOfOS(ClassLength);
    this.setLengthOfSecurity(ClassLength);
    this.setLengthOfForensics(ClassLength);

    this.setOSStartHour(13);
    this.setSecurityStartHour(15);
    this.setForensicsStartHour(17);

    Date d = new Date();
    Calendar c = Calendar.getInstance();

    c.setTime(d);

    this.setHour(c.get(Calendar.HOUR_OF_DAY));

    if ((this.getHour() > this.getOSStartHour()) && 
            (this.getHour() < this.getSecurityStartHour())) 
    { 
        string = "We're in OS class."; 
    }
    else if ((this.getHour() > this.getSecurityStartHour()) && 
            (this.getHour() < this.getForensicsStartHour()))
    { 
        string = "We're in Security class."; 
    }
    else 
    {
        string = "We have no class.";
    }

    return string;
}

編集:これは修正され、機能しています。

public String whichClass()
{
    String string = "";
    Date d = new Date();
    Calendar c = Calendar.getInstance();
    c.setTime(d);
    this.setHour(c.get(Calendar.HOUR_OF_DAY));

    if ((this.getHour() >= this.OSStartHour) && (this.getHour() < (this.OSStartHour + this.lengthOfOS))) string = "We're in OS class."; 
    else if ((this.getHour() >= this.SecurityStartHour) && (this.getHour() < (this.SecurityStartHour + this.lengthOfSecurity))) string = "We're in Security class."; 
    else if ((this.getHour() >= this.ForensicsStartHour) && (this.getHour() < (this.ForensicsStartHour + this.lengthOfForensics))) string = "We're in Security class."; 
    else string = "We have no class.";

    return string;
}
4

4 に答える 4

4

あなたは平等を説明していません。したがって、this.getHour()が15の場合、どのスロットにも分類されません。

両方とも
this.getHour() < this.getSecurityStartHour()
であり
this.getHour() < this.getSecurityStartHour()、偽です。

どちらも厳密な不平等だからです

this.getHour() == this.getSecurityStartHour()本当です

試す

if ((this.getHour() >= this.getOSStartHour()) && 
        (this.getHour() < this.getSecurityStartHour())) 
{ 
    string = "We're in OS class."; 
}
else if ((this.getHour() >= this.getSecurityStartHour()) && 
        (this.getHour() < this.getForensicsStartHour()))
{ 
    string = "We're in Security class."; 
}
else 
{
    string = "We have no class.";
}

>の代わりに> =に注意してください

于 2012-09-11T20:55:33.563 に答える
2

this.getHour()は、午後3時なので、現時点では15を返します。まもなく16になります

あなたの条件のどれも平等(、、)を許さないので>=<=時間==、、13そして1517本質的にタブーです。したがって、プログラムは、時間がまたはの場合にのみ機能することが期待され14ます16

于 2012-09-11T20:58:33.240 に答える
2

これは数学的な質問です:

this.getOSStartHour()= 13

this.getSecurityStartHour()= 15

this.getForensicsStartHour()= 17

したがって、1時間= 14の場合にのみ、最初に到達できるのは

時間=16の場合、次の場合に2番目に到達できます。

その他の場合

于 2012-09-11T20:56:31.507 に答える
2

時刻が()でも( )でもないため、コードはelseパーツを実行しています。Calendar14"OS class"16"Security class"

たとえば、システムクロックをに変更すると、14が出力されます"We're in OS class."。同様に、に変更すると16、が出力されます"We're in Security class."

15また、に変更すると、常にパーツが実行されることに注意してくださいelse。これはhour > 13 and hour < 15、とだけを考慮し、またはは考慮しhour > 15 and hour < 17ないためhour >= 15ですhour <= 15。それがエラーなのか、それとも望ましい動作なのかわからない。

于 2012-09-11T20:56:44.437 に答える