我的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