C'est le comportement normal.
Dans le premier cas, tu entres une ligne avec une chaîne, elle est lue entièrement par le readLine() (jusqu'à la fin de la ligne), le buffer est donc vide. Ensuite, tu entres un int dans le buffer, que tu lis avec nextInt(). Aucun problème.
Maintenant, le deuxième cas est plus intéressant. Tu lui dis de lire un int, puis "tout le reste de la chaîne jusqu'à la fin de la ligne" (avec readLine()). Là, deux cas :
- soit tu as juste tapé "52" par exemple pour ton int, auquel cas il ne reste plus rien dans le buffer -> readLine lit une chaîne vide.
- soit tu as tapé "52 toto" par exemple, et là ta chaîne est bien récupérée et vaut "toto".
Jusque-là, on a le comportement normal, même si ça t'étonne.
Pour lire un entier puis une chaîne, tu peux donc :
- utiliser next() pour la chaîne (mais ça lira un seul mot délimité par les espaces),
- utiliser readLine() mais tout doit être entré sur la même ligne.
Comme d'habitude, tout est expliqué dans la javadoc :
http://java.sun.com/j2se/1.5.0/docs/api/ja...il/Scanner.html