Java中的if else语句错误,没有运行时错误

时间:2018-08-03 14:37:13

标签: java if-statement logic logical-operators

这是我的代码:

public class part {
    public static void main(String args[]){
        int[] timea = {1,2,3,4,5,6};
        int[] timeb = {3,5};
        int k1 = 0, k2 = 0;
        while(k1 < timea.length && k2 < timeb.length) {
            if (timea[k1] < timeb[k2]) {
                System.out.println("Timeb is big");
                k1++;
            } else if (timea[k1] == timeb[k2]) {
                System.out.println("We are same");
                k2++;
            } else if (timea[k1] > timeb[k2]) {
                System.out.println("Timea is big");
                k1++;
            }
        }
    }
}

输出:

Timeb is big
Timeb is big
We are same
Timeb is big
we are same

我的问题是Timea is big从未打印过。但是按照我的逻辑

 else if (timea[k1] > timeb[k2]) {
     System.out.println("Timea is big");
     k1++;
 }

此代码块在得到{6}时执行,但我不明白为什么这部分未执行?我的代码块中是否存在任何逻辑错误?

3 个答案:

答案 0 :(得分:0)

好的,让我们进行跟踪:

k1=0, k2=0:

timea[0]=1, timeb[0]=3
Timeb is big

k1=1, k2=0:

timea[1]=2, timeb[0]=3
Timeb is big

k1=2, k2=0:

timea[2]=3, timeb[0]=3
We are same

k1=2, k2=1:

k2 is bigger than timeb length, therefore the while loop ends

那部分代码将永远不会在那些示例数组下执行...

答案 1 :(得分:0)

是的,这是一个逻辑错误。

k2的值大于0时,while循环由于其条件while(k1<timea.length && k2<timeb.length)而结束。 当您传递到第二个if时,k2的值将增加到1,这不满足while循环条件。

答案 2 :(得分:0)

好吧,它永远不会打印,因为它永远都不会到达它。

 int [] timea={1,2,3,4,5,6};
 int [] timeb={3};

所以您的while循环:while(k1<timea.length && k2<timeb.length)

timea的大小为6,timeb的大小为1。

在第一次迭代中,它比较1到3。 由于timea[k1]为1小于timea[k2]为3,因此它打印"Timeb is big"并将k1递增1。

在第二次迭代中,它将2与3进行比较。由于timea[k1]为2小于timea[k2]为3,因此打印"Timeb is big"并将k1递增1

然后在第三次(也是最后一次)迭代中将3与3进行比较。由于timea[k1]为3等于timea[k2]为3,因此打印"We are same"并递增{{1 }}通过1。

但是这一次因为k2为1,并且在您的while循环中,您的情况表明要继续k2 必须小于k2的大小(也为1),因为只有一个元素,所以它无法继续到循环的下一个迭代。

这有意义吗?