【问题标题】:How to make random string replace textview?如何使随机字符串替换文本视图?
【发布时间】:2015-09-28 10:00:00
【问题描述】:

我有一个包含 3 个编辑文本和一个按钮的活动。 我有第二个活动,有 2 个文本视图。

当点击按钮时,我想要来自 activity1 的两个随机 edittexts 值来替换 activity2 上 textviews 上的文本。

我设法做到了,但不是随机的。我怎样才能让它随机?

这是第一个活动。

final EditText et  = (EditText) findViewById(R.id.editText);
        final EditText et1 = (EditText) findViewById(R.id.editText2);
        final EditText et2 = (EditText) findViewById(R.id.editText3);
        Button btn = (Button) findViewById(R.id.button);

        btn.setOnClickListener(new View.OnClickListener() {

            public void onClick (View v){
                Intent i = new Intent(MainActivity.this, postavke.class);
                i.putExtra("prvi", et.getText().toString());
                i.putExtra("drugi", et1.getText().toString());
                i.putExtra("treci", et2.getText().toString());
                startActivity(i);
            }
        });
    }

这是第二个活动。

   TextView tv = (TextView) findViewById(R.id.asdf);
    tv.setText(getIntent().getExtras().getString("prvi"));

TextView dr = (TextView) findViewById(R.id.asdg);
dr.setText(getIntent().getExtras().getString("drugi"));

【问题讨论】:

  • 你说的随机是什么意思?
  • 我认为他有 2 个插槽,3 个值,想使用 3 个值中的 2 个,随机选择
  • @Tomo TextView 可以包含相同的值吗?

标签: java android string random android-studio


【解决方案1】:

在你的第二个活动中:

String[] texts = new String[]{
    getIntent().getExtras().getString("prvi"),
    getIntent().getExtras().getString("drugi"),
    getIntent().getExtras().getString("treci"),
};

TextView tv = (TextView) findViewById(R.id.asdf);
TextView dr = (TextView) findViewById(R.id.asdg);

Random random = new Random();
tv.setText(texts[random.nextInt(3)]);
dr.setText(texts[random.nextInt(3)]);

或者,对于唯一值:

第一个活动:

final EditText et  = (EditText) findViewById(R.id.editText);
    final EditText et1 = (EditText) findViewById(R.id.editText2);
    final EditText et2 = (EditText) findViewById(R.id.editText3);
    Button btn = (Button) findViewById(R.id.button);

    btn.setOnClickListener(new View.OnClickListener() {

        public void onClick (View v){

            ArrayList<String> texts = new ArrayList<>();
            texts.add(et.getText().toString());
            texts.add(et1.getText().toString());
            texts.add(et2.getText().toString());

            Intent i = new Intent(MainActivity.this, postavke.class);
            i.putExtra("texts", texts);
            startActivity(i);
        }
    });
}

第二个活动:

ArrayList<String> texts = getIntent().getExtras().getStringArrayList("texts");

TextView tv = (TextView) findViewById(R.id.asdf);
TextView dr = (TextView) findViewById(R.id.asdg);

Collections.shuffle(texts);
tv.setText(texts.get(0));
dr.setText(texts.get(1));

【讨论】:

  • 随机数有可能产生相同的数字。最好只创建一个随机数并从数组中删除它的索引,如下所示: texts.remove[random.nextInt(3)]];然后使用其他文本数组元素。
  • 这应该可以,但有 33% 的机会字符串相同
  • 刚刚发布了最简单的答案!没有提到希望它们是独一无二的
  • @JoeFrostick 感谢代码,昨天还不错,但今天我意识到 Tim Castelijns 是对的,我确实需要它们是独一无二的。您能否编辑代码以使一个字符串不会同时在屏幕上显示两次?很抱歉我之前没有关注。
  • 我已经更新了答案。新答案还显示了如何暂时发送数组列表,从而减少需要记住的参数值的数量
【解决方案2】:

将您之前 Activity 中的字符串(例如:getIntent().getExtras().getString("prvi"))添加到 ArrayList

那就简单的Collection.shuffle(your_list);

ArrayList 获取项目并将其设置为您的TextViews

【讨论】:

    【解决方案3】:
    1. 声明一个包含值的数组:

    public String[] randomAnswers = new String[3]; //3 because you said you have 3 random strings

    1. 在您的 onCreate() 中将值添加到数组中: randomAnswers[0] = getIntent().getExtras().getString("prvi"); randomAnswers[1] = getIntent().getExtras().getString("drugi"); randomAnswers[2] = getIntent().getExtras().getString("treci");

    2. 选择两个随机值:

    private static final Random RANDOM = new Random(); //in java.util package

    onCreate 内部:

    final int randomInt1 = RANDOM.nextInt(3); //nextInt(int) goes from 0 to int-1, considering arrays start at index=0 we want to get a random number from: 0, 1, 2
    int randomInt2;
    do {
            randomInt2 = RANDOM.nextInt(3);
    } while (randomInt1 == randomInt2);
    final String firstRandomString = values[randomInt1];
    final String secondRandomString = values[randomInt2];`
    

    【讨论】:

      【解决方案4】:

      您可以使用类似@Joe Frostick answere 的编辑形式:

      String[] texts = new String[]{
      getIntent().getExtras().getString("prvi"),
      getIntent().getExtras().getString("drugi"),
      getIntent().getExtras().getString("treci"),
                                   };
      
      TextView tv = (TextView) findViewById(R.id.asdf);
      TextView dr = (TextView) findViewById(R.id.asdg);
      
      Random random = new Random();
      texts.remove(random.nextInt(3));
      tv.setText(texts[0]);
      dr.setText(texts[1]); 
      

      【讨论】:

        【解决方案5】:

        感谢大家的帮助,真没想到没多久就有这么多答案。你是最棒的!

        【讨论】:

        • 这就是 StackOverflow 的重点。我们所有人也会在某一天或另一天发布问题。尝试回答问题是学习新功能的好方法;)祝你有个愉快的一天
        猜你喜欢
        • 2019-08-14
        • 1970-01-01
        • 1970-01-01
        • 2017-05-20
        • 1970-01-01
        • 1970-01-01
        • 2017-03-08
        • 1970-01-01
        • 2017-04-01
        相关资源
        最近更新 更多