Java ArrayList程序未按预期工作

Java ArrayList程序未按预期工作,java,arraylist,Java,Arraylist,代码未按预期工作。Console不断地请求值,并且从不停止 package com.java.collections; import java.util.*; public class ArrayList_2 { public static void main(String[] args) { ArrayList<String> arrayList = new ArrayList<String>(); readList(ar

代码未按预期工作。Console不断地请求值,并且从不停止

package com.java.collections;

import java.util.*;

public class ArrayList_2 {

    public static void main(String[] args) {

        ArrayList<String> arrayList = new ArrayList<String>();
        readList(arrayList);
        displayList(arrayList);
    }

    private static void displayList(ArrayList<String> arrayList) {

        for(int i=0;i<arrayList.size();i++){
            System.out.println(arrayList.get(i));
        }

    }

    private static ArrayList<String> readList(ArrayList<String> list) {

        @SuppressWarnings("resource")

        Scanner obj = new Scanner(System.in);

        while(obj.hasNext()){
            String item = obj.next();
            list.add(item);
        }
        return list;
    }

}
package com.java.collections;
导入java.util.*;
公共类数组列表2{
公共静态void main(字符串[]args){
ArrayList ArrayList=新的ArrayList();
可读列表(arrayList);
显示列表(arrayList);
}
私有静态无效显示列表(ArrayList ArrayList){

对于(int i=0;i我会在
readList
方法中的
循环中更改
,如下所示:

Scanner obj = new Scanner(System.in);

String item = "";

//*priming read*
item = obj.nextLine();

while(!item.equals("-0"))
{
  list.add(item);

  //*update read*
  item = obj.nextLine();
} //end while

通过这种方式,循环正在检查将包含在
项中的sentinel值

您的代码不工作,因为它卡在while循环中。您的代码中没有中断条件。请尝试用此值替换它:

    while (obj.hasNext()) {
        String item = obj.next();
        if (item.equals("stop")) {
            break;
        }
        // otherwise do stuff here...
    }
    obj.close();

当您输入“停止”时,循环将终止。请不要忘记关闭扫描仪实例。

您的程序不会停止并不断请求更多值,因为没有代码告诉程序停止:)

您可以添加一些条件,告知代码停止接受输入,例如,当用户输入以下5个单词时(请参见注释行):

private静态无效读取列表(ArrayList列表){
@抑制警告(“资源”)
int start=1;//开始计数
int end=5;//结束计数
扫描器obj=新扫描器(System.in);

while(obj.hasNext()&&start我会尝试确定。但我不明白我的代码为什么不起作用。让我更好地解释一下,
hasNext
如果扫描仪,
obj
在其输入中有另一个标记,则返回true。因此,即使只输入空字符串,也会返回true。您的循环实际上没有停止循环的哨兵值。在我的示例中我提供了一个代码,
-0
。无法运行。但是我理解你说的。非常感谢!有没有其他方法可以正确编码?请帮助。好的。你在使用什么IDE?输入仍然没有停止?输入在我输入
-0
时停止。我使用NetBeansThanks,我现在知道了!hasNext()当我输入nothing并单击enter时,方法返回true?我相信它将返回true,因为您仍在输入一个空输入。您可以调试代码并检查文档以验证这一点。谢谢,我现在知道了!hasNext()是否当我输入nothing并单击enter时,方法返回true?为什么不直接测试它?只需在循环中添加以下内容,例如:System.out.println(“hasNext()为true”);
 private static void readList(ArrayList<String> list) {

    @SuppressWarnings("resource")
    int start = 1; // start count
    int end = 5;   // end count
    Scanner obj = new Scanner(System.in);

    while(obj.hasNext() && start<=end){ // <- Note the condition!
        String item = obj.next();
        list.add(item);
        start++; // Keep a count.
    }

}