0

I can randomize my strings that I set to each button in android but there are duplicates of the same letters. How do I do it without any duplicate letters?

    Random random = new Random();
    String[] letters = {"G","O","K","U","H","A","N","L","Z","M"};

    c1r1 = (Button) findViewById(R.id.btn1);
    c2r1 = (Button) findViewById(R.id.btn2);
    c3r1 = (Button) findViewById(R.id.btn3);
    c4r1 = (Button) findViewById(R.id.btn4);
    c5r1 = (Button) findViewById(R.id.btn5);
    c1r2 = (Button) findViewById(R.id.btn6);
    c2r2 = (Button) findViewById(R.id.btn7);
    c3r2 = (Button) findViewById(R.id.btn8);
    c4r2 = (Button) findViewById(R.id.btn9);
    c5r2 = (Button) findViewById(R.id.btn10);
    first = (Button) findViewById(R.id.first);
    second = (Button) findViewById(R.id.second);
    third = (Button) findViewById(R.id.third);
    fourth = (Button) findViewById(R.id.fourth);

    c1r1.setText("" + letters[random.nextInt(letters.length)]);
    c2r1.setText("" + letters[random.nextInt(letters.length)]);
    c3r1.setText("" + letters[random.nextInt(letters.length)]);
    c4r1.setText("" + letters[random.nextInt(letters.length)]);
    c5r1.setText("" + letters[random.nextInt(letters.length)]);
    c1r2.setText("" + letters[random.nextInt(letters.length)]);
    c2r2.setText("" + letters[random.nextInt(letters.length)]);
    c3r2.setText("" + letters[random.nextInt(letters.length)]);
    c4r2.setText("" + letters[random.nextInt(letters.length)]);
    c5r2.setText("" + letters[random.nextInt(letters.length)]);

3 Answers 3

1
private String[] letters = {"G","O","K","U","H","A","N","L","Z","M"};
private List<String> list = new ArrayList<String>(Arrays.asList(letters ));

private String getUniqueRandomString() {
      int i = ThreadLocalRandom.current().nextInt(0, letters.size() + 1);
      String s = letters.get(i);
      letters.remove(i);
      return s;
}
private void init() { 

    c1r1 = (Button) findViewById(R.id.btn1);
    c2r1 = (Button) findViewById(R.id.btn2);
    c3r1 = (Button) findViewById(R.id.btn3);
    c4r1 = (Button) findViewById(R.id.btn4);
    c5r1 = (Button) findViewById(R.id.btn5);
    c1r2 = (Button) findViewById(R.id.btn6);
    c2r2 = (Button) findViewById(R.id.btn7);
    c3r2 = (Button) findViewById(R.id.btn8);
    c4r2 = (Button) findViewById(R.id.btn9);
    c5r2 = (Button) findViewById(R.id.btn10);
    first = (Button) findViewById(R.id.first);
    second = (Button) findViewById(R.id.second);
    third = (Button) findViewById(R.id.third);
    fourth = (Button) findViewById(R.id.fourth);

    c1r1.setText(getUniqueRandomString());
    c2r1.setText(getUniqueRandomString());

// ... 

}
Sign up to request clarification or add additional context in comments.

Comments

1

You can just use Collections.shuffle(List list)

Comments

0
public ArrayList<String> arrayList;

@Override
protected void onCreate (Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    arrayList=new ArrayList<String>();

    String[] letters = {"G","O","K","U","H","A","N","L","Z","M"};
    for (String s:letters)
      arrayList.add(s);



    c1r1.setText("" + getRandom());
    c2r1.setText("" + getRandom());
    ...
    ...

}


public String getRandom(){

    String randomString=arrayList.get(random.nextInt(arrayList.size()));
    arrayList.remove(randomString);
    return randomString;

}

2 Comments

erm, wait. You used my solution and cleaned it up? :)
Thank you both @EmanuelSeibold and Abhishek Aryan. It perfectly works :)

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.