Java heap space错误:createPossibleSymbols符号集生成函数运行异常
问题根源
你遇到的Java heap space错误是死循环导致的,问题出在第二个for循环的终止条件写错了:
for (char c = 'a'; c <= (c + possibleSymbols - 10); c++)
这个条件的右侧判断用到了循环变量c本身,每轮循环c自增后,右侧的c + possibleSymbols - 10也会同步增大,条件永远成立,会不断往StringBuilder里追加字符直到耗尽堆内存。
修正方案
把循环终止条件改成和固定的目标上限比较即可,同时补充边界判断兼容异常输入:
public static StringBuilder createPossibleSymbols(int possibleSymbols) { StringBuilder symbols = new StringBuilder(); // 先追加0-9数字 for (int i = 0; i < 10; i++) { symbols.append((char) (i + '0')); } // 边界处理:输入小于等于10时直接截取对应长度的数字集 if (possibleSymbols <= 10) { return new StringBuilder(symbols.substring(0, possibleSymbols)); } // 计算需要追加的字母数量 int letterCount = possibleSymbols - 10; // 按固定次数追加字母,不会出现死循环 for (int i = 0; i < letterCount; i++) { symbols.append((char) ('a' + i)); } return symbols; }
逻辑验证
- 输入10:返回
0123456789,符合需求 - 输入16:返回
0123456789abcdef,符合16位字符集要求 - 输入小于10的数值(如6):返回前6位数字
012345,兼容边界场景
内容的提问来源于stack exchange,提问作者grl
相关产品推荐
相关产品推荐

