Erik Vorcov
Erik Vorcov

Reputation: 59

Why is this becoming an infinite loop?

All i need this method to do is take a string lets say "aaxbb" and it will return true because there is an 'aa' and a 'bb',

If the string given is length = 0 or length = 1 it should fail.

The issue i'm having is that which i do not know.. i know that in my terminal after hasAdjacentPair's first test case Pass's, i get a blinking curser meaning that somehwere in this method i'm not kicking out of one of my loops for it to continue to check the string for any more adjacent pairs

the first test case passes while its an empty string "" = because it returned false

the second test case passes while its "a" = because it returned false

We are also not allowed to use Arrays :(

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;
    }

Changed my while loop while (str.length() != 0) to while (str.length() != 0 && str.length() != 1) this enabled test 2 to work

EDIT 2 : After i completely took out the while (str.length() != 0) All 5 of my test cases pass :) so i guess it was just that?

Upvotes: 0

Views: 85

Answers (3)

Angel Angel
Angel Angel

Reputation: 21658

try this alternative:

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

Upvotes: 1

HJK
HJK

Reputation: 1382

while (str.length() != 0)

is always true and loop never end. Instead of if..if..while structure use either switch on length of string or if-else.

You could try something like this

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;
        }
    }

If you checking for atleast one pair make use of break statement as you already know that you got the result

Upvotes: 1

Ivan
Ivan

Reputation: 10372

Is there a reason you have a while loop checking for the str length? The str is not modified in the loop.

What you most likely want is an if, else if, else structure.

You can most likely return true within the adjChar == nextAdjChar if statement and return false at the end of your function.

Upvotes: 0

Related Questions