1. Limited time only! Sign up for a free 30min personal tutor trial with Chegg Tutors
    Dismiss Notice
Dismiss Notice
Join Physics Forums Today!
The friendliest, high quality science and math community on the planet! Everyone who loves science is here!

Generating random characters from strings

  1. Oct 25, 2011 #1
    1. The problem statement, all variables and given/known data

    Write a program that takes a positive integer N and a string as command line arguments (N is assumed to be smaller than the length of the string). The program should pick N random characters from the string and construct and print a new string composed of these random characters.

    2. Relevant equations

    for loops. random(?)

    3. The attempt at a solution

    We so far learned how to generate random double variables using Math.random(). Is there a way (method) to generate random characters in strings?

    Code (Text):
    <method signature><method name><parameters>

    for i = 0; i < some integer; i++
           string.random.charAt(i); // not really a command but something as this exists?
     
  2. jcsd
  3. Oct 25, 2011 #2

    Borek

    User Avatar

    Staff: Mentor

    It depends on the language, but you have to use random number as an index to the string. Something like - for example - string[rand()] - it won't work, but should push you in the right direction.
     
  4. Oct 26, 2011 #3

    NascentOxygen

    User Avatar

    Staff: Mentor

    A more descriptive title would be, "Choosing N characters at random from a string of k characters". I imagine that you are not allowed to choose the ith character more than once, for any i?

    Random numbers are fascinating. Choosing things at random is fun to program.

    A foolproof method is to set up an array A[1]...A[k] storing the numerals 1..k in that order. Then shuffle (i.e., randomly mix up or swap around) the elements of array A. (I'll leave you to think about how to shuffle.)

    Then simply print out the characters in your string that correspond in position to the numbers found in the first N elements of array A (because they have now been well shuffled).

    This way, you aren't making any great demands on your random number generator, and you can monitor everything along the way to make sure it is working out exactly as you planned. Yes, you can plan random events! :smile:
     
  5. Oct 26, 2011 #4
    Unfortunately, we haven't covered arrays in the course so using them will result in a failing grade at the moment. But thank you for the answer; this will sure come in handy when we take arrays. I actually thought of it and I think it worked:

    Code (Text):
    public class RandomString
    {
        public static void main(String[] args)
        {
            int n = Integer.parseInt(args[0]); // n should be less than the length of the string
            String str = args[1];
           
            for (int i = 1; i <= n; i++)
            {
                int position = randomGenerator(str.length());
                char c = str.charAt(position);
                System.out.print(c);
            }
        }
       
        public static int randomGenerator(int n)
        {
            double rand = Math.random();
            double num = 1 + rand * (n - 1); // the string's length starts at 1 hence we add 1
            int position = (int) num;
            return position;
        }
    }
    The output blabbered a string of random characters, so I'm guessing it worked.
     
  6. Oct 27, 2011 #5

    NascentOxygen

    User Avatar

    Staff: Mentor

    Two comments. Your code doesn't actually "construct ... a new string". Also, there is nothing to prevent your program selecting the same character position multiple times; is this likely to be a problem?
     
Know someone interested in this topic? Share this thread via Reddit, Google+, Twitter, or Facebook




Similar Discussions: Generating random characters from strings
Loading...