嵌套循环混乱

时间:2017-11-06 08:56:09

标签: java for-loop nested-loops

public class Exon303 {
    public static void main(String[] args) {
        int k = 109;

        do {
            for(int i = 3; i < 9; i = i * 2) {
                if(k % i ==3) {
                    k = k / 3;
                } else {
                    k = k / 2;
                }
            }
            System.out.println(k);
        } while(k > 0);
        for(int i = 0; i < 2; i++) {
            for(int j = 0; j < 2; j++) {
                for(int m = 0; m < i * 2; m++) {
                    if(m == j && m == i) {
                        System.out.println("i: " + i);
                        System.out.println("j: " + j);
                        System.out.println("m: " + m);
                    }
                }
            }
        }    
    } 
}

有人可以向我解释我创建的这些循环的输出我现在已经手动跟踪了两次,出于某种原因,当我跟踪它时,我得到了不同的输出。

Expected output:
27
6
1
0
i: 1
j: 1
m: 1

这是我在

下面的手动输出
Handtraced output:
54 
27
9
4
2
0
i: 0
j: 0
m: 0
i: 1 
j: 1
m: 1

1 个答案:

答案 0 :(得分:0)

您手动跟踪代码是错误的。让我解释一下。

将您的代码分成两部分。第一部分:

[System.Web.Http.HttpPost]
[Route("api/v1/AddItem")]      
public IHttpActionResult AddItem(HttpRequestMessage filecontent, string companycode)
{
   var content = filecontent.Content.ReadAsStringAsync().Result;    
   MessageBox.Show(content);

   Return Ok("");
}

您在 int k = 109; do { for(int i = 3; i < 9; i = i * 2) { if(k % i ==3) { k = k / 3; } else { k = k / 2; } } System.out.println(k); } while(k > 0); 循环之外打印k,然后在第一for循环之后k / 2两次循环(i = 3,6),{{1} }。当while没有任何值k = (k / 2) / 2 = 27时,下一个while循环也是如此。因此,每个k循环中的k的下一个值是k % i == 3while。这是每个for循环开头的27/4 = 6值:

6/4 = 1

第二部分:

k, i

打印i,j,m值的条件为---- while loop ---- k = 109, i = 3 k = 54, i = 6 => print k / 2 = 27 ---- while loop ---- k = 27, i = 3 k = 13, i = 6 => print k / 2 = 6 ---- while loop ---- k = 6, i = 3 k = 3, i = 6 => print k / 2 = 1 ---- while loop ---- k = 1, i = 3 k = 0, i = 6 => print k / 2 = 0 ----> k == 0, break while loop for(int i = 0; i < 2; i++) { for(int j = 0; j < 2; j++) { for(int m = 0; m < i * 2; m++) { if(m == j && m == i) { System.out.println("i: " + i); System.out.println("j: " + j); System.out.println("m: " + m); } } } } 只有2个值m == j == i,但条件i, j使0, 1循环m < i*2for时会忽略m。所以唯一的输出:i = 0