我不明白为什么逻辑没有按预期工作

时间:2012-09-11 20:45:11

标签: java logic if-statement

我正在创建一种方法,我必须使用简单的else / else if / 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 个答案:

答案 0 :(得分: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.";
}

注意&gt; = 而不是&gt;

答案 1 :(得分:2)

这是一个数学问题:

this.getOSStartHour()= 13

this.getSecurityStartHour()= 15

this.getForensicsStartHour()= 17

因此,只有小时= 14,如果

,我们可以先到达

对于小时= 16,如果

,我们可以达到第二

其他地方

答案 2 :(得分:2)

您的代码正在运行else部分,因为Calendar小时不是14"OS class")也不是16({{1} })。

如果您将系统时钟更改为"Security class",则应打印14。出于同样的原因,如果您将其更改为"We're in OS class.",则应打印16

另请注意,如果将其更改为"We're in Security class.",则始终会执行15部分。这是因为您只考虑elsehour > 13 and hour < 15,而不是hour > 15 and hour < 17hour >= 15。不知道这是错误还是期望的行为。

答案 3 :(得分:2)

  

this.getHour()此时返回15,因为它是下午3点。很快将是16岁

因为您的所有条件都不允许相等(>=<===)小时131517基本上是禁忌。因此,只有当小时为1416时,您的计划才能正常工作。