'$*' means all arguments together as a single line. To echo all arguments as individual entries, use '$@'. As it is, your last section is testing the whole set of arguments every iteration of the loop.
Besides, you don't need to be so complex to loop through all the existing arguments.
Code:
for i in "$@"; do
if test -f "$i"
then
echo "-> Argument $i is a file"
ls -l $i
else
echo "-> Argument $i either is not a regular file, or doesn't exist"
fi
Finally, please use [code][/code] tags around your code, for readability and to preserve formatting.