ArrayList Java中的IndexOutOfBoundsException
每当我尝试运行代码时,我都会收到IndexOutOfBoundsException。我已经尝试了很多方法来修复它,但是没有一个能起到作用。该方法应在每个长度等于4的字符串之前向ArrayList中添加一个新的字符串元素“**”。在这种情况下,必须在“5555”之前添加“**” 问题出在哪里ArrayList Java中的IndexOutOfBoundsException,java,arraylist,Java,Arraylist,每当我尝试运行代码时,我都会收到IndexOutOfBoundsException。我已经尝试了很多方法来修复它,但是没有一个能起到作用。该方法应在每个长度等于4的字符串之前向ArrayList中添加一个新的字符串元素“**”。在这种情况下,必须在“5555”之前添加“**” 问题出在哪里 import java.util.ArrayList; public class Main { public static ArrayList<String> markLength4(
import java.util.ArrayList;
public class Main {
public static ArrayList<String> markLength4(ArrayList<String> list) {
int sum = 0;
for ( int i = 0; i < list.size(); i++) {
if (list.get(i).length() == 4) {
list.add(list.indexOf(i), "****");
}
}
return list;
}
public static void main(String[] args) {
ArrayList<String> list = new ArrayList<>();
list.add("ddddddddddddd");
list.add("fffffffffffff");
list.add("5555fdgdfg");
list.add("5555");
list.add("5555");
System.out.println(markLength4(list));
}
}
import java.util.ArrayList;
公共班机{
公共静态ArrayList标记长度4(ArrayList列表){
整数和=0;
对于(int i=0;i
列表。索引of(i)
将返回-1
,因为i
不会出现在您的列表中。因此,在-1
位置添加元素将引发异常
如果将
list.add(list.indexOf(i),“****”
更改为list.add(i),“****”
,您将得到一个无限循环,该循环将以OutOfMemoryError
结束,因为新添加的字符串也有一个长度()
为4,因此下一次迭代中将添加另一个字符串,依此类推。i
不在您的数组列表中-它是字符串的列表,不是整数
。这意味着list.indexOf(i)==-1
根据你的描述,我想你的意思是:
list.add(i, "****");
但是您还需要增加i
,例如
list.add(i++, "****");
避免Eran提到的无限循环
当然,也可以向后迭代列表,避免无限循环/需要更改循环体中的循环变量:
for ( int i = list.size() - 1; i >= 0; i--)
{
if (list.get(i).length() == 4)
{
list.add(i, "****");
}
}
list.indexOf(i)
其中i
是一个int,因此不在列表中会抛出注释中所述的错误(索引-1)
使用以下任一选项:
list.add(“str”)
将字符串添加到列表末尾
或
list.set(i,“****”
,它将在给定索引处为新字符串设置值。在markLength4方法中,通过在for循环中添加元素,可以不断添加字符串并增加列表大小。您需要一个标志来告诉索引,然后结束循环。你可以试试那样的
public static ArrayList<String> markLength4(ArrayList<String> list) {
int i = 0;
boolean found = false;
int pos = 0;
while(i < list.size() && !found){
if (list.get(i).length() == 4) {
found = true;
pos = i;
}
i++;
}
list.add(pos, "****");
return list;
}
公共静态ArrayList标记长度4(ArrayList列表){
int i=0;
布尔值=false;
int pos=0;
而(i
列表。列表中不存在索引(i)。它将产生-1
-1在ArrayList中不可用
更换线路
列表。添加(列表索引(i),“****”
用下面的一行
列表.集合(i,“****”)
它将列表的现有内容替换为索引i中的新元素,并替换为新元素,即(****)import java.util.ArrayList;
公开课考试{
公共静态ArrayList标记长度4(ArrayList列表){
整数和=0;
对于(int i=0;i
您将以这种方式永远循环,因为向前有4个加长字符串,您将不断添加…
你可以通过从末尾循环来解决这个问题,但是你必须小心你的索引(你应该增加索引以避免这种情况)
编辑列表后,添加(i++,“****”)代码>代码应该可以正常工作
值得注意
如果要在使用i++之前添加代码>
如果要在比赛后添加,请使用++i
i
不在您的数组列表中-它是字符串的列表,而不是整数。这意味着list.indexOf(i)==-1
。你的意思是list.add(i,“****”)代码>?
import java.util.ArrayList;
public class Test {
public static ArrayList<String> markLength4(ArrayList<String> list) {
int sum = 0;
for (int i = 0; i < list.size(); i++) {
if (list.get(i).length() == 4) {
list.add(i++, "****");
}
}
return list;
}
public static void main(String[] args) {
ArrayList<String> list = new ArrayList<>();
list.add("ddddddddddddd");
list.add("fffffffffffff");
list.add("5555fdgdfg");
list.add("5555");
list.add("5555");
list = markLength4(list);
for (String x : list) {
System.out.println(x);
}
}
}