JAVA没有进入循环

时间:2016-02-08 14:06:53

标签: java arrays for-loop

抬头,这是学校项目中的一小部分,因此我一直试图不要求你们为我编写代码。

作为背景:我试图以螺旋方式填充此char[][]数组,我认为我有一个算法可行,但是,通常情况是......它不起作用。< / p>

但是现在我无法让我的代码进入并执行此for循环。 这是一个小片段......

在这个具体示例中,我正在运行k是一个长度为10的char[]数组 pTchar[]数组,长度为92

    box2 = new char[height][k.length];
    int c = 0;
    int limit = pT.length; //ensures the while loop doesint attempt to populate past the array bounds
    int w = k.length; //width of array
    int h = height; //height of array
    //these two variable i am trying to use to count how many blocks are 
    //filled on the outside of the spiral.
    //example.. as the spiral populates inward, it can no longer travel the entire
    //length of the array, but one less block for every pass
    int difH = 0; //difference in height
    int difW = 0; //difference in width
    while (limit > 0) {

        for (int n = 0; n < (w - (w - difW)); n++) {
            box[h - (h - difH)][n] = pT[c];
            limit--;
        }
    }

无论出于什么原因,当我逐步执行netbeans中的代码时,它不会输入或执行for循环,或者其他任何三个。

任何人都可以帮我弄清楚为什么我的代码不会进入或执行这个循环吗?

如果您希望看到整个while循环:

    while (limit > 0) {

        for (int n = 0; n < (w - (w - difW)); n++) {
            box[h - (h - difH)][n] = pT[c];
            limit--;
        }
        difH--;
        for (int n = h - (h - difH); n > 0; n--) {
            box[n][w - (w - difW)] = pT[c];
            limit--;
        }
        difW--;

        for (int n = w - (w - difW); n > 0; n--) {
            box[h - (h - difH)][n] = pT[c];
            limit--;
        }
        difH--;
        for (int n = 0; n < h - (h - difH); n++) {
            box[n][w - (w - difW)] = pT[c];
            limit--;
        }
        difW--;

    }

    //Prints box2
    //prints the box array
    int counter2 = 0;
    for (int column = 0; column < box2.length; column++) {
        if (column > 0) {
            System.out.print("|");
        }
        System.out.println();
        for (int r = 0; r < box2[column].length; r++) {

            System.out.print("|" + box2[column][r]);
        }
    }
    System.out.println("|\n");

如果我搞砸了所有可理解性(完全可能),请告诉我,我会编辑或重新评估我的算法。

4 个答案:

答案 0 :(得分:3)

n < (w - (w - difW))总是假的:

(w - (w - difW)) = (w-w+difW) = (0+difW) = difW

但您将difW设置为0,n设置为0,0 < 0设置为false

答案 1 :(得分:3)

此:

(w - (w - difW))

评估为+ difW为0.所以这个:

n < (w - (w - difW))

评估为:

n < 0

因此,除非n小于零,否则永远不会输入循环。

答案 2 :(得分:2)

您的问题似乎是:

int difW = 0; // this is 0
while (limit > 0) {
    // Problem is here
    for (int n = 0; n < (w - (w - difW)); n++) {
        box[h - (h - difH)][n] = pT[c];
        limit--;
    }
}

difW0。 w是某种东西,让我们说它是50.您已经写了(w - (w - difW))结果为:(50 - (50 - 0)),简单50 - 50和等于0int n = 0(w - (w - difW))相同。您已写入... n < (w - (w - difW) ...,因此条件始终为false,因为0 < 0falsefor循环仅在n小于{{(w - (w - difW))时执行1}}但(w - (w - difW))不小于n

因此,您需要将difW更改为大于0的内容。

答案 3 :(得分:0)

在您的代码中,当您进入循环时,difW为0。这使条件成为:

w - (w - 0)或(w - w)因此0未通过循环测试。