我的for循环中的java.lang.OutOfMemoryError

我的for循环中的java.lang.OutOfMemoryError,java,list,linked-list,Java,List,Linked List,我正在尝试获取列表的大小,但出现错误: Java HotSpot(TM) 64-Bit Server VM warning: Exception java.lang.OutOfMemoryError occurred dispatching signal UNKNOWN to handler- the VM may need to be forcibly terminated Exception in thread "main" 这是我的密码: public void wrapText(Str

我正在尝试获取列表的大小,但出现错误:

Java HotSpot(TM) 64-Bit Server VM warning: Exception java.lang.OutOfMemoryError occurred dispatching signal UNKNOWN to handler- the VM may need to be forcibly terminated
Exception in thread "main"
这是我的密码:

public void wrapText(String text, int width)
  {
    List<String> items = new LinkedList<String>(Arrays.asList(text.split(" ")));
    for(int j = 0; j < items.size(); j++){
        items.add(width, "\n");
    }
    System.out.println(items);
    /* this method needs to be improved - it currently does not wrap text */
  //  System.out.println(text);
  }
public void wrapText(字符串文本,整数宽度)
{
列表项=新的LinkedList(Arrays.asList(text.split(“”));
对于(int j=0;j

我做错了什么?

每次迭代,您都会在列表中添加一个元素,从而增加其大小。在每次迭代结束时,
j
将始终求值为
true
,将
for
转换为无限循环,其调用堆栈最终将耗尽JVM的内存

如果只想在列表的初始长度上重复for循环,只需在循环之前将该值保存到变量中,并使用该值而不是
.size()

int len=items.size();
对于(int j=0;j
每次迭代,您都会在列表中添加一个元素,从而增加其大小。在每次迭代结束时,
j
将始终求值为
true
,将
for
转换为无限循环,其调用堆栈最终将耗尽JVM的内存

如果只想在列表的初始长度上重复for循环,只需在循环之前将该值保存到变量中,并使用该值而不是
.size()

int len=items.size();
对于(int j=0;j
我对你想要什么的理解

   public void wrapText(String text, int width)
      {
        String resultingString="";
        for(String item : text.split(" ")){
            resultingString +=  item +"\n";
        }
        System.out.println(resultingString);
        /* this method needs to be improved - it currently does not wrap text */
      //  System.out.println(text);
      }

我对你想要什么的理解

   public void wrapText(String text, int width)
      {
        String resultingString="";
        for(String item : text.split(" ")){
            resultingString +=  item +"\n";
        }
        System.out.println(resultingString);
        /* this method needs to be improved - it currently does not wrap text */
      //  System.out.println(text);
      }

出现此错误的原因是因为有一个无限循环
items.size()
将始终大于j

这是因为您向列表中添加了一个项目,这意味着您向它的大小添加了1,并且在每次循环迭代中也向j添加了1,因此j永远不会超过列表的大小。因此,循环永远不会停止。您可以添加一个变量
int size=items.size()
,然后将其放入循环中,而不是
items.size()
,如下所示:

List<String> items = new LinkedList<>(Arrays.asList(text.split(" ")));
int size = items.size();
for(int j = 0; j < size; j++){
    items.add(width, "\n");
}
System.out.println(items);
List items=newlinkedlist(Arrays.asList(text.split(“”));
int size=items.size();
对于(int j=0;j

这将消除您正在发生的错误

出现此错误的原因是您有一个无限循环
items.size()
将始终大于j

这是因为您向列表中添加了一个项目,这意味着您向它的大小添加了1,并且在每次循环迭代中也向j添加了1,因此j永远不会超过列表的大小。因此,循环永远不会停止。您可以添加一个变量
int size=items.size()
,然后将其放入循环中,而不是
items.size()
,如下所示:

List<String> items = new LinkedList<>(Arrays.asList(text.split(" ")));
int size = items.size();
for(int j = 0; j < size; j++){
    items.add(width, "\n");
}
System.out.println(items);
List items=newlinkedlist(Arrays.asList(text.split(“”));
int size=items.size();
对于(int j=0;j

这将消除您正在发生的错误

@AlexandarPetrov我只想要
项。添加(宽度,“\n”)
以保持列表的长度。因此,将
j
设置为
项的长度
并反向迭代当j项。添加(宽度,“\n”)以保持列表长度不变。因此,将
j
设置为
项的长度,并在j