Pregunta

i have a problem in randomizing values. what i want to do is :

i have 4 editFields and when i type in all fields and click the button "shuffle players" it should show all the players from editFields down in viewText below randomly and non-repeated.

this my code for onlick function:

 public void RandomPlayers(View v1){


    EditText text1 = (EditText)findViewById(R.id.editText1);
    TextView View1 = (TextView)findViewById(R.id.player1);
    EditText text2 = (EditText)findViewById(R.id.editText2);
    TextView View2 = (TextView)findViewById(R.id.player2);
    EditText text3 = (EditText)findViewById(R.id.editText3);
    TextView View3 = (TextView)findViewById(R.id.player3);
    EditText text4 = (EditText)findViewById(R.id.editText4);
    TextView View4 = (TextView)findViewById(R.id.player4);

    String value1 = text1.getText().toString();
    String value2 = text2.getText().toString();
    String value3 = text3.getText().toString();
    String value4 = text4.getText().toString();

    String[] players = {value1, value2, value3, value4};

    int index = new Random().nextInt(players.length);
    String random = (players[index]);
    View1.setText(random);
    View2.setText(random);
    View3.setText(random);
    View4.setText(random);

}

but the problem i keep getting the same random name for all Textviews

and here is an image showing the logic error: ![enter image description here][1]

please help me and show me my mistakes thanks

¿Fue útil?

Solución

Try this solution works like a charm

public void RandomPlayers(View v1) {

        List<String> values = new ArrayList<String>();

        EditText text1 = (EditText) findViewById(R.id.editText1);
        TextView View1 = (TextView) findViewById(R.id.player1);
        EditText text2 = (EditText) findViewById(R.id.editText2);
        TextView View2 = (TextView) findViewById(R.id.player2);
        EditText text3 = (EditText) findViewById(R.id.editText3);
        TextView View3 = (TextView) findViewById(R.id.player3);
        EditText text4 = (EditText) findViewById(R.id.editText4);
        TextView View4 = (TextView) findViewById(R.id.player4);

        values.add(text1.getText().toString());
        values.add(text2.getText().toString());
        values.add(text3.getText().toString());
        values.add(text4.getText().toString());

        Collections.shuffle(values);

        View1.setText(values.get(0));
        View2.setText(values.get(1));
        View3.setText(values.get(2));
        View4.setText(values.get(3));

    }

Otros consejos

You only generate one random number, so the index is always the same and you only get one name in all your TextViews. You could shuffle your array like explained here and get all the names from it and bind them to your TextViews.

You are setting the same random values for all your views meaning that you pick the random once and then assign it you should do something similar but before each assignment call random again

Change

int index = new Random().nextInt(players.length);
String random = (players[index]);
View1.setText(random);
View2.setText(random);
View3.setText(random);
View4.setText(random);

to

int index = new Random().nextInt(players.length);
String random = (players[index]);
View1.setText(random);

index = new Random().nextInt(players.length);
random = (players[index]);
View2.setText(random);

index = new Random().nextInt(players.length);
random = (players[index]);
View3.setText(random);

index = new Random().nextInt(players.length);
random = (players[index]);
View4.setText(random);

This way you get different numbers but there is no guarantee that there will be no repitition

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top