我是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'但有时候没有,我也不明白其中的原因。 并且,我想知道如何生成这些数字而不重复。
答案 0 :(得分:0)
您可以像这样使用Random class
final int total=25;
int otherno;
Random num =new Random();
int mo=num.nextInt(24);
otherno= total-mo;
这将生成两个没有mo
和otherno
,总和等于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;
}
}