我得到这个计算器的错误,我完全理解,但问题是我不是处理大数据,因此,如何能产生这个错误?堆栈= java.lang.StackOverflowError的:堆栈大小8MB
我有一个活性,的FrameLayout,片段,3个选项。
在片段中,当您点击其中一个选项时,它会重新创建片段并放入随机数,MAX为15
,所以它不那么大,当用户点击导致这种溢出的选项。
这是生成代码,有关“增强”的任何想法吗?我不知道这个代码对于momery来说是不是一个坏习惯。
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);
}
...有一个机会,新的随机()。nextInt()将产生永生相同数量的...只是建立你需要整数的列表,将它洗http://ideone.com/ XJRRba – Selvin
从代码中,我可以看到它是一个替代方法,用于在无重复的范围内生成随机数,对吧?请记住,这种方法(生成随机数)被称为每个片段的重新创建,所以每次被调用时,只会产生一个随机数。 – Jaeger
但在这里,您只需立即生成所有数字序列,然后选择下一个,就可以始终保存序列 – Selvin