0
我想生成一个范围内的数字。例如1到10,不要重复那些已经生成的。生成一个数字排除一些android按钮点击
int[] ex = {};
Random rnd = new Random();
我的点击按钮生成数字:
public void onClick(View v) {
String f = from.getText().toString();
int ff = Integer.parseInt(f);
String t = to.getText().toString();
int tt = Integer.parseInt(t);
int val = getRandomWithExclusion(ff, tt, ex);
String item = Integer.toString(val);
Toast.makeText(MainActivity.this, item, Toast.LENGTH_SHORT).show();
ex = add(ex, val);
Log.d("this is my array", "arr: " + Arrays.toString(ex));
}
添加可生成的号码添加到EX []功能:
public static int[] add(int[] initialArray , int newValue) {
int[] newArray = new int[initialArray.length + 1];
System.arraycopy(initialArray, 0, newArray, 0, initialArray.length);
newArray[newArray.length - 1] = newValue;
return newArray;
}
的主要活动
和不工作的功能(它重复数字,并在10次尝试后(1到10的范围)它显示了一个致命的例外:
public int getRandomWithExclusion(int start, int end, int... exclude){
int rangeLength = end - start - exclude.length;
int randomInt = rnd.nextInt(rangeLength) + start;
for (int anExclude : exclude) {
if (anExclude > randomInt) {
return randomInt;
}
randomInt++;
}
return randomInt;
}
为什么它重复号码?为什么10次后的按钮点击(范围为1〜10),它显示了一个异常:
java.lang.IllegalArgumentException异常:n必须是正
谢谢你的回答!例如,如果用户想要生成一个1到500之间的数字,在这个解决方案中,我需要做一个1到500的数组添加数组?它不会让应用程序崩溃或变慢吗? –
如果500(甚至5000)'String's会减慢你的应用程序,我会感到非常惊讶。当然,如果你使用了足够多的应用程序,你可能会崩溃你的应用程序,但是我怀疑任何合理的数字都会让你失望。 –
我刚刚尝试了五百万个'String's,它花了1.5秒钟来生成列表,另外1.5秒来洗牌。五百个字符串需要0.5毫秒的时间才能生成。 –