【发布时间】:2017-04-01 08:11:54
【问题描述】:
我收到了这个 StackOverFlow 错误,我完全理解,但问题是我没有处理大数据,那么这个错误是如何产生的呢?
我有一个活动,Framelayout,一个片段,3 个选项。
在片段中,当您单击其中一个选项时,它会重新创建片段并放入随机数,MAX 是15,所以它不是那么大,当用户点击太快时会发生此错误导致此溢出的选项。
这是生成代码,关于“增强”它的任何想法?我不知道这段代码对于使用内存来说是不是一种不好的做法。
private static List<Integer> SavedNumbers;
public static void SetupSavedNumbersLIst(){
SavedNumbers = new ArrayList<>();
}
static List<Integer> range;
private static void AddDiff(int mMAX){
range = new ArrayList<>();
for(int i = 0 ; i < mMAX ; i++){
range.add(i);
}
range.removeAll(SavedNumbers);
}
private static int ReturnIfDuplic(int mMAX){
AddDiff(mMAX);
return new Random().nextInt(range.size());
}
public static int ReturnUniqueSavedNumber(int mMAX){
int Random = ReturnRandom(mMAX);
if(SavedNumbers != null && SavedNumbers.size() > 0) {
if(DoesSavedNumberExist(Random)){
return ReturnIfDuplic(mMAX);
} else {
SavedNumbers.add(Random);
return Random;
}
} else if (SavedNumbers != null && SavedNumbers.size() == 0){
SavedNumbers.add(Random);
return Random;
} else if( SavedNumbers == null){
SetupSavedNumbersLIst();
return ReturnUniqueSavedNumber(mMAX);
} else {
return 1;
}
}
private static boolean DoesSavedNumberExist(int Number){
for(int s: SavedNumbers){
if(Number == s)
return true;
}
return false;
}
private static int ReturnRandom(int mMAX){
return new Random().nextInt(mMAX);
}
【问题讨论】:
-
... new Random().nextInt() 有可能为永生生成相同的数字...只需构建您需要的整数列表并将其随机排列ideone.com/XJRRba
-
从代码中,我可以将其视为在不重复的范围内生成随机数的替代方法,对吧?请记住,这个方法(生成随机数)在每一次重新创建片段时都会调用一次,所以每次调用时,只会生成一个随机数。
-
但是这里你只是一次生成所有数字序列然后选择下一个,你可以随时保存序列
-
ideone.com/WPSwhR , 2, 3, 1, 0, 线程“主” java.lang.IndexOutOfBoundsException 中的异常:索引:4,大小:4
-
糟糕,我错了,我应该休息一下:D
标签: java android android-fragments stack-overflow