【问题标题】:How do I randomize an array without any repeating/duplicate strings?如何在没有任何重复/重复字符串的情况下随机化数组?
【发布时间】:2017-09-13 05:27:56
【问题描述】:

我可以随机化我为 android 中的每个按钮设置的字符串,但有相同字母的重复项。没有重复字母怎么办?

    Random random = new Random();
    String[] letters = {"G","O","K","U","H","A","N","L","Z","M"};

    c1r1 = (Button) findViewById(R.id.btn1);
    c2r1 = (Button) findViewById(R.id.btn2);
    c3r1 = (Button) findViewById(R.id.btn3);
    c4r1 = (Button) findViewById(R.id.btn4);
    c5r1 = (Button) findViewById(R.id.btn5);
    c1r2 = (Button) findViewById(R.id.btn6);
    c2r2 = (Button) findViewById(R.id.btn7);
    c3r2 = (Button) findViewById(R.id.btn8);
    c4r2 = (Button) findViewById(R.id.btn9);
    c5r2 = (Button) findViewById(R.id.btn10);
    first = (Button) findViewById(R.id.first);
    second = (Button) findViewById(R.id.second);
    third = (Button) findViewById(R.id.third);
    fourth = (Button) findViewById(R.id.fourth);

    c1r1.setText("" + letters[random.nextInt(letters.length)]);
    c2r1.setText("" + letters[random.nextInt(letters.length)]);
    c3r1.setText("" + letters[random.nextInt(letters.length)]);
    c4r1.setText("" + letters[random.nextInt(letters.length)]);
    c5r1.setText("" + letters[random.nextInt(letters.length)]);
    c1r2.setText("" + letters[random.nextInt(letters.length)]);
    c2r2.setText("" + letters[random.nextInt(letters.length)]);
    c3r2.setText("" + letters[random.nextInt(letters.length)]);
    c4r2.setText("" + letters[random.nextInt(letters.length)]);
    c5r2.setText("" + letters[random.nextInt(letters.length)]);

【问题讨论】:

    标签: java android arrays random


    【解决方案1】:

    你可以使用 Collections.shuffle(列表列表)

    【讨论】:

      【解决方案2】:
      public ArrayList<String> arrayList;
      
      @Override
      protected void onCreate (Bundle savedInstanceState) {
          super.onCreate(savedInstanceState);
          arrayList=new ArrayList<String>();
      
          String[] letters = {"G","O","K","U","H","A","N","L","Z","M"};
          for (String s:letters)
            arrayList.add(s);
      
      
      
          c1r1.setText("" + getRandom());
          c2r1.setText("" + getRandom());
          ...
          ...
      
      }
      
      
      public String getRandom(){
      
          String randomString=arrayList.get(random.nextInt(arrayList.size()));
          arrayList.remove(randomString);
          return randomString;
      
      }
      

      【讨论】:

      • 呃,等等。您使用了我的解决方案并进行了清理? :)
      • 感谢@EmanuelSeibold 和Abhishek Aryan。它完美地工作:)
      【解决方案3】:
      private String[] letters = {"G","O","K","U","H","A","N","L","Z","M"};
      private List<String> list = new ArrayList<String>(Arrays.asList(letters ));
      
      private String getUniqueRandomString() {
            int i = ThreadLocalRandom.current().nextInt(0, letters.size() + 1);
            String s = letters.get(i);
            letters.remove(i);
            return s;
      }
      private void init() { 
      
          c1r1 = (Button) findViewById(R.id.btn1);
          c2r1 = (Button) findViewById(R.id.btn2);
          c3r1 = (Button) findViewById(R.id.btn3);
          c4r1 = (Button) findViewById(R.id.btn4);
          c5r1 = (Button) findViewById(R.id.btn5);
          c1r2 = (Button) findViewById(R.id.btn6);
          c2r2 = (Button) findViewById(R.id.btn7);
          c3r2 = (Button) findViewById(R.id.btn8);
          c4r2 = (Button) findViewById(R.id.btn9);
          c5r2 = (Button) findViewById(R.id.btn10);
          first = (Button) findViewById(R.id.first);
          second = (Button) findViewById(R.id.second);
          third = (Button) findViewById(R.id.third);
          fourth = (Button) findViewById(R.id.fourth);
      
          c1r1.setText(getUniqueRandomString());
          c2r1.setText(getUniqueRandomString());
      
      // ... 
      
      }
      

      【讨论】:

        猜你喜欢
        • 2019-10-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-10-23
        • 2016-12-29
        • 1970-01-01
        • 2017-02-25
        相关资源
        最近更新 更多