抬头,这是学校项目中的一小部分,因此我一直试图不要求你们为我编写代码。
作为背景:我试图以螺旋方式填充此char[][]
数组,我认为我有一个算法可行,但是,通常情况是......它不起作用。< / p>
但是现在我无法让我的代码进入并执行此for循环。 这是一个小片段......
在这个具体示例中,我正在运行k
是一个长度为10的char[]
数组
pT
是char[]
数组,长度为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");
如果我搞砸了所有可理解性(完全可能),请告诉我,我会编辑或重新评估我的算法。
答案 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--;
}
}
difW
是0
。 w是某种东西,让我们说它是50.您已经写了(w - (w - difW))
结果为:(50 - (50 - 0))
,简单50 - 50
和等于0
。 int n = 0
与(w - (w - difW))
相同。您已写入... n < (w - (w - difW) ...
,因此条件始终为false,因为0 < 0
为false
且for
循环仅在n
小于{{(w - (w - difW))
时执行1}}但(w - (w - difW))
不小于n
。
因此,您需要将difW
更改为大于0
的内容。
答案 3 :(得分:0)
在您的代码中,当您进入循环时,difW为0。这使条件成为:
w - (w - 0)或(w - w)因此0未通过循环测试。