我有两个列表:list1,list2。我遍历两个列表并将它们组合成一个列表。然后我用这样的陈述:
if(list1 != null && list2 != null)
{
int i=0,j=0;
while(i<list1.size() || j<list2.size())
{
if((j>=list2.size()) || (curFormater.parse(list1.get(i).RecordDate).compareTo(curFormater.parse(list2.get(j).RecordDate)) < 0)) {
.....
i++;
}
else if((i>=list1.size()) || (curFormater.parse(list1.get(i).RecordDate).compareTo(curFormater.parse(list2.get(j).RecordDate)) < 0))
{
.....
j++;
}
....
}
在这两个if语句中,当j>=list2.size()
或i>=list1.size()
时,不应判断后一个条件,但JAVA编译器似乎都判断它们并抛出IndexOutOfBoundsExceptio
n。我怎么能让java不执行后面的条件判断?
提前谢谢!
答案 0 :(得分:0)
如果要合并两个具有不同大小的列表,则最小列表的索引将始终比最大列表更早完成迭代,因此您必须使用&&
运算符。
if(list1 != null && list2 != null)
{
int i=0,j=0;
while(i<list1.size() && j<list2.size())
{
// your code
i++;
j++;
}
// when one of them arrived to end of list to loop will not be executed so you need to check
// those conditions
while (i > list.size() && j < list.size())
{
// your code
j++;
}
while (i < list.size() && j > list.size())
{
// your code
i++;
}
因此,对于优化,如果假设list1中有m
个元素,list2中有n
个元素,则时间复杂度将始终为O(m + n),仅执行两个while循环< / p>
修改强>
OR
和AND
运算符为Binary Operators
,这意味着他们必须检查这两个运算符
他们结合的条件,而Not
是一元的,其中需要一个条件来检查
如果您听说过这些运算符的真值表,那么编译器就会根据这些真值表进行编程,当他看到|| (或操作员)他用OR的真值表检查条件,当他看到&amp;&amp; (和操作员)他用AND的真值表检查条件。
由于OR和AND都是二元运算符,因此这两个条件都将被“juded”
其中一个是真的。
或真相表
(假设A和B是状态(条件),R是结果 当你对他们做OR时
-------------------------
A | B | R
-------------------------
True | True | True
-------------------------
True | False | True
-------------------------
False| True | True
-------------------------
False| False | False
-------------------------
// so in Or table, when both of the conditions are false the result is False
// while when one of them is true the result is True
和真实表
(假设A和B是状态(条件),R是结果 当你做他们的时候
-------------------------
A | B | R
-------------------------
True | True | True
-------------------------
True | False | False
-------------------------
False| True | False
-------------------------
False| False | False
-------------------------
// so in And table, when both of the conditions are true the result is True
// while when one of them is false the result is False
我希望你现在明白为什么必须检查两个条件,即使其中一个 他们是真的.. 例如,假设您有两个条件A和B,并对它们执行OR并假设A为假
if (A || B)
// some code here
在这种情况下,它取决于条件B,如果B为假,代码将不会被执行, 如果B为真,代码将被执行..
我知道你问为什么如果A是真的它还在检查B条件,所以这是因为 OR是二元运算符..