The problem is with the way you're adding characters. Take a look at your if condition: 
a = s.charAt(i);
if(a==' ')
{
    // Here you are adding not the current character, but the NEXT character.
    str = str+(Character.toUpperCase(s.charAt(i+1)));
}
else
{
    // Here you are adding the current character. 
    str =str+(Character.toLowerCase(a));
}
As a result of this condition, you will skip a character if your input string contains a space, then repeat another character that you've already added. 
Additionally, you're not looping through the whole string because your loop conditional goes to s.length()-1. Change that to just s.length(). However, if you do that, you may run into an exception if the input string ends with a space (since you'll try to check for a character at an out-of-bound index). 
Here's what the fixed code would look like: 
public static void main(String args[])
{
    Scanner in = new Scanner(System.in);
    System.out.println("ent");
    String s=in.nextLine();
    String str ="";        
    char a ;
    for(int i =0;i<s.length();i++)
    {
        a = s.charAt(i);
        if(a==' ')
        {
            str = str+Character.toLowerCase(a)+(Character.toUpperCase(s.charAt(i+1)));
            i++; // "skip" the next element since it is now already processed
        }
        else
        {
            str =str+(Character.toLowerCase(a));
        }
    }
    System.out.println(str);
}
NOTE: I only fixed the code that you supplied. However, I'm not sure it works the way you want it to - the first character of the string will still be whatever case it started in. Your conditional only uppercases letters that are preceded by a space.