for the first, import java.util.Random;
Random gen = new Random();
gen.NextInt(n+1);
gen is merely the name of the random generator, I use gen, call it whatever you want. *edit* sorry, you know that I'm sure, it's just a constructor. Didnt mean to insult your intelligence.
for the second, generate a random number between say 1 and 100, then use if statements, if its between 1 and 30, its 1, 31-40 its 2, etc. gives one a 30% chance, 2 a tne percent chance. That is the only way I can think of, I don't know whether it would be any easier.
for the third, perhaps this will help:
http://www.askoxford.com/asktheexper...ords/frequency