javastringloopspasswordsacm-java-libraries

Return the position first position two strings are different


i can't figure out how i am supposed to return the first position org and check are different. Do i have to use substrings?

import acm.program.*;

public class CheckPasswords extends ConsoleProgram
{
  public void run()
  {  

   while(true)
   {
      String org = readLine("Enter Password: ");
      String check = readLine("Confirm Password: ");

      if(org.equals(check))
      {
        println("Password Confirmed");
      }
      else
      {
        println("Passwords do not Match");
        //???
      }
   }
  }
}

Solution

  • If you want to just check if they are equal or not , you can use:

    int val = org.compareTo(check);
    

    It will return 0 if they are equal, negative value if org is before check , else positive value if org is after check.

    If you really want to return the first position where they are unequal, use this function:

    int firstMismatch(String org, String check)
    {
        int limit = (org.length()>check.length())?org.length():check.length();
        for(int i=0;i<limit;i++)
        {
            try{
            if(org.charAt(i)!=check.charAt(i))
            {
                 return i; //If one of the strings end, that's the position they are different, otherwise there is a mismatch. Either way, just return the index of mismatch
            }
            }
            catch(Exception e)
            {
                 if(org.length()!=check.length())
                {
    
                 return(i); //Execution comes here only when length of strings is unequal
             //Exception occurs because first string is smaller than
             // the second or vice versa. Say if you use "fred" and"fredd" as org and check 
             //respectively, "fred" is smaller than "fredd" so accessing org[4] is not allowed.   
             //Hence the exception.
              }
    
               System.out.println("Problem encountered"); //Some other exception has occured.
              return(-2);
            }  
        }
        return(-1); //if they are equal, just return -1
    
    
    
    }
    

    EDIT : And in your code, call as follows:

    public class CheckPasswords extends ConsoleProgram
    {
      public void run()
      {  
    
      while(true)
      {
      String org = readLine("Enter Password: ");
      String check = readLine("Confirm Password: ");
      int mismatchPosition = firstMisMatch(org,check);  
      if(mismatchPosition==-1)
      {
        println("Password Confirmed");
      }
      else
      {
        println("Passwords do not match from position "+mismatchPosition);
    
          }
       }
      }
    }