如何生成随机数并将它们随机分配到某些按钮?

时间:2016-12-02 11:37:01

标签: java android random

我是Android编程的新手,想要在特定范围内随机生成一些数字。如果它们中的两个的总和等于某个数字,我在onCreate()onRestart中写下了以下内容,以便在每次活动开始时重新生成它们,但它并不是每个都有效时间:

//i1,i2,i3..... are initialized in the class body as integers

      do {
        i1=r.nextInt((30-1)+1)+1;
        i2=r.nextInt((30-1)+1)+1;
        i3=r.nextInt((30-1)+1)+1;
        i4=r.nextInt((30-1)+1)+1;
        i5=r.nextInt((30-1)+1)+1;
        i6=r.nextInt((30-1)+1)+1;
        i7=r.nextInt((30-1)+1)+1;
        i8=r.nextInt((30-1)+1)+1;
        i9=r.nextInt((30-1)+1)+1;
    }  while (i1+i2!=25);

    String[] str= {String.valueOf(i1),String.valueOf(i2),String.valueOf(i3),
            String.valueOf(i4),String.valueOf(i5),String.valueOf(i6),
            String.valueOf(i7),String.valueOf(i8),String.valueOf(i9)};

    btn1= (Button) findViewById(R.id.btn1);
    btn2= (Button) findViewById(R.id.btn2);
    btn3= (Button) findViewById(R.id.btn3);
    btn4= (Button) findViewById(R.id.btn4);
    btn5= (Button) findViewById(R.id.btn5);
    btn6= (Button) findViewById(R.id.btn6);
    btn7= (Button) findViewById(R.id.btn7);
    btn8= (Button) findViewById(R.id.btn8);
    btn9= (Button) findViewById(R.id.btn9);

    btn1.setOnClickListener(this);
    btn2.setOnClickListener(this);
    btn3.setOnClickListener(this);
    btn4.setOnClickListener(this);
    btn5.setOnClickListener(this);
    btn6.setOnClickListener(this);
    btn7.setOnClickListener(this);
    btn8.setOnClickListener(this);
    btn9.setOnClickListener(this);

    // this is the code which distribute the numbers randomly to the buttons:
    btn1.setText(str[random.nextInt(str.length)]);
    btn2.setText(str[random.nextInt(str.length)]);
    btn3.setText(str[random.nextInt(str.length)]);
    btn4.setText(str[random.nextInt(str.length)]);
    btn5.setText(str[random.nextInt(str.length)]);
    btn6.setText(str[random.nextInt(str.length)]);
    btn7.setText(str[random.nextInt(str.length)]);
    btn8.setText(str[random.nextInt(str.length)]);
    btn9.setText(str[random.nextInt(str.length)]);

有时真的有两个数字,其总和是' 25'但有时候没有,我也不明白其中的原因。 并且,我想知道如何生成这些数字而不重复。

2 个答案:

答案 0 :(得分:0)

您可以像这样使用Random class

  final int total=25;
  int otherno;
  Random num =new Random();
    int mo=num.nextInt(24);
  otherno= total-mo;

这将生成两个没有mootherno,总和等于25,如果你想要多个对只是把它放在for循环中,它将随机生成。我使用最后的关键字作为对于任何没有,总数不会改变。 for more info,amout random no ex

答案 1 :(得分:0)

在您的activity.xml中:获取linearLayout并将其标识为ll_main。

在你的onCreate()

       ArrayList<Integer> al_list=new ArrayList<Integer>();
          //generate random number
         ll.removeAllViews();
          for(int i=0;i<10;i++)
              {

                  int num=getRandomNumberInRange(0,10);
                  if(num!=-1){
                 al_list.add(num); 
                 Button btn=new Button(this);
                 btn.setId(num);
                 btn.setText(num+"");
                 ll_main.addView(btn);                      
                  }


              }

    private  int getRandomNumberInRange(int min, int max) {

          if (min >= max) {
        throw new IllegalArgumentException("max must be greater than min");
    }

    Random r = new Random();
int num=r.nextInt((max - min) + 1) + min;
     if(al_list.contains(num))
       {
        getRandomNumberInRange(0,10);
     return -1;
        }
      else{
      return num;
      }  
}