Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 将输入添加到列表中_Java_List_Arraylist_Input_Collections - Fatal编程技术网

Java 将输入添加到列表中

Java 将输入添加到列表中,java,list,arraylist,input,collections,Java,List,Arraylist,Input,Collections,我试图将用户的输入添加到列表中,然后以相反的顺序显示它。添加元素直到用户输入0。这是我的密码: import java.util.ArrayList; import java.util.Collections; import java.util.List; import java.util.Scanner; public class InputInArrrayList{ public static void main(String[] args) { Scanner s

我试图将用户的输入添加到列表中,然后以相反的顺序显示它。添加元素直到用户输入0。这是我的密码:

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Scanner;

public class InputInArrrayList{
    public static void main(String[] args) {
        Scanner s = new Scanner(System.in);
        int a = s.nextInt();
        List<Integer> myList = new ArrayList<>();
        while(a > 0) {
            myList.add(a);
            if (a == 0){
                break;
            }
        }
        Collections.reverse(myList);
        System.out.println(myList);
    }
}
import java.util.ArrayList;
导入java.util.Collections;
导入java.util.List;
导入java.util.Scanner;
公共类InputArrayList{
公共静态void main(字符串[]args){
扫描仪s=新的扫描仪(System.in);
int a=s.nextInt();
List myList=new ArrayList();
而(a>0){
添加(a);
如果(a==0){
打破
}
}
收藏。反面(myList);
System.out.println(myList);
}
}

但是循环在0时不会中断。相反,它抛出了OfMemoryError:Java堆空间。我做错了什么?

请更正您的循环

List<Integer> myList = new ArrayList<>();
while(true) {
    int a = s.nextInt();
    if (a == 0){
        break;
    }  else
        myList.add(a);
    }
List myList=new ArrayList();
while(true){
int a=s.nextInt();
如果(a==0){
打破
}否则
添加(a);
}

执行中断至少需要一个a>=0:

   while(a >= 0) {
        myList.add(a);
        if (a == 0){
            break;
        }
    }

您的问题是以下代码:

while(a > 0) {
    myList.add(a);
    if (a == 0){
        break;
    }
}
正如您在读取第一个用户输入并将其分配给
a
后所看到的,while循环无限运行。这是因为作为
a
变量的条件参数从未更改。
因此,必须在while循环中插入更新该变量的代码部分。下面是一个简单的修复方法:

Scanner s = new Scanner(System.in);
int a = 1;
List<Integer> myList = new ArrayList<>();
while(a > 0) {
    a = s.nextInt();
    if (a == 0) {
        break;
    } else {
        myList.add(a);
    }        
}  
Scanner s=新的扫描仪(System.in);
INTA=1;
List myList=new ArrayList();
而(a>0){
a=s.nextInt();
如果(a==0){
打破
}否则{
添加(a);
}        
}  

当前,当一个get设置为第一个数字时,您将进入一个无限循环,然后继续循环,因此,继续向列表中添加相同的数字。 您需要在while循环中添加。
int a=s.nextInt()

您只读取一个输入(在循环之前)。然后进入一个无限循环,如果它大于0,请在您的脑海中尝试执行您的代码。示例:用户输入
5
<代码>5>0因此进入while循环。您将
5
添加到列表中<代码>5!=0这样while就不会中断。再次检查循环条件,发现
5
仍然大于
0
。它将再次添加到列表中。不许休息。另一个循环。你看到问题了吗?:)