【问题标题】:If else statement error in java no run time errorjava中的if else语句错误没有运行时错误
【发布时间】:2018-08-03 14:37:12
【问题描述】:

这是我的代码:

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} 时被执行,但我不明白为什么这部分没有被执行?我的代码块中是否有任何逻辑错误?

【问题讨论】:

  • 只要用你的调试器,或者在代码中加上println,显示每次迭代时每个变量的值,你就明白了
  • Hint 提示检查执行k2++ 后会发生什么。 while-loop 下一次迭代的条件是什么。
  • 你能分享你试图通过这段代码实现的目标吗?根据您的代码 k2 变为 1。所以 while 循环不会再次执行。

标签: java if-statement logic logical-operators


【解决方案1】:

好的,让我们进行跟踪:

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

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

【讨论】:

    【解决方案2】:

    是的,有一个逻辑错误。

    k2 的值大于0 时,while 循环结束,因为它的条件while(k1&lt;timea.length &amp;&amp; k2&lt;timeb.length)。 当您传递到第二个 if 时,k2 的值会递增到 1,这不满足 while 循环条件。

    【讨论】:

      【解决方案3】:

      嗯,它永远不会打印,因为它永远不会到达。

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

      所以你的 while 循环:while(k1&lt;timea.length &amp;&amp; k2&lt;timeb.length)

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

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

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

      然后在第三次(也是最后一次)迭代中,它将 3 与 3 进行比较。由于 timea[k1] 等于 3 等于 timea[k2] 即 3 它打印 "We are same" 并将 k2 增加 1。

      但这一次,因为k2 是 1,并且在你的 while 循环中,你的条件说为了继续,k2 必须小于 timeb 的大小(也是 1)它不能继续循环的下一次迭代,因为只有一个元素。

      这有意义吗?

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-11-21
        • 1970-01-01
        • 1970-01-01
        • 2021-05-29
        • 1970-01-01
        • 2018-08-30
        • 2016-07-21
        • 1970-01-01
        相关资源
        最近更新 更多