隐藏/删除随机字符串?

时间:2011-07-02 23:10:52

标签: android string

我在stackoverflow上使用了这个问题来创建一个没有问题的随机字符串:D (Show random string

有时会出现相同的字符串,这很烦人。

所以我希望字符串每个会话只显示一次,我已经有一个Quit Session按钮来杀死这个类。所以我可以说我有1-3的数字。数字2首先显示,然后是1,因为只剩下一个数字,只能显示3个。

我的按钮代码为“下一个按钮”。目前它杀死了课程并重新开始!如何更改它以便只显示一个新字符串?

private void onButtonClick(Button clickedButton) {
    Intent startIntent = null;
    if (clickedButton.getId() == R.id.quit) {
        startIntent = new Intent(this, mainmenu.class);
        finish();
    }

    else if (clickedButton.getId() == R.id.next) {
         startIntent = new Intent(this, play.class);
         startActivity(startIntent); 
         finish(); 
    }

    if (startIntent != null) {
        startIntent.setFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
        startActivityIfNeeded(startIntent, 0);
    }
}
private void setupbutton() {        
    View.OnClickListener onClickHandler = new View.OnClickListener() {          

        public void onClick(View v) {
            onButtonClick((Button)v);               
        }
    };
    Button button = (Button)findViewById(R.id.quit);
    button.setOnClickListener(onClickHandler);

    button = (Button)findViewById(R.id.next);
    button.setOnClickListener(onClickHandler);

2 个答案:

答案 0 :(得分:0)

对索引进行随机排列,然后使用它来选择序列中的下一个字符串。

答案 1 :(得分:0)

出现相同的字符串,因为随机数生成器生成随机数!它可以连续多次生成相同的数字。

有两种可能性,名称为:

  1. 将所有字符串放入数组并随机播放。然后从索引1开始逐个取出元素:

    List strings = new ArrayList<String>(getResources().getStringArray(R.array.myArray));
    Collections.shuffle(list);
    
  2. 将所有字符串放入数组中,选择具有随机索引的字符串并删除字符串:

        Random rgenerator = new Random();
    
        ArrayList<String> strings = new ArrayList<String>(getResources().getStringArray(R.array.myArray));                 
        int index = rgenerator.nextInt(strings.size());
        String randomString =  strings.get(index);
        strings.remove(index);
    
  3. 编辑: 好的,我明白了......

    您必须记住哪些字符串尚未使用过。将字符串存储在List中并使列表保持静态,这样您就可以在创建活动play的不同实例之间保存状态:

    private static ArrayList<String> myString;
    

    然后稍微更改一下构造函数:

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.play);
        setupbutton();
    
        if (myString == null || myString.size() == 0) {
            Resources res = getResources();
            myString = new ArrayList(Arrays.asList(res.getStringArray(R.array.myArray)));
        }
    
        // get a random string
        int rand = rgenerator.nextInt(myString.size());
        String q = myString.get(rand);
    
        // remove the last used string from the list
        myString.remove(rand);
    
        TextView tv = (TextView) findViewById(R.id.text1);
        tv.setText(q);
    }