已修复:
我删除了 while 循环并添加了
if (num.contains(count) == true) {
freq = Collections.frequency(num, count);
for (int k = 0; k < freq; k++) {
sb.append(temp);
}
}
我正在尝试向单词添加随机(0-8 之间)额外的字母副本。例如... does 可以变成 dddooees 或 doeess。
我的函数有时可以工作,但总是因索引越界错误而崩溃。
我假设我需要在某个时候检查 ArrayList 是否有 NULL 值。我尝试用 和 if 包装 while 语句来检查它,但没有任何改进。有什么建议吗?
private static String addLetters(String word) {
StringBuilder sb = new StringBuilder(word.length());
String[] apart = word.split("");
int rand = (int)(Math.random() * 8);
int ran, goUp;
int count = 0;
List<Integer> num = new ArrayList<>();
for (int i = 0; i < rand; i++) {
ran = (int)(Math.random() * word.length());
num.add(ran);
}
Collections.sort(num);
for (int temp : num) {
System.out.println(temp);
}
for (String temp: apart) {
goUp = count;
sb.append(temp);
System.out.printf("String so far: %s\n", sb.toString());
System.out.printf("OUTSIDE: count: %d, goUp: %d\n", count, goUp);
/*
Removed the while loop and added in the above code using collections, works as intended now.
*/
while (count == num.get(goUp)) {
System.out.printf("INSIDE: count: %d, goUp: %d\n", count, num.get(goUp));
sb.append(temp);
System.out.printf("String ADD extra: %s\n", sb.toString());
goUp++;
}
count++;
}
return sb.toString();
}
最佳答案
你的循环是在单词输入(大小)上,并且你在num(rand部分)上执行num.get(goUp)
如果单词输入大小大于rand大小,你会遇到这个错误(第 41 行):
Exception in thread "main" java.lang.IndexOutOfBoundsException: Index: 2, Size: 2
at java.util.ArrayList.rangeCheck(ArrayList.java:638)
at java.util.ArrayList.get(ArrayList.java:414)
at com.sgr.games.Stack.addLetters(Stack.java:41)
at com.sgr.games.Stack.main(Stack.java:10)
L39 System.out.printf("OUTSIDE: count: %d, goUp: %d\n", count, goUp);
L40
L41 while (count == num.get(goUp)) {
L42 System.out.printf("INSIDE: count: %d, goUp: %d\n", count, num.get(goUp));
关于java - 如何修复索引越界错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42181382/