为什么这会变成无限循环?

时间:2015-02-26 03:03:54

标签: java

所有我需要这个方法来做一个字符串让我们说"aaxbb"它会返回true,因为有一个' aa'和一个'',

如果给出的字符串为length = 0length = 1则会失败。

我遇到的问题是我不知道的问题..我知道在我的终端中,在hasAdjacentPair的第一个测试用例Pass后,我得到一个闪烁的诅咒意味着有些人在这个方法我没有踢出我的一个循环,因为它继续检查字符串是否有更多相邻的对

第一个测试用例通过,而它是一个空字符串"" =因为它返回了错误

第二个测试用例通过了它的" a" =因为它返回了错误

我们也不允许使用数组:(

public boolean hasAdjacentPair(String str)
    {
       boolean result = false;

       if (str.length() == 0)
       {
           result = false;
       }
       if (str.length() == 1)
       {
           result = false;
       }

       while (str.length() != 0)
       {
        for (int i = 0; i < str.length() - 1; ++i)
        {
            char adjChar = str.charAt(i);
            char nextAdjChar = str.charAt(i + 1);

            if (adjChar == nextAdjChar)
            {
                result = true;
            }
        }

       }
    return result;
    }

将我的while循环while (str.length() != 0)更改为(str.length() != 0 && str.length() != 1)此启用的测试2才能正常工作

编辑2:在我完全拿出while (str.length() != 0)后,我的所有5个测试用例都通过了:)所以我猜它只是那个?

3 个答案:

答案 0 :(得分:1)

while (str.length() != 0)

总是如此,循环永远不会结束。而不是if..if..while结构使用切换字符串的长度或if-else。

你可以试试这样的事情

if (str.length() == 0)
   {
       result = false;
   }
   else if (str.length() == 1)
   {
       result = false;
   }

   else
   {
    for (int i = 0; i < str.length() - 1; ++i)
    {
        char adjChar = str.charAt(i);
        char nextAdjChar = str.charAt(i + 1);

        if (adjChar == nextAdjChar)
        {
            result = true;
            break;
        }
    }

如果你检查至少一对使用break语句,因为你已经知道你得到了结果

答案 1 :(得分:1)

尝试这个替代方案:

boolean c = false;
//Your other code
while (str.length() != 0 && c == false)
       {
        for (int i = 0; i < str.length() - 1; ++i)
        {
            char adjChar = str.charAt(i);
            char nextAdjChar = str.charAt(i + 1);

            if (adjChar == nextAdjChar)
            {
                result = true;
            }
        }
        c = true;
        }
//Your other code

答案 2 :(得分:0)

你有一个while循环检查str长度的原因吗? str未在循环中修改。

你最想要的是if,else if,else结构。

您很可能在adjChar == nextAdjChar if语句中返回true,并在函数结束时返回false。