【问题标题】:Randomizing strings without duplication随机化字符串而不重复
【发布时间】:2014-12-30 09:56:00
【问题描述】:

我有包含 5 种不同说法的字符串,我正在尝试将它们随机化,没有任何重复,并在它们都被选中后重复这句话。

到目前为止我有

final String[] mySays = { "x", "y", "z", "a", "b",}

@覆盖 公共无效 onClick(查看 v){ //将数字更改为“说”的数字 int aNumber = (int) (Math.random() * 5); textOne.setText(mySays[aNumber]);

我可以添加什么?

非常感谢任何帮助。

编辑:

import android.support.v7.app.ActionBarActivity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;


public class MainActivity extends ActionBarActivity {


@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    final List<String> myStrings = new ArrayList<String>(){{
        add("a");
        add("b");
        add("c");
        add("d");
        add("e");
    }};

   List<String> dupeList = new ArrayList<String>(){{addAll(myStrings);}};
    Random r = new Random();

    public String pick(){
            String retval="";
    int pos;
    switch (dupeList.size()){
        case 1: 
            retval = dupeList.get(0);
            dupeList.clear();
            dupeList.addAll(myStrings);
            return retval;
        default:
            pos = r.nextInt(dupeList.size());
            retval = dupeList.get(pos);
            dupeList.remove(pos);
            return retval;
    }
}

【问题讨论】:

    标签: string random duplicates


    【解决方案1】:

    这是一种使用 ArayList 模拟您想做的“摘帽”的方法。 ArrayList 很方便,因为您可以轻松删除元素,然后从列表中剩余的内容中随机选择。

    List<String> myStrings = new ArrayList<String>() {{
        add("A");
        add("B");
        add("C");
        add("D");
        add("E");
    }};
    List<String> dupeList = new ArrayList<String>() {{addAll(myStrings);}};
    Random r = new Random();
    
    public String pick() {
        String retval = "";
        int pos;
        switch (dupeList.size()) {
            case 1:
                retval = dupeList.get(0);
                dupeList.clear();
                dupeList.addAll(myStrings);
                return retval;
            default:
                pos = r.nextInt(dupeList.size());
                retval = dupeList.get(pos);
                dupeList.remove(pos);
                return retval;
        }
    }
    

    所以一旦你定义了这个pick()方法,你每次都可以调用它来设置文本。

     `text1.setText(pick());`
    

    【讨论】:

    • 当我进入 dupeList 时出现红线。我正在使用安卓工作室顺便说一句。也许这就是为什么?
    • 抱歉,不清楚您在哪里得到错误。您是否像上面的示例一样先声明它?例如列表 dupeList = new . . .
    • 你导入 List 和 ArrayList 了吗?与导入 java.util.ArrayList 一样;导入 java.util.List;在文件顶部的 package 指令正下方?
    • 我做到了。其上市。错误是“无法解析符号'dupeList'
    • 这很奇怪。我在我的机器上在 Android 中运行了这段代码,它找到了。如果它的说法无法解析符号 dupeList,则意味着由于某种原因您的变量声明未被识别通常这是某种拼写或大写错误,例如在声明 dupelist 时尝试使用 dupeList。
    猜你喜欢
    • 2015-02-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-13
    • 1970-01-01
    • 2012-07-27
    • 2019-04-01
    相关资源
    最近更新 更多