虽然布尔条件不再为真,但循环不会停止

时间:2015-11-21 22:07:24

标签: c# arrays matrix while-loop boolean

在这个while循环中,我会检查我试图放入矩阵的单词是否适合。

检查matrix[i]是空的还是空格,或者与word[i]的字符是否相同。

我的问题是,当涉及到人物不匹配或matrix[i]不为空的地方时,while循环不会停止。使用Console.WriteLine我写出了字符,看看会出现什么问题。

private bool Crossing(string word, int _row, int _col, int x, int y)
{
    int i = 0;
    bool l;
    bool crossing = ((matrix[(i * x) + _row, (i * y) + _col] == word[i]) || (matrix[(i * x) + _row, (i * y) + _col] == ' '));
    while(i < word.Length && crossing)
    {
        Console.WriteLine(i + ". char in matrix: " + matrix[(i * x) + _row, (i * y) + _col]);
        Console.WriteLine("i + ". char in word: " + word[i]);
        i++;
    }
    l = i >= word.Length;
    Console.WriteLine(l);
    return l;
}

2 个答案:

答案 0 :(得分:1)

可能你需要将布尔变量crossing的设置放在循环中,否则退出该循环的唯一方法是当我达到word长度

private bool Crossing(string word, int _row, int _col, int x, int y)
{
    int i = 0;
    bool l;
    bool crossing = true;        
    while(i < word.Length && crossing)
    {

        Console.WriteLine(i + ". char in matrix: " + matrix[(i * x) + _row, (i * y) + _col]);
        Console.WriteLine("i + ". char in word: " + word[i]);
        crossing = ((matrix[(i * x) + _row, (i * y) + _col] == word[i]) || (matrix[(i * x) + _row, (i * y) + _col] == ' '));

        i++;
    }
    l = i >= word.Length;
    Console.WriteLine(l);
    return l;
}

答案 1 :(得分:0)

您没有刷新crossing变量:

while(i < word.Length && crossing)
    {
        Console.WriteLine(i + ". char in matrix: " + matrix[(i * x) + _row, (i * y) + _col]);
        Console.WriteLine("i + ". char in word: " + word[i]);
        i++;

        crossing = ((matrix[(i * x) + _row, (i * y) + _col] == word[i]) || (matrix[(i * x) + _row, (i * y) + _col] == ' '));
    }