我正在创建一种方法,我必须使用简单的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;
}
答案 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
部分。这是因为您只考虑else
和hour > 13 and hour < 15
,而不是hour > 15 and hour < 17
或hour >= 15
。不知道这是错误还是期望的行为。
答案 3 :(得分:2)
this.getHour()此时返回15,因为它是下午3点。很快将是16岁
因为您的所有条件都不允许相等(>=
,<=
,==
)小时13
,15
和17
基本上是禁忌。因此,只有当小时为14
或16
时,您的计划才能正常工作。