这是我的代码:
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}时执行,但我不明白为什么这部分未执行?我的代码块中是否存在任何逻辑错误?
答案 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),因为只有一个元素,所以它无法继续到循环的下一个迭代。
这有意义吗?