简体   繁体   English

如何进行非重复随机数组选择(android)?

[英]how to make non-repeating random array selection (android)?

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. 我有4个editFields,当我键入所有字段并单击“随机播放器”按钮时,它应该在viewText下面随机显示所有来自editFields的玩家,并且不重复。

this my code for onlick function: 这是我的onlick函数代码:

 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 但问题是我一直为所有Textviews获得相同的随机名称

and here is an image showing the logic error: ![enter image description here][1] 这是一个显示逻辑错误的图像:![在此输入图像描述] [1]

please help me and show me my mistakes thanks 请帮帮我,告诉我我的错误谢谢

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));

    }

You only generate one random number, so the index is always the same and you only get one name in all your TextViews. 您只生成一个随机数,因此索引始终相同,并且您只在所有TextView中获得一个名称。 You could shuffle your array like explained here and get all the names from it and bind them to your TextViews. 您可以按照此处的说明对数组进行随机播放并从中获取所有名称并将它们绑定到TextView。

您为所有视图设置相同的随机值意味着您选择随机一次然后分配它您应该做类似的事情但在每次分配之前再次调用随机

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 这样你得到不同的数字,但不能保证没有重复

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM