-1

我正在创建一种方法,我必须通过使用简单的 // 语句来决定我在一天中的else哪个小时else ifelse

我不明白为什么程序会直接进入该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() 现在返回 15,因为它是下午 3 点。很快就16岁了

因为您的条件都不允许相等(>=, <=, ==)小时13, 15, 并且17本质上是禁忌。因此,您的程序预计仅在 hour 为14或时工作16

于 2012-09-11T20:58:33.240 回答
2

这是一道数学题:

this.getOSStartHour() = 13

this.getSecurityStartHour() = 15

this.getForensicsStartHour() = 17

所以只有 hour = 14 我们可以先到达,如果

对于小时 = 16,我们可以达到秒,如果

其他休息

于 2012-09-11T20:56:31.507 回答
2

您的代码正在运行该else部分,因为Calendar一天中的 s 小时既不是14( "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 >= 15or hour <= 15。不知道这是错误还是期望的行为。

于 2012-09-11T20:56:44.437 回答