Here i used this code for generating one password which should contain a uppercase,a lowercase and a number and a special char. this is my code for checking.
String randomPassword = genRanPass();
        boolean hasUppercase = !randomPassword.equals(randomPassword.toLowerCase());
        boolean hasLowercase = !randomPassword.equals(randomPassword.toUpperCase());
        boolean hasNumber  = randomPassword.matches(".*\\d.*");
        if(!(randomPassword.contains("!") || randomPassword.contains("@") || randomPassword.contains("#") || randomPassword.contains("$") || randomPassword.contains("_") || randomPassword.contains("-"))){
             while(!hasUppercase && hasLowercase && hasNumber) 
             {
             randomPassword = genRanPass();
             }
          }else{
             while(!hasUppercase && hasLowercase && hasNumber) 
                 {
                 randomPassword = genRanPass();
                 }
                return randomPassword;
        }
genRanPass(); generating a password having random number,a spcial char,a letter Uppercase and lower case
but i got hnga$VVj from my method  and when i am checking 
while(!hasUppercase && hasLowercase && hasNumber) 
                 {
                 randomPassword = genRanPass();
                 }
                return randomPassword;
   while(!hasUppercase && hasLowercase && hasNumber) its became true,true and false,its not going inside this method plase help me.
                 {       
 
    