1

How can I generate a random alphabet so that each character in a user inputted string is replaced by a random character. Once a random letter has been selected it is then removed from the randomization possibilities. Here is what I have so far:

import java.util.ArrayList;
import java.util.Random;
import java.util.Scanner;

/**
 *
 * @author Dan
 */
public class k {
    public static void main(String args[]) {

        Scanner in = new Scanner(System.in);
        System.out.println("Enter a sentence: ");
        String msg = in.nextLine();

        ArrayList<Character> al = new ArrayList<Character> ();
        Random gen = new Random();
        int num1, num2, num3, num4, num5,num6,num7,num8,num9,num10,num11,num12,num13,num14,num15,num16,num17,num18,num19,num20,num21,num22,num23,num24, num25, num26;
        int digit1, digit2;
        int length;


        for (int i = 65; i <=90; i++){
            al.add((char)i);
        }


            num1 = gen.nextInt(al.size());
            length = String.valueOf(num1).length();
            if (length == 1){
               System.out.print(al.get(num1)); 
            }
            else if (length == 2){
                digit1 = (num1 % 10);
                digit2 = num1 / 10;
                String result = "" + digit1 + digit2;
                num1 = Integer.valueOf(result);
            }
            al.remove(num1);

            num2 = gen.nextInt(al.size());
            length = String.valueOf(num2).length();
            if (length == 1){
               System.out.print(al.get(num1)); 
            }
            else if (length == 2){
                digit1 = (num1 % 10);
                digit2 = num1 / 10;
                String result = "" + digit1 + digit2;
                num2 = Integer.valueOf(result);
            }
            al.remove(num2);

            num3 = gen.nextInt(al.size());
            length = String.valueOf(num2).length();
            if (length == 1){
               System.out.print(al.get(num1)); 
            }
            else if (length == 2){
                digit1 = (num1 % 10);
                digit2 = num1 / 10;
                String result = "" + digit1 + digit2;
                num3 = Integer.valueOf(result);
            }
            al.remove(num3);

            num4 = gen.nextInt(al.size());
            length = String.valueOf(num2).length();
            if (length == 1){
               System.out.print(al.get(num1)); 
            }
            else if (length == 2){
                digit1 = (num1 % 10);
                digit2 = num1 / 10;
                String result = "" + digit1 + digit2;
                num4 = Integer.valueOf(result);
            }
            al.remove(num4);

            num5 = gen.nextInt(al.size());
            length = String.valueOf(num2).length();
            if (length == 1){
               System.out.print(al.get(num1)); 
            }
            else if (length == 2){
                digit1 = (num1 % 10);
                digit2 = num1 / 10;
                String result = "" + digit1 + digit2;
                num5 = Integer.valueOf(result);
            }
            al.remove(num5);

            num6 = gen.nextInt(al.size());
            length = String.valueOf(num2).length();
            if (length == 1){
               System.out.print(al.get(num1)); 
            }
            else if (length == 2){
                digit1 = (num1 % 10);
                digit2 = num1 / 10;
                String result = "" + digit1 + digit2;
                num6 = Integer.valueOf(result);
            }
            al.remove(num6);

            num7 = gen.nextInt(al.size());
            length = String.valueOf(num2).length();
            if (length == 1){
               System.out.print(al.get(num1)); 
            }
            else if (length == 2){
                digit1 = (num1 % 10);
                digit2 = num1 / 10;
                String result = "" + digit1 + digit2;
                num7 = Integer.valueOf(result);
            }
            al.remove(num7);

            num8 = gen.nextInt(al.size());
            length = String.valueOf(num2).length();
            if (length == 1){
               System.out.print(al.get(num1)); 
            }
            else if (length == 2){
                digit1 = (num1 % 10);
                digit2 = num1 / 10;
                String result = "" + digit1 + digit2;
                num8 = Integer.valueOf(result);
            }
            al.remove(num8);

            num9 = gen.nextInt(al.size());
            length = String.valueOf(num2).length();
            if (length == 1){
               System.out.print(al.get(num1)); 
            }
            else if (length == 2){
                digit1 = (num1 % 10);
                digit2 = num1 / 10;
                String result = "" + digit1 + digit2;
                num9 = Integer.valueOf(result);
            }
            al.remove(num9);

            num10 = gen.nextInt(al.size());
            length = String.valueOf(num2).length();
            if (length == 1){
               System.out.print(al.get(num1)); 
            }
            else if (length == 2){
                digit1 = (num1 % 10);
                digit2 = num1 / 10;
                String result = "" + digit1 + digit2;
                num10 = Integer.valueOf(result);
            }
            al.remove(num10);

            num11 = gen.nextInt(al.size());
            length = String.valueOf(num2).length();
            if (length == 1){
               System.out.print(al.get(num1)); 
            }
            else if (length == 2){
                digit1 = (num1 % 10);
                digit2 = num1 / 10;
                String result = "" + digit1 + digit2;
                num11 = Integer.valueOf(result);
            }
            al.remove(num11);

            num12 = gen.nextInt(al.size());
            length = String.valueOf(num2).length();
            if (length == 1){
               System.out.print(al.get(num1)); 
            }
            else if (length == 2){
                digit1 = (num1 % 10);
                digit2 = num1 / 10;
                String result = "" + digit1 + digit2;
                num12 = Integer.valueOf(result);
            }
            al.remove(num12);

            num13 = gen.nextInt(al.size());
            length = String.valueOf(num2).length();
            if (length == 1){
               System.out.print(al.get(num1)); 
            }
            else if (length == 2){
                digit1 = (num1 % 10);
                digit2 = num1 / 10;
                String result = "" + digit1 + digit2;
                num13 = Integer.valueOf(result);
            }
            al.remove(num13);

            num14 = gen.nextInt(al.size());
            length = String.valueOf(num2).length();
            if (length == 1){
               System.out.print(al.get(num1)); 
            }
            else if (length == 2){
                digit1 = (num1 % 10);
                digit2 = num1 / 10;
                String result = "" + digit1 + digit2;
                num14 = Integer.valueOf(result);
            }
            al.remove(num14);

            num15 = gen.nextInt(al.size());
            length = String.valueOf(num2).length();
            if (length == 1){
               System.out.print(al.get(num1)); 
            }
            else if (length == 2){
                digit1 = (num1 % 10);
                digit2 = num1 / 10;
                String result = "" + digit1 + digit2;
                num15 = Integer.valueOf(result);
            }
            al.remove(num15);

            num16 = gen.nextInt(al.size());
            length = String.valueOf(num2).length();
            if (length == 1){
               System.out.print(al.get(num1)); 
            }
            else if (length == 2){
                digit1 = (num1 % 10);
                digit2 = num1 / 10;
                String result = "" + digit1 + digit2;
                num16 = Integer.valueOf(result);
            }
            al.remove(num16);

            num17 = gen.nextInt(al.size());
            length = String.valueOf(num2).length();
            if (length == 1){
               System.out.print(al.get(num1)); 
            }
            else if (length == 2){
                digit1 = (num1 % 10);
                digit2 = num1 / 10;
                String result = "" + digit1 + digit2;
                num17 = Integer.valueOf(result);
            }
            al.remove(num17);

            num18 = gen.nextInt(al.size());
            length = String.valueOf(num2).length();
            if (length == 1){
               System.out.print(al.get(num1)); 
            }
            else if (length == 2){
                digit1 = (num1 % 10);
                digit2 = num1 / 10;
                String result = "" + digit1 + digit2;
                num18 = Integer.valueOf(result);
            }
            al.remove(num18);

            num19 = gen.nextInt(al.size());
            length = String.valueOf(num2).length();
            if (length == 1){
               System.out.print(al.get(num1)); 
            }
            else if (length == 2){
                digit1 = (num1 % 10);
                digit2 = num1 / 10;
                String result = "" + digit1 + digit2;
                num19 = Integer.valueOf(result);
            }
            al.remove(num19);

            num20 = gen.nextInt(al.size());
            length = String.valueOf(num2).length();
            if (length == 1){
               System.out.print(al.get(num1)); 
            }
            else if (length == 2){
                digit1 = (num1 % 10);
                digit2 = num1 / 10;
                String result = "" + digit1 + digit2;
                num20 = Integer.valueOf(result);
            }
            al.remove(num20);

            num21 = gen.nextInt(al.size());
            length = String.valueOf(num2).length();
            if (length == 1){
               System.out.print(al.get(num1)); 
            }
            else if (length == 2){
                digit1 = (num1 % 10);
                digit2 = num1 / 10;
                String result = "" + digit1 + digit2;
                num21 = Integer.valueOf(result);
            }
            al.remove(num21);

            num22 = gen.nextInt(al.size());
            length = String.valueOf(num2).length();
            if (length == 1){
               System.out.print(al.get(num1)); 
            }
            else if (length == 2){
                digit1 = (num1 % 10);
                digit2 = num1 / 10;
                String result = "" + digit1 + digit2;
                num22 = Integer.valueOf(result);
            }
            al.remove(num22);

            num23 = gen.nextInt(al.size());
            length = String.valueOf(num2).length();
            if (length == 1){
               System.out.print(al.get(num1)); 
            }
            else if (length == 2){
                digit1 = (num1 % 10);
                digit2 = num1 / 10;
                String result = "" + digit1 + digit2;
                num23 = Integer.valueOf(result);
            }
            al.remove(num23);

            num24 = gen.nextInt(al.size());
            length = String.valueOf(num2).length();
            if (length == 1){
               System.out.print(al.get(num1)); 
            }
            else if (length == 2){
                digit1 = (num1 % 10);
                digit2 = num1 / 10;
                String result = "" + digit1 + digit2;
                num24 = Integer.valueOf(result);
            }
            al.remove(num24);

            num25 = gen.nextInt(al.size());
            length = String.valueOf(num2).length();
            if (length == 1){
               System.out.print(al.get(num1)); 
            }
            else if (length == 2){
                digit1 = (num1 % 10);
                digit2 = num1 / 10;
                String result = "" + digit1 + digit2;
                num25 = Integer.valueOf(result);
            }
            al.remove(num25);

            num26 = gen.nextInt(al.size());
            length = String.valueOf(num2).length();
            if (length == 1){
               System.out.print(al.get(num1)); 
            }
            else if (length == 2){
                digit1 = (num1 % 10);
                digit2 = num1 / 10;
                String result = "" + digit1 + digit2;
                num26 = Integer.valueOf(result);
            }
            al.remove(num26);

            msg = msg.toLowerCase(); 




            ArrayList<Character> bl = new ArrayList<Character> ();
            for (int i = 0; i <=26; i++){
            bl.add((char)i);
            }

            String newmsg = msg.replaceAll("a", String.valueOf((int) num1));
            bl.remove(num1);
            newmsg = newmsg.replaceAll("b", String.valueOf((int) num2));
            bl.remove(num2);
            newmsg = newmsg.replaceAll("c", String.valueOf((int) num3));
            bl.remove(num3);
            newmsg = newmsg.replaceAll("d", String.valueOf((int) num4));
            bl.remove(num4);
            newmsg = newmsg.replaceAll("e", String.valueOf((int) num5));
            bl.remove(num5);
            newmsg = newmsg.replaceAll("f", String.valueOf((int) num6));
            bl.remove(num6);
            newmsg = newmsg.replaceAll("g", String.valueOf((int) num7));
            bl.remove(num7);
            newmsg = newmsg.replaceAll("h", String.valueOf((int) num8));
            bl.remove(num8);
            newmsg = newmsg.replaceAll("i", String.valueOf((int) num9));
            bl.remove(num9);
            newmsg = newmsg.replaceAll("j", String.valueOf((int) num10));
            bl.remove(num10);
            newmsg = newmsg.replaceAll("k", String.valueOf((int) num11));
            bl.remove(num11);
            newmsg = newmsg.replaceAll("l", String.valueOf((int) num12));
            bl.remove(num12);
            newmsg = newmsg.replaceAll("m", String.valueOf((int) num13));
            bl.remove(num13);
            newmsg = newmsg.replaceAll("n", String.valueOf((int) num14));
            bl.remove(num14);
            newmsg = newmsg.replaceAll("o", String.valueOf((int) num15));
            bl.remove(num15);
            newmsg = newmsg.replaceAll("p", String.valueOf((int) num16));
            bl.remove(num16);
            newmsg = newmsg.replaceAll("q", String.valueOf((int) num17));
            bl.remove(num17);
            newmsg = newmsg.replaceAll("r", String.valueOf((int) num18));
            bl.remove(num18);
            newmsg = newmsg.replaceAll("s", String.valueOf((int) num19));
            bl.remove(num19);
            newmsg = newmsg.replaceAll("t", String.valueOf((int) num20));
            bl.remove(num20);
            newmsg = newmsg.replaceAll("u", String.valueOf((int) num21));
            bl.remove(num21);
            newmsg = newmsg.replaceAll("v", String.valueOf((int) num22));
            bl.remove(num22);
            newmsg = newmsg.replaceAll("w", String.valueOf((int) num23));
            bl.remove(num23);
            newmsg = newmsg.replaceAll("x", String.valueOf((int) num24));
            bl.remove(num24);
            newmsg = newmsg.replaceAll("y", String.valueOf((int) num25));
            bl.remove(num25);
            newmsg = newmsg.replaceAll("z", String.valueOf((int) num26));
            bl.remove(num26);


            System.out.println();
            System.out.println();
            System.out.println();
            System.out.println();



            System.out.println(newmsg);

            System.out.println();
            System.out.println();
            System.out.println();
            System.out.println();

            String newmsg1 = newmsg.replaceAll(String.valueOf((int) num1),"a" );
            newmsg1= newmsg1.replaceAll(String.valueOf((int) num2),"b" );
            newmsg1 = newmsg1.replaceAll(String.valueOf((int) num3),"c" );
            newmsg1 = newmsg1.replaceAll(String.valueOf((int) num4),"d" );
            newmsg1 = newmsg1.replaceAll(String.valueOf((int) num5),"e" );
            newmsg1 = newmsg1.replaceAll(String.valueOf((int) num6),"f" );
            newmsg1 = newmsg1.replaceAll(String.valueOf((int) num7),"g" );
            newmsg1 = newmsg1.replaceAll(String.valueOf((int) num8),"h" );
            newmsg1 = newmsg1.replaceAll(String.valueOf((int) num9),"i" );
            newmsg1 = newmsg1.replaceAll(String.valueOf((int) num10),"j" );
            newmsg1 = newmsg1.replaceAll(String.valueOf((int) num11),"k" );
            newmsg1 = newmsg1.replaceAll(String.valueOf((int) num12),"l" );
            newmsg1 = newmsg1.replaceAll(String.valueOf((int) num13),"m" );
            newmsg1 = newmsg1.replaceAll(String.valueOf((int) num14),"n" );
            newmsg1 = newmsg1.replaceAll(String.valueOf((int) num15),"o" );
            newmsg1 = newmsg1.replaceAll(String.valueOf((int) num16),"p" );
            newmsg1 = newmsg1.replaceAll(String.valueOf((int) num17),"q" );
            newmsg1 = newmsg1.replaceAll(String.valueOf((int) num18),"r" );
            newmsg1 = newmsg1.replaceAll(String.valueOf((int) num19),"s" );
            newmsg1 = newmsg1.replaceAll(String.valueOf((int) num20),"t" );
            newmsg1 = newmsg1.replaceAll(String.valueOf((int) num21),"u" );
            newmsg1 = newmsg1.replaceAll(String.valueOf((int) num22),"v" );
            newmsg1 = newmsg1.replaceAll(String.valueOf((int) num23),"w" );
            newmsg1 = newmsg1.replaceAll(String.valueOf((int) num24),"x" );
            newmsg1 = newmsg1.replaceAll(String.valueOf((int) num25),"y" );
            newmsg1 = newmsg1.replaceAll(String.valueOf((int) num26),"z" );












            System.out.println(newmsg1);


    }
}









How would I now go about changing replacing the string characters with those `from the` randomly generated alphabet.


import java.util.*;


class alphaRandom {


    public static void main(String[] args) {


    ArrayList<Character> al = new ArrayList<Character>();

    Random gen = new Random();

    int num;


    for(int i = 65; i <= 90; i++) {

        al.add((char)i);

    }


    while(al.size() > 0) {

        num = gen.nextInt(al.size());

        System.out.print(al.get(num));

        al.remove(num);

    }

 }

}
  • You should start wrapping code which you reusing in methods. `int num1, num2, num3, num4, num5,num6,num7, ...` and start using arrays (this will allow you to put some of your repeating code in loops) – Pshemo Jan 14 '16 at 21:51

1 Answers1

0

One of ways could be

  • creating collection (List) with all a-z characters
  • shuffle this list (to create something like c, k, ..., n) - Collection.shuffle could be useful here.
  • create mapping between original alphabet and shuffled characters like a->c b->k ... z->n

then

  • create empty char[] array with same length as string you want to encode
  • iterate over each character in original string
  • use mapping created earlier and put in new (empty) array replacement of current character
  • after that you can either print content of that new char array, or create new string based on it.

You already seems to achieve what was described in first two points with

ArrayList<Character> al = new ArrayList<Character> ();
//...
for (int i = 65; i <=90; i++){
    al.add((char)i);
}

BTW you could rewrite your loop it in more readable way like:

for (char ch = 'a'; ch<='z'; ch++){
    al.add(ch);
}

Remember to avoid magic numbers (more info: What is a magic number, and why is it bad?)

Community
  • 1
  • 1
Pshemo
  • 122,468
  • 25
  • 185
  • 269
  • As someone who's relatively inexperienced in java, attempting to implement the above code in my program has been nothing short of disastrous. Sorry if this seems demanding, but would you mind writing out some of the main aspects? – Dan Stevens Jan 14 '16 at 22:30
  • I am afraid that I can't help you much more since most of us learns best from mistakes we made. So it is better for you if you try to code each of these steps first. If you will have problem with one of these steps me about it and show your attempt. I will try to help you a little. – Pshemo Jan 14 '16 at 22:34