如果未指定大小,如何在数组列表中实现无限循环

时间:2019-06-10 13:43:30

标签: java arraylist

我尝试了以下操作,但未获得任何输出:

ArrayList<String> list=new ArrayList ();
Scanner s=new Scanner(System.in);

for(int i=0; i<list.size(); i++)
{
    System.out.println("Enter string  "+(i+1));
    String se = s.next();        
    list.add(se);
}

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

4 个答案:

答案 0 :(得分:1)

您需要循环输入Scanner,直到得到空行,而不是List。您的List是空的,因此您不会进入循环。

List<String> list = new ArrayList<>();
Scanner s = new Scanner(System.in);

int counter = 1;
String userInput;
System.out.println("Enter string "+ counter);
while (true) { // Infinite loop, you need a break inside of the loop to get out of it
    // Assign the input value to the userInput variable
    userInput = s.nextLine();
    // Stop looping when it is an empty line
    if (userInput.isEmpty()) {
        break;
    }

    list.add(userInput);
    counter++;
    System.out.println("Enter string "+ counter);
}

for (String st : list) {
    System.out.println(st);
}

答案 1 :(得分:0)

here the size is specified by the user...
now it works...

 ArrayList<String> list=new ArrayList ();
         Scanner s = new Scanner(System.in);
            System.out.println("How many strings to add");
            int a = s.nextInt();
            for(int i=0; i<a; i++)
            {
                System.out.println("Enter string  "+(i+1));
                String se = s.next();        
                list.add(se);
            }

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

答案 2 :(得分:0)

之所以没有得到任何输出,是因为在用元素填充列表之前,您正在循环中使用list.size()作为比较值。它是空的,因此在您向其中添加一些元素之前,其大小将始终为0

  

返回此列表中的元素数。如果此列表包含多个Integer.MAX_VALUE元素,则返回Integer.MAX_VALUE。

以上引用来自列表Javadoc。请记住,阅读您要使用的新概念的文档始终是一个好主意。

  

您不能在列表大小上使用for循环来首先创建列表。您需要具有其他控制机制,例如while循环,该循环一直持续到用户输入某种“最终”值为止。

因此,不要使用列表大小(如上面的注释所述),您应该使用另一种控制机制,例如可以定义列表大小的局部变量。也可以用来设置列表的初始容量。

    // Use this local variable as a control mechanism
    final int listSize = 10;

    // Create new array with the initial capacity set to 10
    List<String> list = new ArrayList<>(listSize);
    Scanner s = new Scanner(System.in);

    // Use a dedicated integer value for the loop
    for(int i = 0; i < listSize; i++)
    {
        System.out.println("Enter string  " + (i+1));
        String se = s.nextLine();
        list.add(se);
    }

    // Once the list has been populated we can use it's
    // size as a comparison value in a loop
    for(int i = 0; i < list.size(); i++)
    {
        // Print each string in a new line
        System.out.println(list.get(i));
    }

可能对您将来有帮助的便笺组合:

  • 每当要在单独的行中打印每个日志时,请使用System.out.println而不是System.out.print

  • 以可读的方式设置代码格式,以便您和其他人都更容易查看它。在我看来,这包括使用至少单个空格分隔语法中的每个元素以及遵循正确的命名约定。

答案 3 :(得分:0)

代码中的第一个循环尝试遍历0到 list.size()之间的值-也为0,因为列表为空。

在此示例中,除非用户提供退出 STOP_WRITING_CODE 值,否则您的程序将继续询问字符串。

static final String STOP_WRITING_CODE = "exit";

ArrayList<String> list=new ArrayList();
Scanner s=new Scanner(System.in);
String se = "";

while (true) {
    System.out.println("Enter string: ");
    se = s.next();
    if(se != STOP_WRITING_CODE)
        break;

    list.add(se);
}

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